Jump to content
  • 0

How to launch Digilent hdmi FMC with zc702 board


Blake

Question

Hi all,

I want to verify Digilent HDMI FMC on zc702 board, but the Zynq base TRD 15.04 was used Avnet HDMI FMC with IP - "avnet_hdmi_in" in the path "rdf0286-zc702-zvik-base-trd-2015-4\hardware\vivado\srcs\ip".

If I use the original SD image to boot up zc702 board with Digilent FMC on FMC2 slot.
The board could detect i2c@1 (FMC), but crashed by i2c fatal error.
If I modify the constraint file only - pin_zc702.xdc to match Digilent FMC I/O setting, then repacked the BOOT.BIN with modified bitstream.
The board could boot up successfully, but couldn't seem detect i2c@1 (FMC).

Could I replace the corresponding IP to launch the Digilent FMC only?
If yes, where could I get the right IP?

If not, could someone tell me what I missed? Thanks.

BR
Blake

Link to comment
Share on other sites

Recommended Posts

Hello @Blake,

1.  Yes, you are right. I did not know that your message remain the same, regardless if there was a connection or not.

2.  Please send me your entire project, as it is. I will go trough it and I will do all the debugging.

"If I just want to transfer the hdmi input signal from fmc to hdmi output of Zedboard, is there any sample project for reference?"

We are working on it. I will update you with the project as soon as we finish it. Again, sorry for the long process into solving your issue. 

 

Best Regards,

Bogdan Vanca 
 

 

Link to comment
Share on other sites

Hi Bogdan Vanca,

1. My project as the following link : (upload file limit is 1.9 mb only)
https://www.dropbox.com/s/j9no96qzs4ef7ib/zed_fmc.7z?dl=0
I just add debug message only.

2. The test result from UART as below :
----------------------------------------------------------
FMC-HDMI Board Manufacturing Test
----------------------------------------------------------
HDMI2-IN to ZED Out: PASS

I can also see colored output from monitor (Zed VGA out -> display VGA in).
Zed hdmi out -> hdmi-FMC in2

Thanks.

BR
Blake

Link to comment
Share on other sites

Hi @Blake,

I'm working on it. Unfortunately the project made by Adam is not working at all, so I have to re-do everything from scratch. Right know I have to figure out on how to properly configure the ADV7511 chip. I don't have problems on the I2C lines  but I think that I'm not using the right values for the internal registers. I'm trying different configurations, and after I will reach to something functional,  I will do a simple streaming of data between the adapter input and hdmi zed output. 

Best Regards,

Bogdan Vanca  

Link to comment
Share on other sites

Hi  @Blake,

 

Short update. I've recreated Adam project with a different setup and it works. I'm able to read different resolutions trough the first input of the FMC-HDMI adapter. I'm using a zybo to generate those resolutions, which further on are read by the VTC ip core. Check the images bellow:

The first image is the serial terminal from which I communicate with Zybo, and the second image shows the output values within the VTC ip core. 

zybo.thumb.png.0ad109270e135eb5fdd9628f62e4e019.pngzed.thumb.png.9c4efb7e1f2b01ede1069cb9f7dc5b72.png

 

I couldn't be able the replicate this using a laptop as an hdmi source, and that is because I think there are problems with the edid file used by Adam in his project. For now,  you can use his project as reference, and for future I will try to get rid off Zybo and add everything into Zed. Also if you check this link: https://forums.xilinx.com/t5/Xcell-Daily-Blog-Archived/Adam-Taylor-s-MicroZed-Chronicles-Part-216-Capturing-the-HDMI/ba-p/794874 you will found out that : "Initially in its free-running mode, the ADV7611 outputs video in 480x640 pixel format. Checking the VTC registers, it is also possible to observe that the detector has locked with the incoming sync signals and has detected the mode correctly, as shown in the image below: " So the message that you initially received is actually correct. I will keep you in touch with everything that I'm adding to this project. 

Best Regards,

Bogdan Vanca 

Link to comment
Share on other sites

Hi @Blake

Sorry for my late reply. Please check the fallowing link: https://www.dropbox.com/s/87cm0faa66sdra9/fmc_hdmi_in_1.zip?dl=0 This is the first variant of the project. I will try to make new updates into the close future. The project reads on HDMI1 IN input the resolution given by HDMI OUT, so you have to make a loop-back between those two. For patterns I used the test pattern generator from Xilinx, which needs a license, although the license is free. So, you either request one from Xilinx, or you can try to copy the one that I have. Check the attached document. You have to copy the file on this location C:\Users\<your username>\AppData\Roaming\XilinxLicense. I will keep you in touch every time I add something new. If you have any questions please fell free to ask.

Best Regards,

Bogdan Vanca  

tpg.zip

Link to comment
Share on other sites

Hello @Blake,

I have done some digging into Adam project and I reached to some conclusions. I will start from your serial terminal message:


"control 9 status F00 Error 7F00000 Int Status 0 H and V Size 1E00280 Detector Timing Status 7 Video Mode = 5"

On a first glimpse, if you look into the .xdc file of the project, you will found out that this project doesn't output anything on Zed HDMI Output. It only uses a couple of the FMC-HDMI inputs, so is normal for you to don't see anything on your monitor. The message that you see on the serial terminal, outputs the content of some state registers within Video Timing Controller ip (please check this document:https://www.xilinx.com/support/documentation/ip_documentation/v_tc/v6_1/pg016_v_tc.pdf). Those registers are useful for testing your software application and the adapter. Your message tells me that your project actually works, and let me tell you why:

The fallowing number : "1E00280"  is the horizontal and vertical frame size,  without blanking of your HDMI source, where 1E0 is equal with 480, and 0280 is equal with 640, both in decimal. Also the value "5" of the Video Mode, is the returned by this function "u16 XVtc_GetDetectorVideoMode(XVtc *InstancePtr)". This function gets the video mode currently reported by the detector in the VTC core. The number 5 points to Video mode VGA. You can check that into the xvtc.h header file. You can check the rest of the registers by accessing the link. 

Regarding to your debug message, you don't have to add it, because this function XIicPs_MasterSendPolled(&Iic, SendBuffer,2, IIC_SLAVE_ADDR) from Adam code, check line 132, checks for completion of transfer. So, I think that your problem may come from the way you wrote your verification algorithm. You can check for example if you used the correct base address for the iic driver instance. For that you can look into the function above, and check if your base-address match to the one that this function uses. 

Unfortunately I don't know why the lk project doesn't work. I don't have the board, so I cannot test it. 

I will try to clean Adam hardware project from errors, and after that you may adapt it for ZCU102. For now,  I think that this would be a good starting point.

Best Regards,

Bogdan Vanca  

 

 

 

Link to comment
Share on other sites

Hi @Blake,

I was struggling with the same problem.
In Adam's project is mistake which result is an FMC-HDMI module is not recognizable by other devices.
The reason for that is not sending EDID at all.
The cause of this situation is wrong initialized EDID map.
In Adams example EDID is initialized by:

Quote

i=0;    
while(1){

        SendBuffer = adv7611_edid_content[ i ];
        XIicPs_MasterSendPolled(IicPs, &SendBuffer,1, 0x36);
        while (XIicPs_BusIsBusy(IicPs)) {
            /* NOP */
        }
        if (i==255){
            break;
        }
        i++;
    }

but the correct way is:

Quote

    i=0;
    while(1){
        iic_write2(IicPs, 0x36, i, adv7611_edid_content[ i ]);
        while (XIicPs_BusIsBusy(IicPs)) {
            /* NOP */
        }
        if (i==255){
            break;
        }
        i++;
    }

the body of iic_write2 is from LK example:

Quote

static int iic_write2( XIicPs *IicPs, u8 Address, u8 Register, u8 Data )
{
    u8 WriteBuffer[2];
    int Status;

    /*
     * A temporary write buffer must be used which contains both the address
     * and the data to be written, put the address in first
     */
    WriteBuffer[0] = Register;
    WriteBuffer[1] = Data;

    /*
     * Wait until bus is idle to start another transfer.
     */
    while (XIicPs_BusIsBusy(IicPs)) {
        /* NOP */
    }

    /*
     * Send the buffer using the IIC and check for errors.
     */
    Status = XIicPs_MasterSendPolled(IicPs, WriteBuffer, 2, Address);
    if (Status != XST_SUCCESS) {
        print("XIicPs_MasterSendPolled error!\n\r");
        return XST_FAILURE;
    }
}

By the way, in LucasKandle example initialization is done in same way as in Adam's example so is the reason why it not worked in your case.
 

I hope it will helps.
If you want I will post my working code for a ZedBoard with FMC-HDMI when I clean it because at the moment is kind of messy.

Link to comment
Share on other sites

Hi Jon,

Thanks for your reply.

1.,
I tried the LK tutorial on zc702 + digilent hdmi-fmc also, but I meet an error message from following code flow without any modification :
Status = fmc_digilent_hdmii_init(&zc702_IicPs_1); 
=> 2. iic_writex2( IicPs, iic_hdmi_in_reset, IIC_HDMI_IN_RESET_LEN );
=> 3. iic_write2(IicPs, Config.Addr, Config.Reg, Config.Init);
=> 4. Status = XIicPs_MasterSendPolled(IicPs, WriteBuffer, 2, Address);
=> 5. while ((IntrStatusReg & XIICPS_IXR_COMP_MASK) != XIICPS_IXR_COMP_MASK){
            if ((IntrStatusReg & Intrs) != 0U) {
                 return (s32)XST_FAILURE;
            }
2.
I got a zed board too, although the sample was based on vivado 17.1; but I still used current version 17.4 to open the project to save time. (any side effect?)
It shows the project out of date, I can synthesis the project successfully; but I got an error when I executed implement flow.
The error message as below :
(Error) [Project 1-682] Sub-design 'design_1.bd' is not generated for Synthesis target. Please open this sub-design and generate with synth_checkpoint_mode as 'Singular' in original project before adding it to current project.

(critical warning) [Vivado 12-1464] The source file 'D:/zed_fmc/Zed_FMC_HDMI.xpr/Zed_FMC_HDMI/Zed_FMC_HDMI.srcs/sources_1/bd/design_1/design_1.bd' cannot be added to the fileset 'sources_1'.

After I   installed the corresponding version 17.1, there were no more error message.
Btw, how to verify zedboard + hdmi-fmc?
My test environment as below :
Input source : Notebook display port -> hdmi-fmc hdmi1
output : zedboard hdmi port -> monitor

There are no signal on monitor, the uart log as below :
control 9 status F00 Error 7F00000 Int Status 0 H and V Size 1E00280 Detector Timing Status 7 Video Mode = 5
Thanks.

# new update 2018/10/15
I added the debug message and found following error message :

    /*
     * Check for completion of transfer.
     */
    while ((IntrStatusReg & XIICPS_IXR_COMP_MASK) != XIICPS_IXR_COMP_MASK){

        IntrStatusReg = XIicPs_ReadReg(BaseAddr, XIICPS_ISR_OFFSET);
        /*
         * If there is an error, tell the caller.
         */
        if ((IntrStatusReg & Intrs) != 0U) {
            printf("~~~ XST_FAILURE"); <---------------- It will return FAILURE.
            return (s32)XST_FAILURE;
        }
    }

It will return FAILURE when it tried to write (0xff, 0x80)
static u8 iic_IO_hdmi_config[][2] = {
    { 0xff, 0x80 }, // i2c reset
    ...
This symptom seems like the issue that I meet on LK tutorial.


BR
Blake

Link to comment
Share on other sites

Hello @Blake,

If you take a look into the errata section of the device reference manual, https://reference.digilentinc.com/fmc_hdmi/refmanual you will find out that, the  FMC EEPROM contents do not conform to the VITA 57.1 FPGA Mezzanine Card (FMC) Standard. We have an workaround for this issue. Please check this link:  https://github.com/Digilent/FMC-HDMI-frufix. Please try to reprogram the eeprom, and after that check again the solutions given by @jpeyron. Thank you.

Best Regards,

Bogdan Vanca

 

Link to comment
Share on other sites

Hi Bogdan Vanca,

I already tried the frufix, the log as below:
----------------------------------------------------------
FMC-HDMI IPMI FRU programmer
This app checks the FRU data in the EEPROM on the FMC-HDMI and upgrades it, if necessary.
----------------------------------------------------------
FRU ID in EEPROM 0x02
FRU_ID in programmer 0x02
No upgrade needed. Force upgrade? [y/n]
Starting the FMC EEprom program...
Generating IPMI...
Writing IPMI data to EEprom address 0...
Reading back IPMI data from EEprom address 0...
Verifying data...
Writing IPMI data to EEprom address 16...
Reading back IPMI data from EEprom address 16...
Verifying data...
Writing IPMI data to EEprom address 32...
Reading back IPMI data from EEprom address 32...
Verifying data...
Writing IPMI data to EEprom address 48...
Reading back IPMI data from EEprom address 48...
Verifying data...
Writing IPMI data to EEprom address 64...
Reading back IPMI data from EEprom address 64...
Verifying data...
Writing IPMI data to EEprom address 80...
Reading back IPMI data from EEprom address 80...
Verifying data...
Writing IPMI data to EEprom address 96...
Reading back IPMI data from EEprom address 96...
Verifying data...
Writing IPMI data to EEprom address 112...
Reading back IPMI data from EEprom address 112...
Verifying data...
Writing IPMI data to EEprom address 128...
Reading back IPMI data from EEprom address 128...
Verifying data...
Writing IPMI data to EEprom address 144...
Reading back IPMI data from EEprom address 144...
Verifying data...
Writing IPMI data to EEprom address 160...
Reading back IPMI data from EEprom address 160...
Verifying data...
Done, exiting.
Upgrade succeeded

But I still met the issue when I tried to config i2c reset.
This symptom was found both on zc702 and zedboard with the same hdmi-fmc.
Does it possible HW issue of hdmi-fmc?
If yes, how to check it efficiently and immediately?

Thanks.

BR
Blake

Link to comment
Share on other sites

Hello @Blake,

Yes, right now is possible for you to have an hardware issue. I will also try on the ZedBoard project given by @jpeyron. I will test it, I hope that I have some functional fmc-hdmi devices in here, and after that I will make an bin file for you, in order to test your device. If we will conclude that you have some hardware issues, I will go further with the replacement request procedure to our sales department. Thank you.       

Link to comment
Share on other sites

Hello @Blake,

For me it works. So, there are big chances for you to have an defective device. In order to raise the replacement request please send me in private the fallowing info:

1.      Date of Purchase:
2.      Seller:
3.      Purchase Order/ Web order Number:
4.      Serial Number:

Thank you.

 

Best Regards,

Bogdan Vanca 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...