AnsweredAssumed Answered

ADAU1772 I2C Writes Acknowledged but Not Working

Question asked by dramsay9 on Mar 1, 2018
Latest reply on Mar 9, 2018 by DaveThib

When I read over I2C on the ADAU1772, it writes the correct default values back.  Here's an example of reading the control register for OP_STAGE_1, which defaults to 0x0F:

Reading works!

 

Unfortunately when I try to write and then read a register, the register value is unchanged.  Here is a consecutive write and read to 0x002F, the DAC_0_VOL Register that defaults to 0x00 (0dB) and should first be set to 0xFF (-92dB) before writing other things to the ADAU1772:

 

Write 0xFF to 0x002F (seems to work, getting ACKs which weren't there when the AD chip was off):

...then Read 0x002F (still the default value of 0x00, write didn't succeed on the 0xFF anything):

 

I've been pouring over this and I have no idea what is going on.  I wait a couple seconds before writing/reading anything after the chip is on.  I tried separating the read/writes with a delay and an intermediate read/write to another register.  I've looked quite a bit at the I2C charts in the datasheet and I'm pretty sure the above is textbook correct I2C.

 

It is running at an unusually slow clock rate (~2kHz-ish), but I don't think this should matter.  There is some indication in Fig 85. of the datasheet that single writes shouldn't necessarily have an ACK before the stop condition:

 

but that is contradicted by the timing diagram on the previous page, which clearly shows an ACK before the stop:

 

Does anyone have any idea what could be wrong here?  Did I miss something obvious?

 

Thank you for the help,

 

David

Outcomes