It's a 128x128 1.44" color LCD, with a serial interface and a "graphics processor" attached. Sparkfun has them for about $32. One of the comments from the Sparkfun page:
So let me get this straight. This thing is a color LCD with built in controller, backlight circuitry, microSD socket which is compatible with both low capacity and high capacity cards, AND! it basically has a user programmable microcontroller with 10k of program space and 2 GPIO lines in addition to all the on-board control lines for interfacing with the LCD?
The product pages are here: uLCD-144(GFX)
4D has two versions: GFX and SGC. GFX is basically a "standalone" version, meaning you program the built in controller directly, and can built an interface to whatever you want (netduino, pic, etc -- but you have to write the interface)
SGC is more like a "traditional" serial display, where you send it command like "draw a circle here", "display this text", etc.
At first I thought the difference was actually in the hardware, but it's not: it's just firmware. You can reflash the GFX to the SGC and back without any trouble. You can get the SGC firmware here.
I was able to power, test, flash, and program it using the 3.3v Sparkfun FTDI breakout via a breadboard, in spite of the board requiring 5v. I did have to manually toggle the reset line, but it was flawless, otherwise.
Here is the start of the class I'm building to interface with it:
using System; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; using System.IO.Ports; namespace uLCD_144_Test1 { class uLCD_144 { public SerialPort _COM2; public void init() { using (OutputPort d4 = new OutputPort(Pins.GPIO_PIN_D4, true)) { d4.Write(false); d4.Write(true); } Thread.Sleep(2000); this.write(new byte[] { (byte)0x55 }); } public void drawbitmap(byte[] bmp) { //2.2.5 Draw Image-Icon - 49hex //Command cmd, x, y, width, height, colourMode, pixel1, .. pixelN byte[] cmd = new byte[] { (byte)0x49, (byte)0x00, (byte)0x2A, (byte)0x80, (byte)0x28, (byte)0x08 }; this.write(cmd, false); this.write(bmp); } public void write(byte[] ba, bool pause = true) { if (this._COM2.IsOpen) { this._COM2.Write(ba, 0, ba.Length); int sleeptime = (ba.Length / 14) + 1; //(calculate transmission time, at 115200, it can send 14 bytes / ms Debug.Print(sleeptime.ToString()); if (pause) { Thread.Sleep(sleeptime); } } else { } } public uLCD_144() { this._COM2 = new SerialPort(SerialPorts.COM2, 115200); this._COM2.Open(); this.init(); } } }