根据前篇iic驱动基本概念,可以做一个简单的总结

i2c-core

postcore_initcall(i2c_init)->bus_register(&i2c_bus_type);i2c_add_driver(&dummy_driver);实现设备与驱动匹配检测的match,probe,remove等函数,实现底层通信函数

i2c_adapter

处于platform总线的i2c控制器,与控制器驱动在platform总线match上就会执行probe函数如下 i2c_add_numbered_adapter->i2c_register_adapter->of_i2c_register_devices(轮询并解析节点下的device_node子节点,将其转换成i2c_client(还可通过i2c_new_device新增))

i2c_add_driver调用栈

 

配置地址

一般作为图像传感器的命令通讯协议,比如红外传感器,ov系列传感器,一般的传感器都会有两个地址,这个完全可以根据厂商提供的设备地址分辨出来地址是几位,有的是7位,有的是8位(包含了读写位,取前7位做地址就好),10位(在初始化时配置成10位地址模式,就可以正常使用10位地址通讯了)

调试

做硬件或多或少都会出现一些错误,比如scl跟sda线反了,这种错误没有示波器是找不出通讯失败的原因

还有就是上拉电阻焊成了0欧姆,导致下拉却拉不下来,通讯也是肯定会失败,可用万用表测量电阻

一般可用i2c-tool调试,这个其实调试的就是i2c适配器,挂没挂设备都能使用,可用示波器探测信号是否正常

posted on 2022-03-07 23:35  lzd626  阅读(286)  评论(0编辑  收藏  举报