I2C Transmission from the ATECC608A-TNGLoRaWAN

When the ATECC608A-TNGLoRaWAN is awake and not busy, the bus master can retrieve the current output buffer contents from the device using an I2C read. If valid command results are available, the size of the group returned is determined by the particular command which has been run. Otherwise, the size of the group (and the first byte returned) will always be four: count, status/error, and 2-byte CRC. The bus timing is shown in Figure 1.

Table 1. I2C Transmission from the ATECC608A-TNGLoRaWAN
Name I2C Name Direction Description
Device Address Device Address To slave This byte selects a particular device on the I2C interface and ATECC608A-TNGLoRaWAN will be selected if bits 1 through 7 of this byte match bits 1 through 7 of the I2C_Address byte in the Configuration zone. Bit 0 of this byte is the standard I2C R/W pin, and should be one to indicate that the bytes following the device address travel from the slave to the master (read).
Data Data1,N To master The output group, consisting of the count, status/error byte or the output packet followed by the two-byte CRC. See Section I/O Transactions.

The status, error, or command outputs can be read repeatedly by the master. Each time a Read command is sent to the ATECC608A-TNGLoRaWAN along the I2C interface, the device transmits the next sequential byte in the output buffer. See the following section for details on how the device handles the address counter.

If the ATECC608A-TNGLoRaWAN is busy, idle, or asleep, it will NACK the device address on a read sequence. If a partial command has been sent to the device and a read sequence [Start + DeviceAddress(R/W == R)] is sent to the device, then the ATECC608A-TNGLoRaWAN will NACK the device address to indicate that no data is available to be read.