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:
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,