Post Go back to editing

ADAU1701 I2C read

Hi

My customer is trying to initiate an i2c read from adau1701.

Addr0==Addr1=0 => Write addr = 0x68, Read addr = 0x69.

Sequence looks like he indeed sends 0x69, however adaqu1701 doesn't send an ack (pulls SDA low on 9th clock)

Attached are read sequence & schematics.

Similar write sequence (sending 0x68)  produces the required ack.

Please advise

BR,

Alon

attachments.zip
Parents
  • Hello Alon,

    I explained this all above but I will repeat. You must write the address of where you want to read data from first.

    So what is going on is that they are sending a read command and the 1701 is saying "Read What? you never gave me an address!" and not acknowledging.

    This is documented. Here is a screenshot from the 1701 datasheet:

    Look at figure 24. This is what needs to be sent"

    Start condition,

    Chip address with R/W = 0 which is a write command

    1701 will ACK

    Send the high byte of the address

    1701 will ACK

    Send the low byte of the address

    1701 will ACK

    Repeat the start condition

    Send chip address with R/W = 1 which is a read command

    1701 will ACK

    Send clocks and 1701 will output data

    Master will send an ACK but the 1701 will ignore this ACK since there is nothing it can do about it should it not arrive.

    If you send another set of clocks then it will increment the address and send out another byte.

    Master will ACK

    this will continue until a stop condition is sent by the master.

    The next time they need to read this all has to start over.

    Dave T

Reply
  • Hello Alon,

    I explained this all above but I will repeat. You must write the address of where you want to read data from first.

    So what is going on is that they are sending a read command and the 1701 is saying "Read What? you never gave me an address!" and not acknowledging.

    This is documented. Here is a screenshot from the 1701 datasheet:

    Look at figure 24. This is what needs to be sent"

    Start condition,

    Chip address with R/W = 0 which is a write command

    1701 will ACK

    Send the high byte of the address

    1701 will ACK

    Send the low byte of the address

    1701 will ACK

    Repeat the start condition

    Send chip address with R/W = 1 which is a read command

    1701 will ACK

    Send clocks and 1701 will output data

    Master will send an ACK but the 1701 will ignore this ACK since there is nothing it can do about it should it not arrive.

    If you send another set of clocks then it will increment the address and send out another byte.

    Master will ACK

    this will continue until a stop condition is sent by the master.

    The next time they need to read this all has to start over.

    Dave T

Children
No Data

Before You Switch


Switching languages will make ADI Explorer unavailable. Resume your session by switching back to English and reopening ADI Explorer.