Thomas' writings, builds, toys

2008-03-26

Atmel AT91RM9200 Linux DMX Driver

menu

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.

Architecture

blokdiagram

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

menu

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

menu

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.

Misc

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.