Question from customer:
1. Cannot access registers in maps 0x44, 0x64, 0x68 and other.
THe only accessible is 0x98.
2. Map read back from device address 0x98 shows mirrored map (after 0x80)
1. First of all - at power up ADV7611, ADV7612 and ADV7619 have IO Map visible (0x98 device address)
To enable other maps (such as repeater(ksv) map, hdmi (usually 0x68) CP and other maps) -
- you need to set correctly registers in IO Map - e.g.:
98 F4 80 ; CEC98 F5 7C ; INFOFRAME98 F8 4C ; DPLL98 F9 64 ; KSV98 FA 6C ; EDID98 FB 68 ; HDMI98 FD 44 ; CP
Once it is done = maps CEC, INFOFRAME, DPLL, KSV, EDID, HDMI and CP
with their addresses respectively 0x80, 0x7C, 0x4C, 0x64, 0x6C, 0x68, 0x44 should
become visible. If they are not - you may have problem reading and writing to registers.
FOr more details - refer to Register Access in Hardware User Guide (http://www.analog.com/static/imported-files/user_guides/UG-180.pdf)
REGISTER ACCESS AND SERIAL PORTS DESCRIPTION and following chapters.
2. It seems that access is done in incorrect way; I2C Addressing of device should be 8-bits:
-> 7-bits of address and 1 bit of R/W flag
Make sure you do not add anything extra there. Extra bit (9-bit addressing) may cause
mirror effect you experienced.
3. Reading I2C -> ADV7xxx to read - require Repeated Start (refer to I2C documentation)
4. Proper way of solving register access problems:
When I2C is not correctly implemented - you may experience various type of problems,
including lack of access to HDMI or other I2C maps. Normal procedure should consist of following:
1. Write proper I2C_write procedure and verify it with scope. I2C write is easier than I2C read.
2. Write proper I2C_read procedure.
3. Checking I2C_WRITE:
If you have I2C bus expander (such as PCA9539) - you can verify your I2C write; make writes
setting GPIO lines to output and set all to ones; verify with scope (or res+diode) that all GPIOs
are set to ones. Set all outputs to output zeros - verify all zeros with scope (or res+diode).
Now you now your I2C write works and there is no bit offset.
4. Checking I2C_READ:
Once you know that I2C_WRITE works - you can check I2C_WRITE + I2C_READ to verify
just I2C_READ. Verify that read+write works correctly:
Do these writes:
98 F4 80 ; CEC 98 F5 7C ; INFOFRAME 98 F8 4C ; DPLL 98 F9 64 ; KSV 98 FA 6C ; EDID 98 FB 68 ; HDMI 98 FD 44 ; CP
Read back registers F4...FD and make sure you are reading correct values.
If at this stage you are not reading back proper values - you most likely will have
no access to other HDMI maps as you may set them incorrectly.
Can you please explain how can I access registers up to 0xFF (0x80-0xFF) with only 7 addressing bits?
I believe this statement is correct;
I2C addressing of device (ADDR) is 7-bit + R/W bit.
Addressing of register is done using 8-bit subaddress.
Please refer to UG-180, Protocol for Main I2C port.
Thanks, I missed the point that the device addressing is 7 bits.
I'll check again our I2C bus to see what we are sending there.
Retrieving data ...