之前做过一个网络监控的qt项目,现在准备为其添加一个ap3216c传感器采集环境光功能,本文为ap3216c驱动模块的驱动程序,明天会将更新的qt应用程序思路和源码上传。
此设备为i2c设备,此模块又使用iio子系统,regmap子系统。
0 I2C时序
写时序:
读时序:
1 i2c总线设备驱动:
1.1 I2c总线驱动
一般 SOC 的 I2C 总线驱动都是由半导体厂商编写的,比如 I.MX6U 的 I2C 适配器驱动 NXP 已经编写好了,这个不需要用户去编写。因此 I2C 总线驱动对我们这些 SOC 使用者来说是被屏蔽掉的,我们只要专注于 I2C 设备驱动即可。
I2C 总线驱动重点是 I2C 适配器(也就是 SOC 的 I2C 接口控制器)驱动,这里要用到两个重要的数据结构: i2c_adapter 和 i2c_algorithm.
I2C 总线驱动,或者说 I2C 适配器驱动的主要工作就是初始化 i2c_adapter 结构体变量,然后设置 i2c_algorithm 中的 master_xfer 函数。
完成以后通过 i2c_add_numbered_adapter(静态)或 i2c_add_adapter(动态) 这两个函数向系统注册设置好的 i2c_adapter。
1.2 I2c设备驱动
I2C 设备驱动重点关注两个数据结构: i2c_client 和 i2c_driver,i2c_client 就是描述设备信息的, i2c_driver 描述驱动内容,类似于 platform_drive。
1.2.1 i2c_client 结构体
每检测到一个 I2C 设备就会给这个 I2C 设备分配一个i2c_client。
1.2.2 i2c_driver 结构体
里面就包含了,加载模块时自动运行的probe函数还有卸载模块时自动运行的remove函数、匹配设备树时使用的驱动结构体device_driver等等;
注册和删除i2c_dri