29.3.2.2.4 Transmitting Data Packets
Assuming the M1 case above, the TWI host can start transmitting data by writing to the Host
Data (TWIn.MDATA) register, which also clears the Write Interrupt Flag (WIF). The host
continuously monitors the bus for collisions and errors during the data transfer. After
completing the data packet transfer, the WIF flag will be set to ‘1
’.
If the transmission is successful and the host receives an ACK bit from the client, the
Received Acknowledge (RXACK) flag will be set to ‘0
’, meaning that the
client is ready to receive new data packets.
- Transmit a new data packet
- Transmit a new address packet
- Complete the transaction by issuing a Stop condition in the Command (MCMD) bit field from the Host Control B (TWIn.MCTRLB) register
If the transmission is successful and the host receives a NACK bit from the client, the
RXACK flag will be set to ‘1
’, meaning that the client cannot or does not
need to receive more data.
- Transmit a new address packet
- Complete the transaction by issuing a Stop condition in the Command (MCMD) bit field from the Host Control B (TWIn.MCTRLB) register
The RXACK status is valid only if the WIF flag is set to ‘1
’ and the
Arbitration Lost (ARBLOST) and Bus Error (BUSERR) flags are set to ‘0
’.
The transmission can be unsuccessful if a collision is detected. Then, the host will lose
the arbitration, the Arbitration Lost (ARBLOST) flag will be set to ‘1
’,
and the bus state changes to Busy. An arbitration lost during the data packet transfer is
treated the same way as the above M4 case.
The WIF, ARBLOST, BUSERR and RXACK flags are all located in the Host Status (TWIn.MSTATUS) register.