IIC子系统框架
可以看到iic子系统分为三层。
1、设备驱动层:这一层是我们重点关注的,含有IIC设备层(相当于平台设备驱动模型的设备)i2c_client,IIC设备驱动层(相当于相当于平台设备驱动模型的驱动)i2c_driver。i2c_client里含有需要通信的从机的所有信息,配置i2c_client需要使用到第三层的适配器驱动层。设备驱动层给应用层提供操作底层硬件的接口。
2、核心层:具有承上启下作用,为设备驱动层和适配器驱动层提供编程的接口,将设备驱动层的i2c_driver和i2c_client相匹配,把需要通信的从机挂载到主机上。作为驱动开发者无需关注此层。
3、适配器驱动层:内核使用i2c_adapter结构体描述一个适配器驱动,从而实现我们需要通信的IIC控制器驱动程序还有IIC协议标准时序。这一层是由芯片厂商提供。
IIC子系统分层可以使得具体的设备驱动和硬件无关,移植起来方便,多个设备操作同一个总线时无资源冲突。
首先来看设备驱动层的iic_driver。
我们重点关注其中的四个成员即可。
struct i2c_driver{
Unsigned int class; //设备的分类,传感器
Int (*probe)(struct i2c_client*,const struct i2c_device_id *); // 和i2c_device匹配时会调用此函数
Int (*remove)(struct i2c_client *); /和i2c_device解除匹配关系时会调用此函数