I2C-client-devices-drivers-writing

2024-02-10 16:08

本文主要是介绍I2C-client-devices-drivers-writing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<0>About L3G4200D digital output gyroscope sensor

            made by STMicroelectronics.

<1>i2c-client的驱动从板级枚举开始(对应的结构:struct platform_data{})
         >>> e.g: /arch/arm/mach-x/xxx.c    
    a:板级枚举时需要初始化的内容包括:platform_data结构和client特征信息。
    b:platform_data, e.g:
#if defined (CONFIG_SENSOR_L3G4200D)
#define L3G4200D_IRQ_PIN PIN5_PA0
static int l3g4200d_board_init(void)
{if(gpio_request(L3G4200D_IRQ_PIN, "l3g4200d_irq") != 0){gpio_free(L3G4200D_IRQ_PIN);printk("> l3g4200d init platform_hw gpio_request error.\n");return -EIO;}gpio_direction_input(L3G4200D_IRQ_PIN);return 0;
}struct l3g4200d_platform_data l3g4200d_pdata = { .poll_interval = 2, .min_interval = 0,.fs_range = 250, .axis_map_x= 0,.axis_map_y= 1,.axis_map_z= 2,.negate_x= 0,.negate_y= 0,.negate_z= 0,.init = l3g4200d_board_init,
};
#endif  //end->CONFIG_SENSOR_L3D4200D
    c: 芯片特征信息,e.g:
static struct i2c_board_info __initdata board_i2c0_devices[] = {{.type                   = "l3g4200d",.addr                   = 0x69,    /*slave addr*/.flags                  = 0,.irq                    = L3G4200D_IRQ_PIN,.platform_data          = &l3g4200d_pdata,},........
};

d:最终注册这个设备的board信息到指定的I2C总线:
i2c_register_board_info(default_i2c0_data.bus_num, board_i2c0_devices,ARRAY_SIZE(board_i2c0_devices));
         把platform_data的数据保存起来,备总线方法使用.

e:枚举的其他方法可以参考/kenrel/Documentation/i2c/instantiating-devices

<2>device-driver:

a:初始化struct i2c_driver结构,e.g:
static struct i2c_driver l3g4200d_driver = { .driver = { .owner = THIS_MODULE,.name = L3G4200D_GYR_DEV_NAME,.pm = &l3g4200d_pm, /* suspend(), resume() */},  .probe = l3g4200d_probe,.remove = __devexit_p(l3g4200d_remove),.id_table = l3g4200d_id,};

b:实现probe方法:
static int  xxx_probe(struct i2c_client *client, const struct i2c_device_id *id);
        >>>l3g4200d_pdata会被bus方法存到client->dev.platform_data,
         如果有board级的方法,可以在通过这个接口调用.

        >>>检查platform_data(在板级注册)

        >>>检查adapter功能,e.g:

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {err = -ENODEV;goto exit;}p.s. more in kernel/Documentation/i2c/functionality
        >>>把dev.platform_data存到client->pdata.

        >>>调用板级初始化方法,本例中为dev.platform_data.init() <if there has>;

                e.g: 亦可直接完成:申请gpio, 注册中断等工作.

        >>>检查芯片,通常通过一个叫"WHO_AM_I"的寄存器检查其chip id.

        >>>注册字符设备,class,input设备,misc....

<3>i2c基础方法, read(), write():

/* read method*/
i2c_read_reg();
i2c_read();/* write method */
i2c_write_reg();
i2c_write();

<4>上层接口:
a: input
b: cdev
c: procfs
d: sysfs

/*** ____/|    * \ o.O|*  =(_)= -> to be continue...*    U*/

这篇关于I2C-client-devices-drivers-writing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697534

相关文章

Stripe data files across multiple physical devices and locations

Stripe data files across multiple physical devices and locations 如果在没有做条带的磁盘(即从存储到OS没有做raid),那么就需要手工去做I/O的分布。切记,不应该将频繁使用的table和其index分开,这样会正大I/O; 针对tables、indexes、temp tablespace,首先调优SQL,其次如果真心无法再

基于 rt-thread的I2C操作EEPROM(AT24C02)

一、AT24C02 The AT24C01A/02/04/08A/16A provides 1024/2048/4096/8192/16384 bits of serial electrically erasable and programmable read-only memory (EEPROM) organized as 128/256/512/1024/2048 words of 8 b

I2C总线协议(AT24C02C)

本文章是基于TQ2440开发板上的AT24C02C 一, I2C简介       IIC即Inter-Integrated Circut(集成电路总线),有飞利浦在八十年代实际出来. I2C是一种多向控制总线,就是同一个总线下可以连接多个芯片,同时每个芯片都可以作为实时数据传输的控制源. 二. 硬件结构       I2C串行总线一般有两根信号线,一根是双向的数据总线SDA, 一根是

petalinux i2c的配置

petalinux i2c配置 1.硬件平台配置 下图是我这边的一个硬件测试平台,仅供参考 2.内核配置 1.打开petalinux工程路径 1.cd <plnx-proj-root> 2.petalinux-config -c kernel 3.找到Xilinx I2C Controller Device Drivers -> I2C support -> i2C Hardware

在修改文件 /ect/hosts时无法保存 can‘t open file for writing

输入:q!  即可 情境: 在Master节点中执行如下命令打开并修改Master节点中的“/etc/hosts”文件: sudo vim /etc/hosts 可以在hosts文件中增加如下两条IP和主机名映射关系: 192.168.1.121 Master192.168.1.122 Slave1

spring mvc 数据绑定问题 提交表单提示HTTP status 400, The request sent by the client was syntactically incorrect

我们在spring mvc 中controller方法中的参数,spring mvc会自动为我们进行数据绑定。 spring mvc 方法中不一定要全部都有 form表单提交的属性, 也可以有 请求属性中 没有的参数(这时候只会把对应不上的参数设为null),这两种情况都不会报错。 但是有几种情况会报错,可能会提示HTTP status 400,  The request sent by th

STM32—I2C的基本时序,MU6050的ID读取

目录 前言 一、I2C基本时序的书写 二、I2C基本时序的代码 1.引脚的初始化 2.起始时序 3.停止时序 4.发送一个字节 5.接收一个字节 6.发送一个应答 7.接收一个应答 三.MU6050的应答 1.先验证下应答功能: 2.读取ID 总结 前言 环境: 芯片:STM32F103C8T6 Keil:V5.24.2.0 模块:MU6050

VirtualBox安装VirtualBox Extension Pack,支持USB No USB devices connected after upgrade

安装步骤及出现问题解决No USB devices connected after upgrade: 一、本要主机ubuntu14.04,安装virtualbox,支持usb设置步骤: 1.安装VirtualBox. 可以从https://www.virtualbox.org官方站点下载或者从软件中心。 2.在VirtualBox里安装Windows; 3.为USB2.0,你需要

【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS

目录 AbstractINTRODUCTIONBACKGROUNDARMv8 ArchitectureSecurity statesTrustZone extensionsVirtualization Communication with Peripherals MOTIVATIONATTACK MODEL AND ASSUMPTIONSYSTEM DESIGNOverviewExecu

每天分享一个FPGA开源代码(3)- I2C

​ I2C(Inter-Integrated Circuit)是一种两线式串行总线。   ​   一、主要特点 1. 简单性:只使用两根线,即串行数据线(SDA)和串行时钟线(SCL),减少了硬件连接的复杂性。 2. 多设备连接:可以连接多个具有 I2C 接口的设备到同一总线,每个设备都有唯一的地址,通过地址来区分和通信。 3. 双向通信:SDA 线允许数据在主设备和从设备之间双