只考虑单主模式,可判断的状态字有
/* Master */ #define TW_MS_START 0x08 #define TW_MS_REP_START 0x10 /* Master Transmitter */ #define TW_MT_SLA_ACK 0x18 #define TW_MT_SLA_NACK 0x20 #define TW_MT_DATA_ACK 0x28 #define TW_MT_DATA_NACK 0x30 #define TW_MT_ARB_LOST 0x38 /* Master Receiver */ #define TW_MR_ARB_LOST 0x38 #define TW_MR_SLA_ACK 0x40 #define TW_MR_SLA_NACK 0x48 #define TW_MR_DATA_ACK 0x50 #define TW_MR_DATA_NACK 0x58
其中,容易判断通讯失败的状态是主发送(含地址和数据),失败可以重来。可根据从机的应答和主机发送的长度来判断。
难判断的是主接收,如果未接收完预定字节,主机由于某原因发送了非应答,就结束总线了。或者从机应答地址后,就死掉了,导致主机接收的都是0xff或其它错误的数据,这时主机无法知道...... |