my Matrix Orbital MX212 LCD

Matrix Orbital MX212 LCD display under Linux

Some notes on getting a Matrix Orbital MX212 LCD display (USB) to work under Linux. Some of the notes may be useful for installing other Matrix Orbital displays.

(Right is a screenshot, but in reality the screen is clearer and brighter than the photo !)


UPDATE: April 2007: Kernel 2.6.19, udev-087

Newer kernel, also AMD64 architecture and new mobo (spec):
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_STORAGE=m
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_FTDI_SIO=y
UDEV has also change, and I now use this rule:

ATTRS{interface}=="MX2/MX3", DRIVER=="ftdi_sio", SYMLINK+="MX2MX3"

UPDATE: Jan 2005: Kernel 2.4.26, 2.6.9, 2.6.10

I just upgraded from 2.4.20 to 2.4.26 and noticed that I do not have to patch the kernel any more :-) And also works fine with no patching under 2.6.9 and 2.6.10 "gentoo-dev-sources" (now "gentoo-sources"):
CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_FTDI_SIO=y
I have also changed to udevfs and added this to my rules config to give me /dev/MX2MX3;

BUS="usb", SYSFS{interface}="MX2/MX3", NAME="%k", SYMLINK="MX2MX3"

I also had to update my custom LCDproc client program as the 2.6.x kernels break down the CPU usage into more detail. /proc/stat now has 7 CPU fields instead of 4 (new are IO wait and hard and soft IRQ) (it took me some time to find out the details, man proc is out of date: see /usr/src/linux/Documentation/filesystems/proc.txt on your local filesystem).

UPDATE: October 2004

I am very happy with my display: over the first few weeks I hacked around with the example "lcdproc" client and now I have a single screen that displays all the stuff that I am interested in. (Also, in retrospect, I may not have bothered with a display with switches as I do not use them, but I may find a further use for them in the future !!)

Aug 2005: I now use the switches to allow me to either kill the local X server, or to call poweroff. The former is most useful in case an X app. locks up (I only have one machine so I can not remotely login to kill it).


1) Display Notes

My display is the Matrix Orbital model MX212 but the board is labelled "LK202-24-USB rev1.4" and the USB to serial chip is labelled "FTDI FT232BM".

I suspect that most of the Matrix Orbital model numbering system refer to the LCD colouring, the keypad, the number of rows etc and that the "LK202" is the relevant part (and the manual on the CD is actually called "LK202-24-USB_02.pdf".)

Also the display appears to be fundamentally a serial device: the USB model just has an extra USB to serial chip. So with the correct Linux module and patch any application that talks to a serial device can use the USB hardware.


2) Requirements

You need this s/w installed:

What I have


3) Steps

I basically just followed these instructions: Matrix Orbital LK202-24-USB

1: Configure and build the kernel

As per above instructions I modded my kernel; by coincidence I was running the same version: 2.4.20, but the patch is very simple and could inserted into any other (?2.4.x) kernel (Update Jan 2005: not required for Kernel 2.4.26).

Do not forget to enable the correct USB serial driver: CONFIG_USB_SERIAL=y and CONFIG_USB_SERIAL_FTDI_SIO=y (I already had USB builtin for my keyboard).

After rebooting my display appeared as device /dev/usb/tts/0 but looks to the application like a *serial* device.

cat /proc/bus/usb/drivers and cat /proc/bus/usb/devices will give you some useful info: for the latter find the block containing "S: Manufacturer=Matrix Orbital" and check that the "ProdID" value is on the list patched into ftdi_sio.h above (mine is "fa01").

2a: Using the lcd4linux display driver

I tried lcd4linux first as it looked the simplest to use !!

I setup the driver config as below. NOTE: at first I used the default contrast (160) setting first but the display washed out with no readable text: it took some time before I realised the problem was simple to fix :-( I set it to 60 and it all looked fine !

Display LK202-25
Port /dev/usb/tts/0
Speed 19200
Contrast 60

This tested my display OK, but I ditched when I found:

Fair dinkum but no use for me :-) So I moved onto LCDproc.

2b: Using the LCDproc display driver

LCDproc is a client/server setup to control LCD displays. The server (LCDd) could be compared to the X server: it handles the hardware (input and output) and provides a common interface for clients to use. It displays a splash screen and a "heartbeat", opens a socket and waits.

It can also handle some keypad functions: switching between different screens that clients provide, and setting the contrast etc. depending on the device.

LCDproc comes with a default client: "lcdproc" that the user can run to display rolling pages of system information. Other clients can be found on the net, or you can write your own; lcdproc is written in C and some Perl examples are supplied. But as the server uses a simple TCP/IP socket the client and server can be on different machines, and the client can be written in any language :-)


4: Other Useful Links

Matrix Orbital (Manufactures site)

Matrix Orbital / MX-212 (direct link)

Official Forums

PC Stats / MX-212 Review

FTD_SIO Driver Project


<< Back to Computer/Linux page | << Back to Front page | Email me