Using the Joggler as a VGA/DVI screen

From Joggler
Jump to navigation Jump to search

Introduction

I first started this project July 2011. The idea was to remove the Joggler's internal PCB and replace it with an LCD controller to convert from VGA or DVI to the LVDS signals required by the LCD panel. I felt that the Joggler was an ideal form factor for a "mini" screen, also, I'd attempted this kind of thing several times in the past without success.

Required hardware / modifications

Backlight

The Joggler's LCD requires about 25 volts to drive the LED backlight. For this I purchased a small step up regulator board off eBay.

Touch screen

This is probably the least complicated part to get working. It's just a USB device which will easily work on any PC. Once I've (hopefully) got the rest of it going, I'll detail this further.

VGA to LVDS conversion

A seller on eBay (njytouch) is selling VGA to LVDS controller PCBs which in theory would be perfect but in practice there are some problems. They do have a firmware image for an 800x480 panel but it's not suitable for driving the Joggler's LCD, some modifications are required.

For extra money, NJY will sell a programmer for these boards and a CD containing various firmware images, written by a company called GMI Tech. (http://www.gmitec.com/). Unfortunately no source code is included, and GMI have gone to significant efforts to ensure no one would modify their binary code as their firmware images are scrambled, and descrambled by the programmer before being flashed onto the controller.

What I've done so far

  • Written a tool for descrambling GMI's .GFF firmware images. At present the process is one way. I cannot rebuild a .GFF file.
  • Written a new tool for programming the controller boards (in C#). Replaces the awful "ROVAWriter" tool originally supplied with the kit and accepts unscrambled .BIN/.HEX firmware images.
  • Built new drivers for the USB Programmer, for Windows 7 64-Bit (Strictly speaking, not needed, but I don't run XP machines any more)
  • Performed significant analysis of the 800x480 firmware image (decompiling with IDA)
  • Located offsets for most of the LCD controllers registers
  • Built hardware dongle for reading/writing LCD controller's registers at run-time

In terms of software, I've decompiled and analysed the LCD controller's firmware sufficiently that I can change any register I need. The problem now is understanding the LCD controller (RTD2545L) well enough to know exactly what needs to be modified to drive the Joggler's LCD panel. Even though I've got datasheets for everything, this scarcely helps as the controller's datasheet (the one I really need details from) it is poorly written and vague.

Sadly almost every LCD panel (Even of same resolution) has different timing parameters/interface styles or protocols and require modification of the controller firmware. Even little things such as interface impedance matching require software modification - things that vary from one PCB/cable combination to another! This is all rather difficult!

Progress

I'm fairly satisfied that I've made the majority of the changes firmware required to support the Joggler's panel but a big problem remains: The controller's clocking / PLL system just doesn't seem to be stable at the low pixel clock required for this panel (approx 33MHz).

More annoying still, if flashed with firmware for a 1024x768 panel with a pixel clock of 65MHz, then adjusted at run time with the same parameters, to run at 33MHz, it remains stable, regardless of running mode. This tells me there is some complex relationship between the display's geometry parameters and the PLL system, something that is not detailed in the datasheet.

Stranger still, this doesn't seem to be a problem I've introduced, all firmware images with pixel clocks under 60MHz have this problem which is making me wonder if there is some subtle hardware modification required on this board for smaller panels. Time will tell.

UPDATE (16/04/2012):

After almost a year of hacking the LCD Controller firmware, I finally have a picture on the Joggler's LQ070Y3LG4A LCD panel.

It's not perfect, but it's getting there!

UPDATE (06/05/2012):

I have this rig working with 800x480 input signal but I've got some pixel registration issues. I suspect I've got some kind of "off by 1" problem somewhere. Still working on it...

Lcdcontroller working.jpg

Lcdcontroller closeup.jpg

UPDATE (03/06/2012):

I've got it working good with DVI Input.

Remaining tasks:

  • Disable Dithering (Not needed on 24-bit Panel)
  • EDID is completely wrong (Currently reports self as 1280x800 panel or something silly)
  • VGA Input doesn't really work. Well, it kind of does except it looks absolutely terrible. Likely due to some kind of misconfiguration of ADC.
  • OSD Vertical alignment could use some tweaking

Bad news:

This panel's Vertical blanking period (35 lines) is punishingly long, a lot longer than the 16 or so lines in most standard VGA modes. The exact technical problem this poses is somewhat complex to dwell on however it can summed up by this: Yes it'll work when Windows is running or X server started, but as for when the VGA is driven by the BIOS (i.e. before Windows boots or in BIOS setup): Not likely, unless that BIOS happens to read the DTD from the EDID and honour it exactly. As I don't have a valid DTD or even EDID at present, I'm yet to test this.

Workingwithdvi.jpg

Alternate method: Connection via LVDS

I have to admit, the above method is very complex and likely out of reach for almost everyone but the craziest people reading this wiki (Likely myself only). A simpler way to connect the Joggler screen to another machine is using LVDS. Unfortunately only one Intel GMCH can drive the Joggler LCD directly, and that is of course: SCH Poulsbo, found in the Joggler. For everything else, conversion is required.

EDIT: Lies. The newly released Atom D/N2xxx processors & the DH61AG could in theory drive the Joggler's panel directly. Hopefully more about that soon.

Pictured below is my "Kitchen PC" using a Joggler as a screen. The photo doesn't really show it, but it really does have gorgeous picture/colours. It's quite usable on this mini-ITX machine running Windows 7 Starter. Why not just use the Jogglers internals with Windows XP? Sadly the Jogglers standard internals are woefully inadequate for what I run on this.

Joggler d945gsejt.jpg

Converting from 18-Bit LVDS to LVDS 24.1

A company called Steatite (UK) sells a board made by IEI p/n# LVDS24-01 which can convert the LVDS output from every other Intel GMCH to what's needed for the Joggler LCD. Basically it converts 18-Bit LVDS to the 24-bit "LVDS 24.1" style used by the LQ070Y3LG4A. A complex conversion done flawlessly by this neat little board. Sadly ready made cables aren't available, so these are a bit of work to complete.

LVDS24-01.jpg

Other than wiring it up, there's not an awful lot to getting it running. The only slight complication is drivers, which can be built for more or less any Intel chipset mainboard using the Intel IEGD, and following DTD: http://xpander.mattmillman.com/data/files/LQ070Y3LG4A.dtd

Getting the VGA.BIN generated by the IEGD into the BIOS is a little bit more work. Thanks to Intel's digital signature checking, this is basically impossible without desoldering the BIOS chip from the board. Once removed from the board, it can be read with a universal programmer, its contents then can be loaded into Aptio MMTOOL which allows the standard GMA VBIOS to be replaced. Once that is done it can be re-flashed and re-installed into the system. As Intel doesn't like people doing this kind of thing, That's about as much as I'm going to say on that!

It's not completely necessary to modify the BIOS for LVDS output, but if it's not done, the display will output to standard VGA until Windows boots and loads the IEGD driver.

On my rig, I'm using an Intel D945GSEJT Mainboard, which comes with LVDS connector fitted. The mating connector on the D945GSEJT is available from Farnell (1830842)

D945gsejt lvds.jpg

Questions: mailto:inaxeon@hotmail.com