linux i2c驱动(二)重要的结构体与接口

目录

1.I2C在Linux的体系架构

2.其中重要的结构体

2.1 i2c_adapter

2.2 i2c_algorithm

2.3 i2c_msg *msgs

2.4 I2c_client 

2.5 i2c_driver

3.一些关键的接口


1.I2C在Linux的体系架构

在Linux内核路径下 kernel\drivers\i2c 可以看到I2C相关的源码其中:

  (1)i2c-core.c 实现i2cd的核心功能

  (2)i2c-dev.c  此文件可以当作是一个学习i2c设备(作slave)驱动的一个模板,他并不是针对特定的设备去设计的。

  (3)busses文件夹包含了一些i2c主机控制器(作host的)的驱动。

2.其中重要的结构体

代码路径:kernel\include\linux\i2c.h

2.1 i2c_adapter

        adapter对应物理上的一个适配器,列如一个SOC可能有多个i2c,列如i2c0,i2c1就有各自对应的adapter可以看到adapter里面有一个i2c_algorithm,此结构体其实会包含一套通信方法,没有这个adapter什么也做不了。

2.2 i2c_algorithm

        其中在i2c_algorithm可以看到,通信接口其实有用到i2c_msg *msgs这个结构体,这个也是在通信过程中相当重要的一个结构体,定义在kernel\include\uapi\linux\i2c.h。

2.3 i2c_msg *msgs

        从这个结构体是不是在联想到上节讲到的i2c传输协议是如何发送数据的,是不是就很容易联系起来了?

2.4 I2c_client 

        此结构体就是对一个I2c slave的抽象,其描述的就是对应的一个i2c设备,并且这些设备都需要使用到对应的adapter,才能工作。那么有i2c_client那肯定也得有i2c_driver了。

2.5 i2c_driver

        i2c_driver与client可以是一对多的关系,就是说同一个dirver其实共给不同的设备去使用,这点其实同platform总线驱动。dirver中也包含了许多相关功能的实现方法。

3.一些关键的接口

收发接口:kernel\drivers\i2c\i2c-core.c

       发: i2c_master_send(const struct i2c_client *client, const char *buf, int count);

       收:i2c_master_recv(const struct i2c_client *client, char *buf, int count);

       这些都是经过封装过的这两个函数都会调用到 i2c_transfer再调用到 __i2c_transfer 最后调用到 一下这个 结构体中的函数  也就是上面我提到的 i2c_algorithm 来传输数据。

      master_xfer 模板  一般在主控的i2c驱动会有。

下期将分别主设备 与从设备的注册来分析i2c驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值