Thomas makes, writes


Atmel AT91RM9200 Linux DMX Driver


As final project to earn my Professional Bachelor degree in the field of Electronics - ICT, I developed embedded software. The goal was to create a custom, Linux based software application that acts as an 'Art-Net node'.

After a few months of work, I was able to present a working system, with basic functionality and buttons+LCD interface working.

I wrote a special Linux (character) device driver for the AT91RM9200 microprocessor's built-in UART's built-in UART. This device driver provides a simple and straightforward way to use the AT91's UART on a DMX-512 universe.

This article is meant to provide some information about the project. It is not complete and will be written up on over time.



The device is centered around a daemon that sleeps until it receives network I/O, or receives user input from buttons on GPIO pins.

The solution is a combination of daemons and a kernel driver that provides a simple userspace (devicefile) interface to the serial port UART'S sending or receiving DMX data at 512kbaud.

DMX: Linux Kernel driver


Development was done using:

  • screen+VIM as development environment
  • gdbserver for userspace debugging
  • gdb+OpenOCD for JTAG device driver debugging.

This is one of the simple DMX state machine diagrams:

state diagram

User interface


End user configuration is possible using six buttons and a generic 2x16 LCD connected to the microprocessor's general purpose I/O pins.

The user interface consists of a tree based menu, and makes it possible to configure the ArtNet Node.


The diagrams from this page are drawn with "Dia" and were taken from my final presentation. The thesis was written in LaTeX and so was the presentation.