1.错误现象:客户应用场景固件唤醒到休眠周期很短,只有2ms左右,这个时候窗口时间太短,导致IIC读写错误
原因:因为客户唤醒后加延时来进行IIC读写的准备可以解决这个问题,那么如果加延迟可以解, 一般情况是 Master 发送地址帧以后没有在自己规定的时间内等到4014的及时 ACK ,就判定通讯失败了。 加延迟可以解的话, exi2c使能时钟延展,主机端确认支持时钟延展识别功能的话,应该也可以解这个问题。
解决方法:
看一下 EZI2C 的这两个设置,下面那个如果勾选了,会使能 PSOC I2C 模块的硬件地址解码器,接受到正确地址后会产生中断,唤醒芯片。 至于时钟延展功能,如果对端 Master 是硬件 I2C 的话,也建议使能上,因为芯片睡眠唤醒的过程中是无法处理数据的,此时可以拉低 SCL 防止 Master 提前做其他操作。 现在的硬件 I2C Master 基本都支持时钟延展识别的。
CY8C4014 从深睡眠唤醒需要的时间是 35uS, 如果芯片在深睡眠下被唤醒,且时钟延展使能的情况下, 4014 从芯片唤醒到给出 ACK,将 SCL 强制拉低的时间最长可以达到 60 多 uS(排除芯片唤醒过程中有其他更高优先级中断产生以及该更高优先级中断的嵌套时间)。
如果不想使用时钟延展功能的话,建议是主控发送读写指令后,等待 4014 返回 ACK 的等待时间可以设置到 70uS~100uS 试试看。 如果在此期间高频率的 ping I2C SLAVE 可能反而会延长反应时间。
也只有芯片在深睡眠时,被 I2C 唤醒的情况下 ACK 的延迟比较大,正常工作时几乎是没有什么延迟的。
|