More LCD hacking here
Looking for a small, cheap LCD for a possibly large-scale project, I decided that the
2.5" QVGA TFT in the Ipod Video may be worth a look, as cheap clones of it are
available from Hong Kong via Ebay..
First problem was that the connector is a 0.3mm pitch FFC, so somewhat fiddly to
connect to...... but I'm not easily defeated by fiddliness, and have a really good magnifier..
I'd been reading a few controller datasheets, so had a good idea of what I was looking for. After identifying the power and ground pins, some probing with the scope pretty soon found what looked like the control lines - WR,RD,CS,RS. This left exactly 16 more signals - the data bus.
A major stroke of luck was that the test mode had some screen tests which displayed a
graduated scale from black to each primary colour, so the RGB values counted upwards
through the frame. This made identifying which pins mapped to R,G,B pretty trivial :
Took a while to find the connector manufacturer - it's a 32 way 0.3mm pitch ZIF FFC - and unusually has an even number of pins and reverse-side latch. Couldn't find it from HRS,JAE, JST or Molex. Then I noticed the connector on the hard disk had a similar style of latch, so looked up the HD on the Toshiba site & found a datasheet listing the connector manufacturer. It's a DDK FF12 series, part number FF12-32A-R11A. I've also seen an Omron part used on another ipod PCB, and it looks like the part number should be XF2B-3245-31A, but the datasheet for this series doesn't list a 32 way option.
I enquired with a DDK distributor about availablility, and found that the minimum order
is not just one reel, which I sort of expected, but three (7500 connectors), at GBP£0.71
Next step is to try to identify the controller. One way will be to look at the commands and try to match with possible chips for which I have data. But will post a few requests on the net to see if anyone already knows.... It should be possible to figure out how to drive it without the data, by logging the commands, but there may be some more interesting features that can be used once the controller is identified.
If you know for sure what controller this LCD uses, please let me know!
The register structure looks similar to the Toshiba JBT6K71, but registers are used that do not exist on that part, so best guess so far is it's another one in the Toshiba range.
possibles ( not checked yet) : JBT6K98,
Eliminated so far : JBT6K71, R61503, LDS285,S6D0154,ILI9320,S1D19122,JBT6K74A,JBT6K85,
Start of initialisation - Burst at end of trace is main initialisation sequence shown below. The six pulses inbetween are writes of 0000 with RS low.
Start of main initialisation
Sequence on powerdown (Power to LCD is removed on switchoff, so this command may not be to put display in powerdown mode!)
Sequence when writing new frame of image data
Access timing - command
Access timing - Data - rate is 5.5MHz. Full frame write takes 14.2mS
Driving it youself.
This display should be drivable from most microcontrollers ( *I've not yet verfied that it can do 3.3v I/O. If not, you'll need alot of resistors, or a level shifter), however the 16 bit data bus will need rather alot of I/O pins. If you're running from something like a NXP LPC2xxx ARM processor, this may not be a big deal, and you may want the speed of the 16 bit bus.
However there are a couple of simple ways to cut down the number of I/O pins needed, at the cost of extra components, and speed. They also assume you're using the display in write-only mode, and so would not be suitable if, for example, you wanted to read out the display RAM contents. A write-only interface could leave RD tied high ( assuming the initialisaiton sequence doesn't require the read - seems unlikely). You might also be able to tie CS and WR together.
1) 8 bit latch. Use an 8 bit I/O port to drive the bottom 8 data
lines. Connect an 8 bit latch like a 74HC574 with its inputs to the 8 bit port, and the
outputs to the top 8 bits of the display's data bus. Connect the latch clock to
another I/O pin. To write a 16 bit value, output the MSbyte to the port, wiggle the clock
pin, then output the LSbyte and wiggle the LCD's CS/WR pins.
2) Shift register. Use two 8-bit shift registers, e.g. 74HC164, driven from a SPI port ( could use normal IO but a hardware SPI port will usually be faster) - clock 16 bits of data into the registers to set up the required value on the display databus, then twiddle the LCD CS/WR lines to do the write. As above, if you're short of pins, you could share a pin between the shift clock and WR, and use the data out to drive the RS line, so you'd only need 4 lines in total ( clock+WR, data+RS, CS, Reset)