[X]关闭

i2c子系统

文档创建者:ぉ沙皮狗的忧伤
浏览次数:7068
最后更新:2020-02-13
本帖最后由 ぉ沙皮狗的忧伤 于 2020-2-13 11:17 编辑

1、先看i2c子系统框架及流程
截图202002131104235381..png
截图202002131104599138..png
截图202002131105244148..png

  要了解i2c驱动分为3层,i2c_driver,i2c_core、i2c_adapter,以及i2c底层的时序

2、解析设备数代码
   ①、compatible一定要和代码中名字一致,否则设备无法匹配驱动
   ②、i2c的内部地址,是用来区分不同的从设备,需要从芯片手册中去寻找
   ③、pinctrl的描述管脚、功能、模式描述一定要正确,可以参考 kernel/Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.txt
       截图202002131106231279..png
       截图202002131106553792..png
3、解析i2c驱动代码
  ①、构建i2c设备,并注册到i2c总线上
    截图202002131107596048..png

  ②、驱动通过of_match_ptr函数在设备树中根据compatible名字来寻找相应的硬件描述信息,即驱动匹配相应的设备
       截图202002131108395889..png
  ③、匹配成功进入probe函数
      1)、手动分配主设备号
      2)、给全局数据分配空间
      3)、初始化并注册设备
          截图202002131109466613..png
   ④、实现fops文件描述符
       截图202002131110217980..png
   ⑤、实现数据的收发
      1)、通过copy_from_user和copy_to_user实现驱动和应用的交互
      2)、通过i2c_transfer实现驱动和底层硬件的数据交互
      3)、读写没有太大的差别,实现的逻辑颠倒一下
          截图202002131111339116..png
          截图202002131112031514..png
4、应用测试程序
    截图202002131112427591..png
5、测试现象
    截图202002131113152468..png


代码在附件中


EEPROM.zip

1.59 MB, 下载次数: 646

发表评论已发布 1

uisrc

发表于 2020-2-13 13:02:43 | 显示全部楼层

越努力越幸运!加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则