This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PCM1862 I2C will only read starting from register 0

Other Parts Discussed in Thread: PCM1862, PCM5142, PCM1863

Hi,

I'm using the PCM1862 with I2C and writing to individual registers goes well.

But when I read, I can only read from register 0 or continues registers from register 0.

Reading from the TAS5768 is fine.

Can you help me with any ideas about what could be wrong?

Bedst regards.

Jesper

  • Hi Jesper,

    The PCM186X requires that you set the MSB to 1 for the register address for write register address

    The process for a multi-byte read for the PCM186X should be the following:

    I2C start : Slave Address W : ACK : MSB + Register Address : ACK : Repeated Start : Slave Address R : Slave Response :  Host ACK : (continue clocks) Slave response : // : Stop

    In an actual example, the following is reading 3 registers  starting at register 0x04.

    C1 is SCL and C2 is SDA. Z1 is a zoom of C2, showing the data response. As long as the clock is toggles and no stop signal is given, the PCM186X will respond with the next register's data.

    Justin

  • Thank you very much Justin, it was very usefull information..
    It turned out at it was becouse I send a stop condition after sending the Register Addresse.
    So now it works.
    Best regards
    Jesper
  • Update: Issue was 'repeated start condition', see http://e2e.ti.com/support/data_converters/audio_converters/f/64/p/566447/2078591#2078591, Thanks to Brian

    Hi Justin, hi all,


    seems I have a similar issue here. One pcm1863 and one pcm5142 connected to a Raspberry Pi. Writing to both works, reading works only for the 5142.

    Tried with MSB=0 and 1 and also reduced i2c clock to about 10kHz. Please see attached images: 1st read from 5142, 2nd read from 1863 with MSB=0 and 3rd read from 1863 with MSB=1.

    Using i2c-tools i2cdump -y 1 0x4a reads 0x00 for all registers (when selected page is 0) or 0x01 for all (when selected page is 1) and so on... Where i2cdump -y 1 0x4c reads correct register values twice (repeats at adress 0x80).

    I'd be very happy if someone could give me a hint what I'm doing wrong here.

    Best regards,

    Sebastian

    Images

    1) pcm5142 adress 0x4c, register 0x56, Value 0x20   ok

    2) pcm1863 adress 0x4a, register 0x20 (0x20 and msb 0), actual value 0x10 but value read is 0x00   nok

    3) pcm1863 adress 0x4a, register 0xa0 (0x20 and msb 1), actual value 0x10 but value read is 0x00   nok