硬件IIC调试问题排查

目录

沁恒蓝牙系列芯片中目前只有CH582/583以及208包含有硬件IIC外设,本文均使用582进行测试,其他沁恒芯片也可以参考本文排查。

先进行“常规”检查,检查相关引脚的焊接、线材是否断线或接触不良等问题,确定是否为IIC模块的问题。

如果582作硬件IIC主机:

上电后是否进行了上电延时以给从机进行上电加载。从机上电加载可能需要一定的时间,具体看从机芯片手册或者从机模块手册的要求。

SCL、SDA总线上是否按从机要求加了2~10k的上拉电阻。是否需要上拉电阻和上拉电阻阻值的选择,具体看从机芯片手册或者从机模块手册的要求。

时序正常,应答都正常,但是数据“异常”,比如说某些寄存器能读到正常数值,某些寄存器读出来都是0。建议查阅从机手册,检查一下从机模式是否正常,有没有唤醒从机,有没有向从机配置一些必要参数等。

重映射后一直busy。最新EVT中已解决,初始化函数中添加了重置IIC模块的语句,具体见博客硬件IIC的重映射使用问题 - JayWell - 博客园 (cnblogs.com)

读操作过程中发现PE被关掉了也就是IIC取消了使能,可以尝试去掉下图中的代码。

检查PE标志位可以这样打印:PRINT("PE = %d\n",((*((uint32_t*)0x40004800))&0x0001));

 

如果582作硬件IIC从机:

使用到了从机第二地址,接收数据后没有不释放时钟线导致一致busy,可能是EVT版本比较旧而缺少第二地址接收相关宏,可以参考最新EVT中的宏定义。

 

如果使用到了硬件IIC主/从中断:

发现能够跑通,但运行不稳定,可能运行一段时间后就卡死。建议参考最新EVT例程,使用if语句判断标志位,而不要用switch case语句判断标志位。参考例程中的if语句判断只要求相应的标志置位即可,而使用switch case语句判断则要求每一位标志都严格一致。

 

如果还是没有排查出问题,可以在沁恒官网相关系列芯片的论坛反馈。

posted @ 2022-12-15 13:48  JayWell  阅读(548)  评论(0编辑  收藏  举报