Linux I2C 核心、总线、与设备驱动

**

Linux I2C architecture

1.I2C仅使用SCL、SDA 两根信号线实现通信
2.I2C驱动由I2C core、I2C bus driver、I2C device driver三部分组成

**
1. I2C core
为I2C bus driver and device driver提供register 、unregister、communication
2. I2C bus driver
对应硬件adapter的实现,adapter可由CPU控制,甚至可以直接集成在CPU内部
包含:struct i2c_adapter(对该adapter的描述)、struct i2c_algorithm(负责通信)、functions(产生通信信号)
通过I2C bus driver,我们可以控制I2C adapter,来达到主或者从的方式读写,产生启止,ACK等
3. I2C device driver
对应硬件设备端的实现,这些设备挂在I2C adapter上,通过I2C适配器与CPU交换数据
包含:struct i2c_driver、struct i2c_client、functions(具体设备具体实现)
可以通过sysfs文件系统中/sys/bus/i2c/* 来查看当前i2c adapter上已挂在的device

4. i2c_driver、i2c_client、i2c_adapter 和 i2c_algorithm 这 4 个数据结构的作用及关系

struct i2c_adapter {
对应物理上的一个adapter,其上可以被多个i2c_client依附(链表连起来)
struct i2c_algorithm {
对应一套通信方法
master_xfer();
}
}
缺少i2c_algorithm的i2c_adapter什么也做不了,因此i2c_adapter中包含其使用的i2c_algorithm的指针
master_xfer()用于产生I2C访问周期需要的信号,以i2c_msg为单位
struct i2c_msg {
__u16 addr;
__u16 flags;
__u16 len;
__u8 *buf;
};

i2c_client 对应一个真实的物理设备,每个I2C设备都需要一个i2c_client来描述,其依附于i2c_adapter
i2c_driver对应一套驱动方法,主要是当探测物理设备的存在与否,然后使设备与adapter关联起来,纯粹用于辅助作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值