嵌入式分享#19:《嵌入式外设调试思路》--I2C设备篇
嵌入式外设调试思路I2C 设备篇I2C 设备调试时建议先确认软件配置和硬件连接再使用i2c-tools验证设备是否能够被正确识别。出现异常后结合内核日志、总线波形和电气条件逐层排查。1. I2C 速率基础常见 I2C 时钟频率范围为100 kHz400 kHz部分 RK 平台可达到1000 kHz全志平台通常将 I2C 称为 TWI。模式典型时钟频率设备树配置标准模式100 kHzclock-frequency 100000;快速模式400 kHzclock-frequency 400000;遇到读写返回NACK或Timeout时可以先将速率降到 100 kHz再观察问题是否缓解。2. 调试前的准备开始调试前先确认driver驱动已准备好device设备树/DTS配置正确SDA、SCL、电源和地线连接正常设备上电时序符合芯片手册要求已安装并能运行i2c-tools。完成上述检查后启动系统并用工具确认总线和设备地址。3. 软件层面的排查思路3.1 使用i2cdetect确认地址先扫描目标 I2C 总线i2cdetect-li2cdetect-ybus-number重点确认设备是否能被扫描到扫描到的地址是否与原理图、芯片手册一致地址是 7-bit 还是 8-bit 表示。注意I2C 设备地址通常按 7-bit 表示而一些资料会把读写位拼进去写成 8-bit 地址二者不要混淆。3.2 检查 DTS、总线与引脚复用确认设备树中目标 I2C 控制器节点已经启用pinctrl指向正确的 SDA/SCL 引脚组总线编号与实际使用的控制器对应从设备节点挂载在正确的 I2C 节点下clock-frequency处于设备支持范围。引脚复用错误时驱动可能看起来已经加载但总线上不会产生正确波形。3.3 确认驱动是否加载分别确认 I2C 控制器驱动和从设备驱动ls/sys/bus/i2c/devices/dmesg|grep-ii2c如果控制器没有注册优先检查内核配置、设备树和平台驱动如果控制器已注册但从设备没有出现再检查设备节点、地址和从设备驱动匹配情况。3.4 检查从设备状态I2C 从设备可能处于异常状态例如设备没有上电上电时序错误复位脚状态不对设备自身异常传感器仍处于复位或启动阶段。传感器调试中这类问题尤其常见。3.5 降低时钟频率如果读写返回NACK、Timeout等错误可以先降低总线速率i2cX { clock-frequency 100000; status okay; };若降速后恢复说明需要继续检查信号完整性、上拉、电容负载以及设备时序要求。4. 硬件层面的排查思路4.1 确认物理连接检查以下连接是否正确SDASCL电源与地上拉电阻设备地址配置脚复位和中断信号。4.2 测量上拉电压可以暂时断开 I2C 外设用万用表确认 SDA 和 SCL 的上拉电压是否接近系统电平例如1.8 V 或 3.3 V。若上拉电压不对继续检查上拉电阻是否缺失或阻值不合适总线电压域是否匹配是否有器件把总线持续拉低是否存在短路或焊接问题。4.3 结合示波器观察波形执行扫描命令的同时用示波器测量 SDA/SCLi2cdetect-ybus-number观察重点SCL 是否产生时钟SDA 是否随时钟正确变化Start/Stop 条件是否存在ACK 位是否返回上升沿是否过慢、是否有明显振铃或噪声是否出现总线被持续拉低的情况。5. 建议的排查顺序遇到 I2C 设备无法识别时可以按下面的顺序缩小范围**先看电源**确认设备真的上电电压和时序正确**再看引脚**确认 pinctrl、SDA、SCL 复用正确**再看控制器**确认 I2C 控制器已经注册**再看地址**区分 7-bit 与 8-bit 地址**再看波形**用示波器确认 Start、ACK 和信号完整性**最后看驱动**结合日志定位具体读写失败点。6. 小结I2C 调试不要只盯着驱动代码。一个完整的排查闭环应该同时覆盖**软件配置**DTS、pinctrl、控制器和从设备驱动**协议验证**总线编号、设备地址、时钟频率、ACK/NACK**硬件验证**电源、上拉、电平、线路和波形。当i2cdetect、日志和示波器结果能够相互印证时定位问题会快很多。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →