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);

  • ok,thanks.but it can not solve the problem.

Reply Children
  • Hi,

    Are you using FPGA on your custom board ? If so please try FPGA reference design forum:https://ez.analog.com/fpga/.Please crosscheck with reference schematics of ADV7511W
    And also reading back is a 2 step process. First you write the index register address you want to read back from and then send another Start bit, slave read address and then read back the data.  The second Start is sometimes referred to as a repeat start.

    Thanks,

    Poornima

  • HI,

    YES,i am using fpga on our custom board,and it is zynqMP.

    Today,i move the operation from xilinx SDK to linux,when i use i2c-tools,it work but also has a problem.

    i can read and write some registers.like :i read reg-0x15=0x00,and write 0x10,then read again but it back 0x00 from reg-0x15.

    whether the PD pin high or low,the i2c address is always  0x39,which mean 0x72.

    whether the PD pin high or low,i read 0x41 & 0x42 register, reg-0x41=0x50,reg-0x42=0xf0,and i can not config reg-0x41 to 0x10,it read back reg-0x41=0x50.

    note: i measure the hpd=high,i measure the PD when i change the power.

    so ,what can be the reason ?

    so ,i have to use your lib & driver to config registers? 

  • hi,i success config reg-0x41 by set reg-0xd6=0xc0,but my hpd already pull high .

    that's strange.why?

    my board TXC0-/TXC0+ TX0-/TX0+ TX1-/TX1+ TX2-/TX2+ have been pull up to 3.3V, right?

  • Hi,

    As per hardware user guide, A pull-up resistor of 2kΩ (+/-10%) to 1.8V or 3.3V is recommended for each of these SDA/SCL signals. See figure25(Example Schematics) in ADV7511w hardware user guide.

    And also for more details,Please refer here https://ez.analog.com/video/f/q-a/9378/hdmi-tx-adv7511w/7044#7044

    Please let me know, why register 0x41 is configured as 0x50 for power down the whole chip.
    To power up the part,the the Power Down register bit (0x41[6]) must be written to 0 when the HPD pin is high.

    Thanks,

    Poornima

  • thanks.

    Q:why register 0x41 is configured as 0x50 for power down the whole chip.

    A:0x50 is the default value which reg-0x41 reads back, i want to set it to 0x10 , and i must set reg-0xd6 to 0xc0 or 0x40 first, then set reg-0x41 to 0x10 can be success.if not ,reg-0x41 will read back 0x50.

    so ,why set 0xd6 first under my hpd high?if not ,i cannot pull up the chip by set reg-0x41 to 0x10.

  • Hi,

     To power up the part,the the Power Down register bit (0x41[6]) must be written to 0 when the HPD pin is high. When HPD goes from high to low, some registers will be reset to their defaults.

     For more details,Please refer 4.2.1 register configuration section in ADV7511W programming guide.

    Thanks,

    Poornima