Notes on Linux I2C
Linux i2c 笔记
i2c 总线简介
i2c(IIC, 读作/ˈaɪ skwɛərd ˈsiː/或者/ˈaɪ tuː ˈsiː/) 的意思是inter IC,也就是芯片间通信。i2c 总线是由Philips 在80年代早期设计的,用来实现同一个电路板上的各个芯片之间简易通信的总线。
i2c 的主要特性
- 只有两条连接线,SDL(串行数据线)和SCL(串行时钟线)
- 没有严格的波特率要求
- 芯片间是简单的主/从关系,每个总线上的设备可以通过一个唯一的地址识别
- i2c 是一个真正的多主总线,提供仲裁逻辑和冲突检测
i2c 子系统架构
-
i2c-client
i2c 总线上的设备驱动 -
i2c-core
子系统实现的i2c 协议以及其他公共工具函数 -
i2c-algorithm
通用算法,给i2c-adapter 驱动提供和子系统交互的接口 -
i2c-adapter
操作特定的i2c 总线硬件,实现核心子系统中提供的总线操作 -
i2c-dev
用于实现用户空间的i2c 驱动
i2c 总线驱动
-
struct i2c_adapter;
i2c 总线驱动硬件适配结构体,实现具体总线的操作 -
struct i2c_algorithm;
i2c 总线驱动的具体操作接口,实现新总线操作时需要实现这个具体的硬件操作接口 -
int i2c_add_adapter(struct i2c_adapter *);
添加总线驱动 -
int i2c_del_adapter(struct i2c_adapter *);
删除总线驱动
i2c 设备驱动
-
struct i2c_client;
i2c 设备结构体,包含struct device
,用于向驱动模型注册设备 -
struct i2c_driver;
i2c 驱动结构体,包含struct device_driver
,向系统注册驱动 -
int i2c_register_driver(struct module *, struct i2c_driver *);
注册设备驱动 -
void i2c_del_driver(struct i2c_driver *);
删除设备驱动
i2c 设备和驱动匹配
-
int i2c_register_driver(struct module *, struct i2c_driver *);
阅读这个函数来理解i2c 设备和驱动的动态绑定过程,其中分成两种情况。一种是类似于驱动模型的probe 过程,另一种是调用attach函数。
Sat, 19 Feb 2022 04:38:51 +0800
Hi my loved one! I want to say that this article is amazing, great written and include almost all vital infos. I would like to peer more posts like this . how to be a payment processor
Sun, 20 Feb 2022 04:05:39 +0800
I believe this web site has some rattling wonderful info for everyone . Payment Gateway Reseller Program
Mon, 06 Jun 2022 22:20:32 +0800
Thank you for your wonderful post! It has long been very insightful. I hope that you’ll continue sharing your wisdom with us. 回收手提電腦