IIC挂死问题解决过程
0.环境:arm CPU 带有IIC控制器作为slave端,带有调试串口。 1.bug表现:IIC slave 在系统启动后概率挂死,导致master无法detect到slave。 猜测1:认为IIC device程序有问题 检查1:查看程序发现有可能溢出的部分,使用IIC 工具刷过量数据到slave,未出问题。 猜测2:认为IIC device寄存器进入异常状态未能恢复 检查2:检查正常IIC寄存器和异常状态IIC寄存器,未能发现问题。 猜测3:时钟分频问题 检查3:询问同事,答固定分频。 猜测4:看波形分析 检查4:波形未量到,测量波形导致通信异常,部分设备破坏,放弃该方法。 2.发现新情况:系统启动过程中如果调试串口有数据输入,问题会概率出现。如果串口没有输入则多次测试不会出现问题。 猜测1:串口中断导致IIC初始化时被打断产生问题。 检查1:删除调试串口设备树节点,发现IIC启动100%出现问题 T-T。 猜测2: 100%复现的问题和之前的概率出现的问题相同 检查2:检查寄存器,检查设备detect 表现,认为是相同问题。 3.删除调试串口,IIC受影响的原因? 删除串口设备树节点,IIC device 必出问题。 猜测1:怀疑调试串口外部硬件电平高低导致IIC外设受影响 检查1:检查原理图,未发现影响的可能性。 猜测2:怀疑串口初始化部分处理了部分IIC设备依赖的初始化