I have been trying to communicate via I2C with the ATECC608B-SSHDA-T chip, which can be found along with its data sheet here. Everything seems to be working for the most part, but I have been unable to successfully use the one time changeable I2C address that the data sheet specifies. Just for context, I have been using the cryptoauthlib GitHub library in order to communicate with it with an STM32 microcontroller dev board. I have been able to use the UpdateExtra command to change the specified address to 0x58 in the config zone. My config zone now has the following output:
Config Zone: 01 23 25 A5 00 00 60 03 47 CA AF 9B EE 61 4D 00 C0 00 00 00 83 20 87 20 8F 20 C4 8F 8F 8F 8F 8F 9F 8F AF 8F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AF 8F FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 55 00 FF FF 00 00 00 00 00 00 33 00 33 00 33 00 1C 00 1C 00 1C 00 1C 00 1C 00 3C 00 3C 00 3C 00 3C 00 3C 00 3C 00 3C 00 1C 00 I have also been using atcab_release() in conjunction with this after the config zone was changed to ensure I put the device to sleep so the changed address would go into effect. I have attempted this with both locking the config zone afterwards and with the config zone unlocked. however, the data zone has remained unlocked. as you can see, the Config[85] = B0, which is (0x58 << 1) for proper I2C communication with the cryptoauthlib library. Additionally, before I changed the address, the config[85] = 00, meaning that it had not been changed yet.
However, in every attempt of mine to wake up the device, scan the I2C bus, or employ the atcab_init(&cfg_ateccx08a_i2c_default) function, I only get proper responses from the old default I2C address of 0x60. I have been following this rough outline for how to do this process, but it still does not seem to be working.
// Step 1: Initialize at default address cfg_ateccx08a_i2c_default.atcai2c.address = 0xC0; atcab_init(&cfg_ateccx08a_i2c_default); atcab_wakeup(); // Step 2: Change address uint8_t new_addr = 0xB0; // New 8-bit I2C address (e.g., for 7-bit 0x58) atcab_updateextra(0x01, new_addr); // Step 3: Put the device to sleep so it reloads the address atcab_release(); // ✅ This sends the SLEEP command internally // Step 4: Delay to let device settle HAL_Delay(100); // Step 5: Init again with new address cfg_ateccx08a_i2c_default.atcai2c.address = new_addr; atcab_init(&cfg_ateccx08a_i2c_default); atcab_wakeup(); // Now should talk to new address My overall goal is to communicate with multiple of these ATECC608B-SSHDA-T chips on the same I2C bus, so I need to be able to change their I2C addresses for functional communication.