ぉ沙皮狗的忧伤 发表于 2020-2-13 11:14:23

i2c子系统

本帖最后由 ぉ沙皮狗的忧伤 于 2020-2-13 11:17 编辑

1、先看i2c子系统框架及流程




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

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

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


代码在附件中


uisrc 发表于 2020-2-13 13:02:43

{:1_143:}
页: [1]
查看完整版本: i2c子系统