前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统驱动之编写设备驱动之i2c_driver

Linux系统驱动之编写设备驱动之i2c_driver

作者头像
韦东山
发布2021-12-08 10:51:56
8650
发布2021-12-08 10:51:56
举报
文章被收录于专栏:韦东山嵌入式

资料下载

coding无法使用浏览器打开,必须用git工具下载:

代码语言:javascript
复制
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git

视频观看

百问网驱动大全

编写设备驱动之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

下节视频。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资料下载
  • 视频观看
  • 编写设备驱动之i2c_driver
    • 1. 套路
      • 1.1 I2C总线-设备-驱动模型
      • 1.2 示例
    • 2. 编写i2c_driver
      • 2.1 先写一个框架
      • 2.2 在为AP3216C编写代码
    • 3. 构造i2c_client
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档