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、测试现象
代码在附件中
{:1_143:}
页:
[1]