AnsweredAssumed Answered

ADV7630 HDCP Repeater, problem reading bksv count

Question asked by sjon on Mar 3, 2014
Latest reply on Mar 19, 2014 by sjon

Hi,

 

I'm implementing an HDCP repeater using the ADV7630 hw. I'm following the instructions detailed in the Hardware User Guide, UG-399, but am having problems reading the BKSV_COUNT as described in the section HDMI Transmitters, HDCP Handling.  I have implemented the software flow chart from Figure 16 of the HW User Guide and I am testing with a Quantum Data 780, using its HDCP input test where it simulates 16 downstream devices. When I read the downstream BKSVs, the process seems to follow the steps outlined in the flow chart, except that I always read 0 from the BKSV_COUNT and BSTATUS register fields. The strange thing is that I am receiving multiple BKSV interrupts as expected, but when reading the BKSV_COUNT after the interrupt I still read 0.

 

Here's the pseudo code for my algorithm:

 

//turn power off

write reg HDMI_TXB_MAIN address 0x41 to 0x50

 

init the hdmi transmitter (turns power back on plus setup)

 

if(hdcp_desired)

{

        // TXB HDCP_DESIRED(b7) = 1 (encrypted), FRAME_ENC(b4) = 1 (encrypted), HDMI_MODE(b2,b1) = 11 (HDMI selected)

        write reg HDMI_TXB_MAIN address 0xAF to 0x96

}

else

        write reg HDMI_TXB_MAIN address 0xAF to 0x06

 

read edid if necessary

 

if(hdcp_desired)

{

        wait for bksv data to be ready, BKSV_FLAG_ST==1

       

        read BKSV0 through BKSV4

       

        //clear bksv ready interrupt

        write reg HDMI_TXB_MAIN address 0x97 to 0x40

 

        wait for bksv or hdcp done, BKSV_FLAG_ST==1 OR HDCP_CONTROLLER_STATE==4

       

        read the downstream device count and depth from BSTATUS(I always read a BSTATUS of 0x1000 here)

         

        for( ; (ret != HDCP_ENABLED) && (ret != HDCP_FAILED); ret = wait_for_bksv_or_hdcp_done(ADV7630_HDMI_TXB_MAIN, 200))

        {

            // read the number of bksvs available

            read reg HDMI_TXB_EDID address 0xC7 (I always get a 0 here)

               

            read bksv_count bksvs from edid memory

           

            // clear bksv ready interrupt

            write reg HDMI_TXB_MAIN address 0x97 to 0x40

        }

}

 

 

Any idea what I'm doing wrong? My understanding is that the BKSV_COUNT should be valid from the time BKSV_FLAG_ST==1 till I clear it. I also don't get why the BSTATUS doesn't show the proper device depth.

 

Thanks,

Jon



Outcomes