A serial logger is a device that accepts TTL serial data and writes it to some sort of media. I needed one for a project back in 2012.
There is a long history of serial loggers; here's some info about the ones I came across when I was looking for one. All of these have their roots in the SparkFun OpenLog hardware design and use Arduino based software.
Using the ATmega328P and featuring a microSD card there have been two hardware versions of this device. The firmware is available on github.
![]() |
![]() |
OpenLog V1 | OpenLog V2 |
I never actually had one of these.
This is a reimplementation of the OpenLog hardware. The firmware is available on github. It uses a SD card and features the ATmega644P which gains some SRAM (2K -> 4K) and a second serial port but is pin-for-pin compatible with the ATmega328. It uses a 14.7456 MHz crystal to make for better UART clock math. There were other changes to the firmware:
![]() |
SDLogger |
I used a number of these. One thing I didn't like about the firmware was that it configured the baud rate using a file on the SD card. I found that the file system would sometimes get corrupted and then it would default to the wrong speed (and silently stop logging).
Eventually I designed my own board. I used the ATMega1284P (pin-for-pin compatible) to gain even more SRAM than the ATmega644P (4K -> 16K) and switched to a microSD card cage which I put on the "top" of the board to make it easier to access. I also used a blue LED in place of the green one on the SDLogger. I kept the same header layout as the seed studio SDLogger so I could swap between the two designs.
![]() |
![]() |
XSE SDLogger Top | XSE SDLogger Bottom |
Both SDLogger and XSE SDlogger have a 6-pin header to allow for ISP programming. I like to use the Sparkfun Pocket AVR Programmer, which is faster than serial programming, and I made an adapter to convert the 6-pin (linear) header to the 6-pin (2x3) ISP socket. The adapter does not connect the voltage pin (which I filled in with some glue).
![]() |
![]() |
XSE SDLogger Schematic | ISP Adapter |
I originally designed my board with KiCad 5; a KiCad version 7 board layout file can be found here and an only slightly obsolete parts list is here. I had a small number of boards made with OshPark's prototype service. The SDLogger is about 34.5mm square, my design is 34.5 x 27.0 mm (OshPark charges by the square inch, after all).
Here are some of the changes I made to the firmware:
Used the second serial port to implement a configuration/debugging console
Stored the log sequence number in eeprom
Stored the capture UART speed in eeprom (the configuration/debugging console UART is nailed to 57600 baud)
Detect when the SD card has been inserted or removed
The blue LED blinks one or more times per second:
Number of Blinks Indication 1 Normal operation 3 SD init error 4 SD write error 5 open error (all methods failed)
The red LED indicates unflushed data is present.
Added I2C code that allows clients to determine if the SD card is present, if there is unflushed data, or if there is an error condition.
Used 8K (half) of the 16K of available SRAM for the receive buffer. OpenLog uses 512 and SDLogger uses 2000 bytes.
Added support for reading a Maxim DS3231 real-time clock chip via I2C. This allows file system timestamped log files and also encoding the date and time in the DOS 8.3 filename. By using the characters A-Z and 0-9 it's possible to encode 16 bits into 4 characters of base 36. So year, month, and day are stored in the first 4 characters and hours, minutes, and seconds are stored in the last 4 characters. For example, 0H0Z0W86.TXT decodes to January 19, 2023 at 7:25:26 pm (local time zone). Note that the FAT file system only allows for even seconds of resolution; there is literally no room to store the odd bit.
Added a script (Renameclass2applog) to rename 8.3 files to a human readable format.
Copyright © 2024, 2025
Craig Leres