硬件TWI操作流程示意图:
硬件TWI出错案例:
硬件TWI通信错误(从机)
原因:外界存在干扰。
当从机TWI状态机为B8时,从机继续向主机发送数据,且准备NACK信号,此时若外接干扰造成从机识别主机回传的信号非正常信号,则从机状态机会跳到非正常状态机中,此时程序中未对应答信号做处理,造成当此轮通讯结束后,在开始下一轮通讯时,从机无ACK信号造成无法响应主机通讯。
TWI默认开启SCK高电平超时功能,待发送完最后一个字节,此时AA清零;此时若存在因主机通讯或干扰造成SCK高电平超时时,TWI模块会自动释放总线,此时AA仍然保持为之前的NACK状态,造成在下一轮通讯时无法响应主机通讯,通讯异常;
改善方案:
在传输完成最后一个字节数据后AA置位,这样即使发生异常情况,待下一组时序到来时,从机仍能够正常响应主机;在程序其他异常状态下置位AA,即使通信受到干扰,跳转到异常状态,仍能进行下一次的通讯响应。下图列出TWI中断代码改善前后的代码。
图1改善前
图2改善后 |