News:

Attention: For security reasons,please choose a user name *different* from your login name.
Also make sure to choose a secure password and change it regularly.

Main Menu

TE0701 using ADV7511 with Artix-7 Module (te0712) - register malfunction?

Started by tschesnok, January 06, 2021, 05:24:39 AM

Previous topic - Next topic

tschesnok

Hi all,

Any help would be much appreciated!

I setup a Microblaze / DDR and FB to VDMA to ADV7511 type of setup (TE0701/TE0712).  It works CORRECTLY.. perhaps every 15-20th time I try...(repower/reset/replug, etc)  but in most cases the screen is blank or in a few cases I get 1/3rd of the screen showing an image. (while still posting 1080p timing to the display in the later case). In all cases register 0x3D returns that 1080p60 was detected! (correctly)

So it sounds like a timing issue, right? (I have ruled out any other crazy heap/stack Microblaze setup issues)

One thing seems consistent however.. I can NEVER write to register 0xBA (timing), 0xAF (HDCP/DVI mode), or 0x18 (color processing). After writing "successfully" a read back is zero or does not match (and not because of un-assigned bits). While writes to other registers can fail.. these 3 are the only consistent ones.
I have tried relaxing timing on iic (including clock and data delays) with no luck. May even be more rejections at 100khz vs 400khz clock rate. In software I "re-try"  4-5 times on a failed register.. still no go. This is with power on / HP on. (as required).

Any thoughts??? Why would a register be un-writable with power and HP on.

Other info:
I'm using all the same register settings as in the Trendz zynq module reference design. Using same IP to go from 24bit to 12bit DDR (without the B/G color swap). Had to change iicPs to iic.. but feel good about my implementation and proper read-backs.

I ordered another board to rule out HW issues.. but unless there is something obvious I overlooked it may just be a few faulty/flaky registers on the ADV7511?? (I got the board on Nov 15th via Digikey? Any warranty?) :)

Many thanks. Let me know if any of this rings a bell with anyone.
Andrew

JH

Hi,
I can't imagine, that some register are faulty. Either the whole chip is damaged or some setup is wrong.

We have test only with Zynq Module ADV7511 functionality.   This registry you describe depends on reset signal, maybe something reset cycle will prevent it for changes or you has wrong mapping and you write/read to the packet memory or CEC memory?
Did you checked: https://www.analog.com/media/en/technical-documentation/user-guides/ADV7511_Programming_Guide.pdf

br
John

tschesnok

Hi John, Thanks for your response.

At this point I have spent 2-3 days studying both hardware and software manuals for the ADV7511. I agree hardware issues are unlikely... just wishful thinking at this point :)
The issue is intermittent. When it does work.. the image is rock solid and will stay up forever.. and has a high likelihood or working again and again when executing the code again.. unless I power it down / unplug the HDMI (resetting the registers). When it works I assume all registers got the correct value (even if they return incorrect ones).

Data/syncs supplied are probably good or it would not consistently detect the video mode. I'm not touching packet or CEC memory.. All writes are addressed to 0x72. I'm usually writing to registers when stepping through the code.. so a large variety of timing.. yet consistent rejection of some registers.

Only difference between your tested design and mine is the i2c bus.. I'm using the Xilinx iic IP and Microblaze driver (xiic.h). It seems clean - never hangs.. all functions checked for return values and I get all correct interrupts/callbacks. I believe I'm correctly using RepeatOperations on read-backs.. which work correctly for most registers.
Is it possible that certain i2c "addresses" trigger more noise and incorrect reads? I figured I would have caught that with different bus speeds / timing settings.. but I did not.

I'll keep testing..

tschesnok

**************  UPDATE  - GOT IT WORKING  ******************

All,

In the interest of helping others.. here are my findings:

First: The ADV7511 is a horrible chip.. so if you are looking for help.. it's not you.. there is a good reason for it :)  Documentation is not all that helpful.

Bottom line - you need to do the following:

1. Monitor HotPlug register.. (you can use an interrupt - BUT you need to monitor both high and low transitions!!)
2. When Hotplug goes high:
        a) Wait a little or also monitor Current Sense from the monitor.. (I was just checking the Hot Plug register every second.. so did not worry about  MCS)
        b) write all registers EXCEPT for the ones you need to write after power on (in table at the beginning of programming manual)
        c) Power on the chip. (My guess is this is simply a "power the output port"
        d) Write the rest of the registers. (why on earth you need to write a ton of registers with static numbers is beyond me.. but sure)
3. When HotPlug goes LOW:
        a) This is what no one tells you: You must power off the device!!! It will not be in a good state if you don't.

Rinse and repeat. it will now fire up a screen anytime I power up my board.. and will reset every time I unplug it and plug it back in.

Of specific note:
My TE0712 does a hard reset if I power it up without the HDMI cable.. and plug that cable in later. Sometimes it just kills my debugger connection.. other times it needs a power cycle to come back alive. This is concerning. This feels like a design flaw of the TE0701. If I power it on with the cable plugged in I can plug and unplug without issues.
Undocumented Register issues:
0xBA will not accept valid values for clock delay on the positive edge.. it will always default back to default values.. which are incorrect (with a clear error in the manual) Manual says 0 delay.. default is -1.2ns.
0xAF with HDCP disabled.. it still insists that frames are encrypted..
0x18 with Color conversion disabled the register still returns default values on items set differently.. (this can be forgiven.. and is understandable)

Best way to get started:
Get the list of register settings from the TE0720 / TE0701 Reference design.. they are all correct! BUT turn off color correction and get rid of those registers.. it will simplify your design.
If you create your own Frame Buffer and you want to display RGB in that byte order then you need to edit the custom IP from the reference design.. no need to flip G and B. (this is the video IP that converts 24 bit to 12 bit DDR for the chip on the TE0701

Hope that helps.. and I will respond to questions if this Forum sends me emails.

JH

Hi,
thanks for your hint's for other customer.

QuoteMy TE0712 does a hard reset if I power it up without the HDMI cable.. and plug that cable in later. Sometimes it just kills my debugger connection.. other times it needs a power cycle to come back alive. This is concerning. This feels like a design flaw of the TE0701. If I power it on with the cable plugged in I can plug and unplug without issues.
This sounds strange.
Can you tell me which external power supply you use?
Has all connected devices (PC, Monitor, Power supply) the same GND potential?

Maybe power drops down shortly which force a reboot on the system. 5V  VIN for module is the same like 5V for TPD12S016PWR which generates 5V_HDMI. But don't know what caused this issue on hot plugin on power up. Can you measure 5V power domain?
br
John

tschesnok

I'm not sure. In the case of the display it is a 3rd party consumer display plugged into the same outlet. I'm powering the 0701 with a decent 12v 5amp "level3"? adapter. I guess I could try a lab power supply to see if anything changes.

The clue here seems to be plugging it in after boot. Perhaps the screen is in a different state then with a re-plugging. Or the HDMI chipset is in a different state?

In any case it will have no effect on my particular project.