编写设备驱动之i2c_driver

Posted 韦东山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写设备驱动之i2c_driver相关的知识,希望对你有一定的参考价值。

编写设备驱动之i2c_driver

参考资料:

  • Linux内核文档:
    • Documentation\\i2c\\instantiating-devices.rst
    • Documentation\\i2c\\writing-clients.rst
  • Linux内核驱动程序示例:
    • drivers/eeprom/at24.c
  • 本节代码:GIT仓库中
    • 框架:
      • IMX6ULL\\source\\04_I2C\\02_i2c_driver_example
      • STM32MP157\\source\\A7\\04_I2C\\02_i2c_driver_example
    • AP3216C
      • IMX6ULL\\source\\04_I2C\\03_ap3216c
      • STM32MP157\\source\\A7\\04_I2C\\03_ap3216c

1. 套路

1.1 I2C总线-设备-驱动模型

1.2 示例

分配、设置、注册一个i2c_driver结构体,类似drivers/eeprom/at24.c

在probe_new函数中,分配、设置、注册file_operations结构体。
在file_operations的函数中,使用i2c_transfer等函数发起I2C传输。

2. 编写i2c_driver

2.1 先写一个框架

2.2 在为AP3216C编写代码

百问网的开发板上有光感芯片AP3216C:

AP3216C是红外、光强、距离三合一的传感器,以读出光强、距离值为例,步骤如下:

  • 复位:往寄存器0写入0x4
  • 使能:往寄存器0写入0x3
  • 读红外:读寄存器0xA、0xB得到2字节的红外数据
  • 读光强:读寄存器0xC、0xD得到2字节的光强
  • 读距离:读寄存器0xE、0xF得到2字节的距离值

AP3216C的设备地址是0x1E。

3. 构造i2c_client

下节视频。

以上是关于编写设备驱动之i2c_driver的主要内容,如果未能解决你的问题,请参考以下文章

Linux——Linux驱动之玩转I2C(下)I2C driver驱动程序框架实现总结(i2c_driver结构体框架实现步骤驱动中读写I2C设备实测)

Linux——Linux驱动之玩转I2C(下)I2C driver驱动程序框架实现总结(i2c_driver结构体框架实现步骤驱动中读写I2C设备实测)

Linux I2C 驱动 24C256 E2PROM

linux内核I2C子系统学习

2019 5 19 IIC驱动程序

I2c_驱动框架