Post Go back to editing

ADV7511W all registers read 0x13,why?

hi, i have a problem,when i write adv7511w by i2c with address 0x72,it seems to be normal,but when i read from adv7511w,all registers eq 0x13,i dont know why?

and,i find many users have faced this problem,so,how to fix it?

i'm sure the hpd pull high ,and my schematic as follows:



add pic
[edited by: NewBee at 8:58 AM (GMT 0) on 2 Sep 2019]
Parents
  • Hi,

    Please make sure with below things,

      For read backs are you doing the proper restart command?

      I2C driver performs the following sequence:
        Start condition - write operation (sub address) - Start condition - Read operation (data) - Stop condition
    Need to send STOP bit  when the whole process reading is done.To terminate a read/write sequence to the ADV7511W, a stop signal must be sent. For more details,Please refer section6.6(Inter-IC Communications) in ADV7511W-hardware-user-Guide

      And also crosscheck your i2c communication as per expert comments at https://ez.analog.com/video/f/q-a/114928/adv7511w-and-i2c-communication

    Thanks,

    Poornima

  • im sure my iic driver has standard sequence ,and i often  contorl max96705/96706 ,

    and my iic clk rate set 40K,does it matter?

  • Hi,

     Please crosscheck with below things for i2c characteristics,

      

    And also refer here for I2C Specific Tips at https://ez.analog.com/mems/w/documents/4500/debugging-communication-problems-with-mems-sensors-i2c-or-spi

    Thanks,

    Poornima

  • One thing to keep in mind is we use 8-bit addressing while some drivers use 7-bit addressing.  If your driver expects 7-bit addressing then you have to right the 8-bit address by one before sending it to the driver.  Just a thought.  0x74 >> 1 -> 0x39

  • thanks.

    what i use is 8-bit addressing.and write & read both can receive "ack".

    I2C_write_8bit(0x39,0x41,0x10);usleep(1000);
    I2C_write_8bit(0x39,0x98,0x03);usleep(1000);
    I2C_write_8bit(0x39,0x9A,0xE0);usleep(1000);
    I2C_write_8bit(0x39,0x9C,0x30);usleep(1000);
    I2C_write_8bit(0x39,0x9D,0x61);usleep(1000);
    I2C_write_8bit(0x39,0xA2,0xA4);usleep(1000);
    I2C_write_8bit(0x39,0xA3,0xA4);usleep(1000);
    I2C_write_8bit(0x39,0xE0,0xD0);usleep(1000);
    I2C_write_8bit(0x39,0xF9,0x00);usleep(1000);

    I2C_write_8bit(0x39,0x15,0x00);usleep(1000);
    I2C_write_8bit(0x39,0x16,0x30);usleep(1000);
    I2C_write_8bit(0x39,0x17,0x02);usleep(1000);
    I2C_write_8bit(0x39,0x56,0x1a);usleep(1000);

    I2C_write_8bit(0x39,0x18,0x40);usleep(1000);
    I2C_write_8bit(0x39,0xAF,0x06);usleep(1000);

    I2C_read_8bit(0x39,0x41,&read_buf); xil_printf("0x41=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x98,&read_buf); xil_printf("0x98=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9A,&read_buf); xil_printf("0x9A=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9C,&read_buf); xil_printf("0x9C=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9D,&read_buf); xil_printf("0x9D=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xA2,&read_buf); xil_printf("0xA2=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xA3,&read_buf); xil_printf("0xA3=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xE0,&read_buf); xil_printf("0xE0=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xF9,&read_buf); xil_printf("0xF9=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x15,&read_buf); xil_printf("0x15=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x16,&read_buf); xil_printf("0x16=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x17,&read_buf); xil_printf("0x17=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x56,&read_buf); xil_printf("0x56=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x18,&read_buf); xil_printf("0x18=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xAF,&read_buf); xil_printf("0xAF=%x\n\r",read_buf);usleep(1000);

Reply
  • thanks.

    what i use is 8-bit addressing.and write & read both can receive "ack".

    I2C_write_8bit(0x39,0x41,0x10);usleep(1000);
    I2C_write_8bit(0x39,0x98,0x03);usleep(1000);
    I2C_write_8bit(0x39,0x9A,0xE0);usleep(1000);
    I2C_write_8bit(0x39,0x9C,0x30);usleep(1000);
    I2C_write_8bit(0x39,0x9D,0x61);usleep(1000);
    I2C_write_8bit(0x39,0xA2,0xA4);usleep(1000);
    I2C_write_8bit(0x39,0xA3,0xA4);usleep(1000);
    I2C_write_8bit(0x39,0xE0,0xD0);usleep(1000);
    I2C_write_8bit(0x39,0xF9,0x00);usleep(1000);

    I2C_write_8bit(0x39,0x15,0x00);usleep(1000);
    I2C_write_8bit(0x39,0x16,0x30);usleep(1000);
    I2C_write_8bit(0x39,0x17,0x02);usleep(1000);
    I2C_write_8bit(0x39,0x56,0x1a);usleep(1000);

    I2C_write_8bit(0x39,0x18,0x40);usleep(1000);
    I2C_write_8bit(0x39,0xAF,0x06);usleep(1000);

    I2C_read_8bit(0x39,0x41,&read_buf); xil_printf("0x41=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x98,&read_buf); xil_printf("0x98=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9A,&read_buf); xil_printf("0x9A=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9C,&read_buf); xil_printf("0x9C=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x9D,&read_buf); xil_printf("0x9D=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xA2,&read_buf); xil_printf("0xA2=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xA3,&read_buf); xil_printf("0xA3=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xE0,&read_buf); xil_printf("0xE0=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xF9,&read_buf); xil_printf("0xF9=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x15,&read_buf); xil_printf("0x15=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x16,&read_buf); xil_printf("0x16=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x17,&read_buf); xil_printf("0x17=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x56,&read_buf); xil_printf("0x56=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0x18,&read_buf); xil_printf("0x18=%x\n\r",read_buf);usleep(1000);
    I2C_read_8bit(0x39,0xAF,&read_buf); xil_printf("0xAF=%x\n\r",read_buf);usleep(1000);

Children
No Data