0
\$\begingroup\$

I have designed my own display driver board using a TI TFP401PZP TMDS DVI receiver/deserializer which is connected to a 24-bit, parallel RGB, 7 inch capacitive touch display with a resolution of 800x480.

The power distribution is perfectly done to all segments. The driver board is designed on a two-layer PCB (the back layer is dedicated to only ground plane).

Pin configurations:

  • DFO = pulled down for continuous clock
  • nPDO = connected to SCDT for normal operation/drivers on
  • ST = pulled up for high drive strength
  • PIXS = pulled down for 1 px/clk
  • nSTAG = pulled high for normal simultaneous even/odd pixel output
  • OCK_INV = pulled high for: latches output data on rising ODCK edge

My findings through oscilloscope after changing another probe:

  • ODCK = 34 MHz
  • VSYNC = 60 Hz
  • HSYNC = 31.04 kHz
  • DE = 28.81 kHz (Vpp = 2.24 v)

I also set the EDID to external EEPROM with 800x480 resolution.

At the output I'm getting distorted video (ghost screen/pixel mismatch) with greenish horizontal lines. I've also shared the video output screen and circuit board with schematic.

My schematic: enter image description here

The distorted video output/black screen:

enter image description here

video output after 5 mins of display on time when ODCK, HSYNC, VSYNC disappears:

enter image description here

Any help would be greatly appreciated.

\$\endgroup\$
15
  • 1
    \$\begingroup\$ What kind of EDID you loaded? Why do you have a HDMI connector on a device which cannot have HDMI support? Are you powering something from HDMI 5V? Why do you have the EDID EPROM on 3.3V supply? Why do you have a 10K resistor on HPD? This isn't a compliant design in many ways. \$\endgroup\$
    – Justme
    Commented Feb 6 at 7:55
  • \$\begingroup\$ @Justme TFP401PZP is a TMDS DVI/HDMI receiver/deserializer bridge IC . It converts digital video signals into upto 24 bit analog RGB signals for display. \$\endgroup\$
    – Aryan
    Commented Feb 6 at 8:48
  • 1
    \$\begingroup\$ It is a DVI compliant receiver. I don't see it being advertized as HDMI compliant. Anyway, what EDID you uploaded to EEPROM, and do comment on the rest of my questions to you in order to find our what is wrong. The 2 sided PCB is also a hazard for high speed signals that require good impedance matching. \$\endgroup\$
    – Justme
    Commented Feb 6 at 8:53
  • \$\begingroup\$ @Justme HDMI I2C is directly connected to EEPROM I2C to store EDID info and uses 3.3v from on board supply though it can be connected to HDMI 5v. According to The HDMI Specification 1.4b for hotplug detection a 10K must be pulled high to 5v. About the design, I have checked tons of datasheet and reference designs also on two layer PCB. E.g. Adafruit's TFP401 HDMI/DVI Decoder to 40-Pin TTL Breakout and Waveshare's 7 inch Usb compliant touch display. These two are based on double sided PCB. \$\endgroup\$
    – Aryan
    Commented Feb 6 at 9:05
  • \$\begingroup\$ I have used the reference EDID provided by Adafruit and changed some properties compatible to my display. \$\endgroup\$
    – Aryan
    Commented Feb 6 at 9:06

2 Answers 2

2
\$\begingroup\$

So , I figured out what was going wrong.

In my second iteration of the PCB layout, the driver board is now operating flawlessly. I made some minor adjustments, such as adding a 90 ohm CMR filter next to the HDMI input differential pair and tuned all the differential traces to a length of 60mm with proper impedance matching.(issue was the improper routing of Diff. pair)

\$\endgroup\$
1
\$\begingroup\$

There might be many issues.

Obviously the HSYNC and VSYNC should not run at same rate.

If you used the stock Adafruit EDID, it will only list a 32.00 MHz DTD, so if the Raspberry Pi outputs anything else, it might not have read the EDID correctly.

Which might be due to the hardware issues that the EEPROM is powered with 3.3V but DDC is a 5V bus, and the display side DDC pull-ups are incorrect.

It might also be that the Raspberry Pi was unable to read the EDID if display was connected before it was powered up, because HPD is always tied high, but the EDID was powered separately.

Or it might be that the HPD is tied high with incorrect resistance so RPi cannot see that a display is plugged in.

The chip Reserved pin should be tied high but the resistor reads NC so it might not be tied high.

If you did edit the EDID contents, the changes could have errors, or the checksum could be incorrect.

Also the RPi must be made sure to output only TMDS video that uses DVI protocol to the chip, in the application notes it is said that the chip cannot receive TMDS video using HDMI protocol.

\$\endgroup\$
10
  • \$\begingroup\$ I have programed my EEPROM with Adafruit EDID and connected it on Waveshare and it is working perfectly. So may be the issue is not with EDID. I have almost the same configuration as Waveshare. EEPROM is powered with 3.3V and I2C bus is pulled up to 3.3V \$\endgroup\$
    – Aryan
    Commented Feb 6 at 13:12
  • \$\begingroup\$ @Aryan Yes and since the E-DDC is a 5V bus, the pull-ups to 3.3V and the EEPROM powered with 3.3V will clamp the bus and not allow 5V voltages, so the bus or anything else that is outside the specs means it does not have to work. \$\endgroup\$
    – Justme
    Commented Feb 6 at 13:36
  • \$\begingroup\$ Okay I will have to change the configuration and will let you know the result by tomorrow. \$\endgroup\$
    – Aryan
    Commented Feb 6 at 13:41
  • \$\begingroup\$ @Aryan It could be all the other things as well. Especially the pin called "Reserved". \$\endgroup\$
    – Justme
    Commented Feb 6 at 14:34
  • \$\begingroup\$ I followed your instructions and connected the eeprom to the 5 volt bus as well as configured the EDID, however the screen still appears to be in dark mode with vertical aligned pixels. If there is anything else that you think I should test, do suggest. \$\endgroup\$
    – Aryan
    Commented Feb 9 at 9:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.