本帖最后由 Fordhs168 于 2023-9-18 15:12 编辑
#申请原创# #技术资源#@21小跑堂
【问题描述】
SOC做主机,APM32F003硬件I2C从机时,出现两个小问题;1、正常通讯时003偶尔会没有ACK应答(003回应NAK)2、接收SOC信号时,SDA电平直接被拉低挂死;
【分析问题】
- 硬件I2C软件端是不太好排查,因为很多错误发生都会产生总线BUSY错误,排查I2C问题,一般都要从I2C时序波形入手,使用示波器或者逻辑分析仪抓取I2C波形;
- 使用示波器抓取I2C的SDA和SCL波形,如下图:这是一个SDA被下拉刚挂死之后的前一个时钟信号波形;
- 可以观察到示波器抓取失效部分的波形分析,发现SCL和SDA同一时间点下拉,SDA下落时间比SCL要快(问题所在);这里涉及到一个数据保持时间Thd的概念--Thd是指:在时钟SCL下降沿来之后,SDA数据保持不变的时间,SCL被判断为低电平前SDA不能被下拉。
- 再查看了003 NAK应答部分,SDA和SCL的波形也是类似,接收数据时SDA下落时[size=12.0111pt]间比SCL的要快。
【解决方案】 - [size=12.0111pt]SOC主机端在写完一个数据&读完一个数据之后,手动加一个Delay作为数据保持时间,根据芯片手册,数据保持时间设计为300ns左右较为合理。
- 插入300ns数据保持时间挂测没问题;
【其他】
处理过程中有怀疑过其他问题:
- 比如电源不稳,电容耦合或者干扰等,导致SCL信号变化影响了SDA信号(此前在其他项目上遇到过--SCL下拉或者上拉直接影响SDA电平跳变),后面是关闭所有外设只保留I2C测试并且换了个板子也是会有问题;
- 可能存在信号延迟不匹配的情况,导致SDA信号的下降时间比SCL更快。这可能与布线长度、线路阻抗等有关。
- 硬件I2C问题是会比软件I2C问题要多要复杂,很多工程师都选择了软件I2C,但是硬件I2C一旦调通,真的爽的飞起,速度嘎嘎快。
|