cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
pjurgielewicz
Visitor
Visitor
1,549 Views
Registered: ‎07-25-2017

ADV7511 & I2C on KCU116

Jump to solution

Hello everyone,

I am trying to create a design making use of HDMI output on kcu116 evaluation board. The problem is that this board has different type of connection to the I2C bus. Previously I was using vc707 where ADV7511 was connected via 1-to-8 switch (0x74) channel 5, 0x39 and I successfully managed to run it.

 

Here however ADV7511 is not existing directly on the I2C bus architecture scheme (ug1239 p.55) but there are entries in the Master Contraints File Listing:

 

#HDMI IIC
set_property PACKAGE_PIN AE15 [get_ports "IIC_SDA_HDMI"] ;
set_property IOSTANDARD LVCMOS33 [get_ports "IIC_SDA_HDMI"] ;
set_property PACKAGE_PIN AD15 [get_ports "IIC_SCL_HDMI"] ;
set_property IOSTANDARD LVCMOS33 [get_ports "IIC_SCL_HDMI"] ;

 

So, in my design I added constraints:

 

set_property PACKAGE_PIN AE15 [get_ports "iic_rtl_sda_io"]
set_property IOSTANDARD LVCMOS33 [get_ports "iic_rtl_sda_io"]
set_property PACKAGE_PIN AD15 [get_ports "iic_rtl_scl_io"]
set_property IOSTANDARD LVCMOS33 [get_ports "iic_rtl_scl_io"]

 

where iic_rtl is the output from AXI_IIC (IIC) and AXI_IIC is conntected to Microblaze via interconnect.

 

Now I am trying to setup ADV7511 with this directly connected I2C bus and here my question arises:

 

How should I modify my old code (working with vc707) to make it communicate properly on kcu116?

 

My code is provided in attachments.

 

Many thanks for your advice and help.

0 Kudos
1 Solution

Accepted Solutions
pjurgielewicz
Visitor
Visitor
1,825 Views
Registered: ‎07-25-2017

Hi @florentw,

 

I made the simplified version of my design: just MIG + MB + AXI IIC and copy-pasted the code I provided in the very first post (with the same constraints). Then I removed IIC switch choice in SDK code and... it seems to be working. I am able to write and read proper values. However exactly the same code is not working in the previous design - this is a kind of another story (I can recreate it based on this working piece).

 

Just one thing to clarify here (may be benefitial for the others):

 

By default AXI IIC uses 7-bit address mode so the address 0x39 (from UG) is in fact 0x72 from ADV7511 product page (0x39 << 1 = 0x72).

View solution in original post

4 Replies
florentw
Moderator
Moderator
1,507 Views
Registered: ‎11-09-2015

Hi @pjurgielewicz,

 

Note I haven't read your code but base on the difference between the boards:

You might need to remove the code to control the switch and then use the direct I2C address for the ADV7511 which should be 0x72

 

Regards,


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
pjurgielewicz
Visitor
Visitor
1,500 Views
Registered: ‎07-25-2017

Hi @florentw

thanks for your reply.

 

As you suggested I removed the code responsible for switch setup and hard-coded 0x72 as the address of ADV7511:

 

EepromIicAddr = 0x72;

 

but it is not working either.  EepromWriteByte() returns the number of bytes written to the device and in case of ADV7511 it should always be 1 byte. Whereas in the case the address is wrong it returns 255 - and this is what I receive. After EepromWriteByte() I am waiting 50000 cycles in a loop and then I try to read written value back. However I2C is not able to find anything at 0x72 and gets stuck in the while loop:

 

do {
		StatusReg = XIic_ReadReg(IIC_BASE_ADDRESS, XIIC_SR_REG_OFFSET);
		if (!(StatusReg & XIIC_SR_BUS_BUSY_MASK)) {
			SentByteCount = XIic_DynSend(IIC_BASE_ADDRESS,
                                    EepromIicAddr,
                                    (u8 *) &Address,
                                    sizeof(Address),
                                    XIIC_REPEATED_START);
		}

	} while (SentByteCount != sizeof(Address));

I am wondering how did you find 0x72 as the address of ADV7511 in this setup?

 

0 Kudos
florentw
Moderator
Moderator
1,495 Views
Registered: ‎11-09-2015

Hi @pjurgielewicz,

 

I have found the address 0x72 in the ADV7511 SW programming guide:

ADV.PNG

 

However, I might be wrong because from some UG for Xilinx board, the address after the swith is 0x39 (example with KCU105):

KCU105.PNG

 

 


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
pjurgielewicz
Visitor
Visitor
1,826 Views
Registered: ‎07-25-2017

Hi @florentw,

 

I made the simplified version of my design: just MIG + MB + AXI IIC and copy-pasted the code I provided in the very first post (with the same constraints). Then I removed IIC switch choice in SDK code and... it seems to be working. I am able to write and read proper values. However exactly the same code is not working in the previous design - this is a kind of another story (I can recreate it based on this working piece).

 

Just one thing to clarify here (may be benefitial for the others):

 

By default AXI IIC uses 7-bit address mode so the address 0x39 (from UG) is in fact 0x72 from ADV7511 product page (0x39 << 1 = 0x72).

View solution in original post