Hi!
I've somehow managed to change the i2c address of my "Ntag i2c" chip from 0x55 to 0x2A.
I've tried several different writes to the chip and and verified that all ACKs from the slave are provided, but have not been able to get the chip to subsequently slave on 0x55.
Here's some byte array's I've sent to I2c Address 0x2A (Write mode) with the hopes of targeting block 0 byte 0:
uint8_t fix[17] = {0x00, 0x55,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x01,0x02,0x03,0x04};
uint8_t fix[17] = {0x00, 0x55,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
uint8_t fix[2] = {0x00, 0x55}
And just in case we get right shifted:
uint8_t fix[17] = {0x00, 0xAA,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x01,0x02,0x03,0x04};
uint8_t fix[17] = {0x00, 0xAA,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
uint8_t fix[2] = {0x00, 0xAA}
Of course, I've also tried just for fun to reset to a totally different address
uint8_t fix[17] = {0x00, 0x0F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x01,0x02,0x03,0x04};
uint8_t fix[17] = {0x00, 0x0F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
uint8_t fix[2] = {0x00, 0x0F}
But none of the above seem to work.
Nothing else is on the i2c bus.
I've confirmed all static lock bytes and dynamic lock bytes are 0
Can you think of anything else I should consider?
Thanks!
I had the same problem.
Briefly about the origin:
If the first block(0x00) is set with the first byte as 0x55, then the I2C address becomes 0x2A (0x55 bitshift 1 to the right).
When searching for I2C devices on the bus, the NTAG does not respond with an ACK if only a read is sent without sending a prior write pointer!
So, if you search for the NTAG on the bus, you need to loop through all I2C addresses and trying to write on it. This is the only way the NTAG confirms with an ACK.
If you want to reset the NTAG to 0x55, you have to write 0xAA on Byte 0 of Block 0.
The entire block must be written! Otherwise it will not work.
Same situation here. I accidentally changed the I2C address to 0x00. I can access the tag, and send the write 0x00 to 0x55. The devices answers with ACK... but then the address is still 0x00.
By any chance, is the i2c address only settable once?
Hi Jeff Chan,
The I2C address can be changed many times, not just once. I cannot say from your log if you do so, but you have to wait for approx 4 ms after sending the WRITE command for the EEPROM programming cycle to complete, before trying to reach the NTAG I2C with the new slave address.
Regards!
Jorge Gonzalez