0
\$\begingroup\$

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.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking. \$\endgroup\$ Commented Apr 23 at 17:41

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.