Linux I2C体系

I2C总线仅仅使用 SCL 、 SDA 两根信号线就实现了设备之间的数据交互。

由于各种SOC都有自己的I2C总线,为了上层能统一接口,采用这种三层I2C架构.

I2C总线驱动主要实现了适用于特定I2C控制器的总线读写方法,并注册到Linux内核的I2C架构,I2C外设就可以通过I2C架构完成设备和总线的适配。但是总线驱动本身并不会进行任何的通讯,它只是提供通讯的实现,等待设备驱动来调用其函数。
I2C Core的管理正好屏蔽了I2C总线驱动的差异,使得I2C设备驱动可以忽略各种总线控制器的不同,不用考虑其如何与硬件设备通讯的细节

Linux的I2C构架分为三个部分:

1)I2C core框架

提供了核心数据结构的定义和相关接口函数,用来实现I2C适配器
驱动和设备驱动的注册、注销管理,以及I2C通信方法上层的、与具体适配器无关的代码,为系统中每个I2C总线增加相应的读写方法。

kernel抽象出I2C bus(/sys/bus/i2c),用于挂载和I2C adapter通过I2C总线连接的各个I2C slave device。
I2C Bus 并不是通讯上的总线,而是linux系统为了管理设备和驱动而虚拟出来的,在I2C Bus用来挂载后面将会使用到的I2C 适配器(adapter)和I2C设备(client)

2) I2C总线驱动 (i2c_adapter)

定义描述具体I2C总线适配器的i2c_adapter数据结构、实现在具体I2C适配器上的I2C总线通信方法,并由i2c_algorithm数据结 构进行描述。

封装了 struct device ,因此它是作为一个设备注册到内核中去的(是注册到i2c_bus_type里),此外非常重要的一个成员struct i2c_algorithm *algo ,这就是我们上边提到的 i2c 控制器收发数据的方法。

经过I2C总线驱动的的代码,可以为我们控制I2C产生开始位、停止位、读写周期以及从设备的读写、产生ACK等。

I2C总线驱动具体实现在/drivers/i2c目录下busses文件夹。

例如:
Linux I2C GPIO总线驱动为i2c_gpio.c.

全志 drivers/i2c/busses/i2c-sunxi.c

I2C总线算法在/drivers/i2c目录下algos文件夹。

例如:Linux I2C GPIO总线驱动算法实现在i2c_algo_bit.c.

针对不同类型的I2C控制器,实现对I2C总线访问的具体方法.(各种SOC不一样)

3) I2C 设备驱动(I2C client driver)

是对具体I2C硬件驱动的实现。I2C 设备驱动通过I2C适配器与CPU通信。

其中主要包含i2c_driver和i2c_client数据结构。
i2c_driver结构对应一套具体的驱动 方法,例如:probe、remove、suspend等,需要自己申明。

i2c_client数据结构由内核根据具体的设备注册信息自动生成,设备驱动 根据硬件具体情况填充。

I2C 设备驱动具体实现放在在/drivers/i2c目录下chips文件夹。

这里写图片描述

重要的结构体
i2c_driver
 struct i2c_driver {
 unsigned int class;
 int (*attach_adapter)(struct i2c_adapter *);//依附i2c_adapter函数指针
 int (*detach_adapter)(struct i2c_adapter *);//脱离i2c_adapter函数指针
 int (*probe)(struct i2c_client *, const struct i2c_device_id *);
 int (*remove)(struct i2c_client *);
 void (*shutdown)(struct i2c_client *);
 int (*suspend)(struct i2c_client *, pm_message_t mesg);
 int (*resume)(struct i2c_client *);
 void (*alert)(struct i2c_client *, unsigned int data);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值