A collection of technical articles that are related to embedded systems and the programming of microcontrollers and small systems.
- Implementing FAT on CompactFlash cards, SD/MMC cards and USB sticks
When writing the software for our programmable MP3 player, we had to find out how a file system, such as FAT16 and FAT32, is fitted on a CompactFlash card. In the end, it turned out to be all pretty standard. However, two published reference implementations of similar projects as ours were quite terse and... they turned out to work only "in most circumstances". Hence, we decided that our insight might very well be useful to others.
Most recent update: Information on SD/MMC cards has been added.
- minIni: a portable INI file parser
The minIni library is a minimal INI file parser that supports reading, writing and deleting keys from an INI file and that requires little memory or other resources. It is adaptable to non-standard file I/O libraries, which are often found in embedded systems.
- Debouncing switches with vertical counters
An efficient software method to debounce multiple switch inputs concurrently. The article explains "vertical counters" and how these can be used to filter out "contact bounces" in switches with a minimum of overhead.
- Configuring a micro-controller for low-speed USB communication
All device controllers that support full-speed, also support low-speed. This is inherent to the protocol. However, since only few programmers are have knowledge of the USB physical layer (signal levels), and few circuit designers have knowledge of the programming intricacies, low-speed configuration of an USB device is becoming "lost knowledge". This article fills the void.
- The Dhrystone benchmark, the LPC2106 and GNU GCC
Our running of the Dhrystone benchmark on the LPC2106 microcontroller (a NXP/Philips chip with an ARM7 core) produced significantly different results than those reported by a compiler vendor. We publish our data to point out the risks in interpreting benchmarks.
Most recent update: KEIL no longer lists its controversial tables on its site. For completeness, our discussion now contains a link to an archived copy of that page.
- Debugging with the Black Magic Probe
The “Black Magic Probe” is a combined hardware & software project, for programming & debugging ARM Cortex micro-controllers. We wrote a book on the Black Magic Probe, and a set of software tools to make working with this tool more convenient.
- ICSP programming tool/adapter
This tiny adapter enables In-System Programming of the NXP LPC1000 and LPC2000 microcontroller series using the tag-connect cable and an FTDI TTL-232R interface cable. It may also apply to other microcontrollers that use ICSP.
- LPC2100: Entering ISP mode from user code
Our notes and code modifications on the NXP/Philips application note AN10356, pertaining to a simple solution to in-field firmware updating.
- The STA013 MP3 decoder
This paper is a collection of hardware notes on the use of the STA013 MP3 decoder from STMicroelectronics. The paper also contains some notes on the MP3 file format.
- An RS232 "spy" cable
The RS232 norm defines a one-on-one communication link between two devices. With a special cable, though, it is possible to have a third device (a PC) "listen in" on the data —a useful trick in debugging serial protocols or for deciphering an unknown protocol.
- A MIDI to RS232 converter
The MIDI protocol is a serial data communications protocol using on a "current loop" physical layer, and using a Baud rate of 31250 bps. This article shows the electronics needed to convert between current loop and the RS232 signal levels. In the second part, it talks about the "software protocol" of MIDI.
Most recent update: A link to USB-to-RS232 adapters that support the required (non-standard) Baud rate of 31250 bps was added.
- Extending TFTP
The "Trivial File Transfer Protocol" is a file transfer protocol that is suitable for timy implementations (in embedded systems). This article discusses and proposes a few extensions on the protocol, to improve performance, allow larger files, enable peer-to-peer file transfers, and more...