7.2.2 I2C Synchronization
It is possible for the system to lose synchronization with the I/O port on the ATECC608A-TNGLoRaWAN, perhaps due to a system Reset, I/O noise, or other conditions. Under this circumstance, the ATECC608A-TNGLoRaWAN may not respond as expected, may be asleep, or may be transmitting data during an interval when the system is expecting to send data. To resynchronize, the following procedure can be followed:
-
To ensure an I/O channel Reset, the system must send the standard
I2C software Reset sequence, as follows:
- A Start bit condition
- Nine cycles of SCL, with SDA held high by the system pull-up resistor
- Another Start bit condition
- A Stop bit condition
It should then be possible to send a read sequence, and if synchronization completes properly, the ATECC608A-TNGLoRaWAN will ACK the device address. The device may return data or may leave the bus floating (which the system will interpret as a data value of 0xFF) during the data periods.
If the device does ACK the device address, the system should reset the internal address counter to force the ATECC608A-TNGLoRaWAN to ignore any partial input command that may have been sent. This can be accomplished by sending a write sequence to word address 0x00 (Reset), followed by a Stop condition.
- If the device does not respond to the device address with an ACK, then it may be asleep. In this case, the system must send a complete Wake token and wait tWHI after the rising edge. The system may then send another read sequence, and if synchronization is complete, the device will ACK the device address.
- If the device still does not respond to the device address with an ACK, then it may be busy executing a command. The system must wait the longest tEXEC (max) and then send the read sequence, which will be acknowledged by the device.