注:本文资料全部来源于网络,同时加上个人理解。若有侵权,告知即删。若有错误,告知商讨。
1、Linux系统的IIC总线体系结构
主要包括:IIC核心、IIC总线驱动、IIC设备驱动。
- IIC总线驱动:对应一个SOC的IIC控制器
- IIC设备驱动:对应一个具体的IIC外设
- IIC核心:具体的外设挂载在具体的IIC控制器上,因此IIC设备驱动需要和IIC总线驱动对应。因此需要IIC核心match。
2、IIC设备驱动
功能:负责实现i2c_driver【包含一套驱动方法,操作具体的IIC外部设备方法】和i2c_client【包含具体的IIC外部设备的硬件信息,还有一些内核自动填充的信息】两个数据结构。一个i2c_driver可以驱动多个同类i2c_client。(驱动工程师一般编写这个)
设备驱动的实现方法有两种:
- i2c-dev:这种方法只封装了操作SOC中IIC控制器的一些方法。需要在用户层直接控制硬件IIC,属于“应用层驱动”。
- 在驱动层封装所有的设备驱动方法,向用户层提供最终的操作结果,硬件的操作在驱动层完成。(常用)
3、IIC核心
功能:IIC总线驱动和IIC设备驱动的注册和注销,IIC上层通信代码实现,探测设备,检测设备地址和上层代码实现。实现设备和IIC控制器的分离。
4、IIC总线驱动
功能:实现IIC适配器数据结构【i2c_adapter对应一个SOC里面硬件的IIC控制器】,i2c适配器的algorithm数据结构【i2c_algorithm实现IIC通信方法】。
IIC驱动框架
图注:IIC控制器本身挂载在Platform总线上。由i2c_board_info描述。
5、IIC设备驱动编写:
IIC驱动编写和一般字符设备编写API区别和工作流程
参考:
https://blog.csdn.net/wangdapao12138/article/details/81609243#commentsedit