ARM Cortex M0+ Atmel SAM D20 E

The board is centred around the Atmel SAM D20 microcontroller. We use the smallest E variant in a QFN-32 package (-M)

The firmware is written in C and can be built using GNU Tools for ARM Embedded Processors See for more details.

From the datasheet we can see there’s a few RAM/ROM size options:

Variant Flash (KBytes) SRAM KBytes
-14 16 KBytes 2 KBytes
-15 32 KBytes 4 KBytes
-16 64 KBytes 8 KBytes
-17 128 KBytes 16 KBytes
-18 256 KBytes 32 KBytes

We’ve been using the -17 variant so far, but may upgrade to the -18 variant if we need more Flash for geofencing or SRAM for backlog.

The SAM D series implements Generic Clocks (GCLKs) which allow us to divide, route and disable clock signals internally as required. These are used particularly for APRS.

Thanks to an error in Revision C silicon we can’t configure the correct pin layout for the SERCOM used to talk to the radio. Currently it’s just being bit-banged as both Mouser and Farnell appear to have bought large quantities of Revision C silicon. TODO: Fix in future board revision??

Global Positioning System ublox MAX-M8C

The MAX-M8C module is used for positioning. The -M8C variant has a 1.65V - 3.6V supply but doesn’t include a RTC crystal. The ARM Cortex communicates over 9600 baud UART using the UBX protocol.

The module is set in flight mode (Platform Model = AIRBOURNE 1G). Whilst the module is capable of receiving two GNSS contellations at once it is set to only receive GPS. This allows the receiver to be set in power save mode (lpMode = 1 in the CFG RXM message). TODO: Update this after experiments with advanced powersave modes

HAB Supplies is a great supplier for this module.

TODO: Photo

Radio Si 4063/60

The tracker uses the Si4063/60 transmitter from Si-Labs, although the Si446x series of transceivers is pin-compatible. With a 1.8V - 3.6V supply and 142 - 1050MHz frequency range this transmitter is ideal.

The Si4060 specifies a max output power of +13dBm, and the Si4063 specifies +20dBm. Thus far we have used the Si4063 on a reduced power setting to give +6dBm of output power as measured by a signal analyser. TODO: More testing to bring the output power up to the +10dBm limit.

For FSK modes (RTTY, Contestia) the radio is set in CW mode and the MODEM_FREQ_OFFSET parameter is used to set the tone. The 16.369MHz clock from the TCXO gives a frequency resolution of 7.8053 Hz in this case.

For AFSK (APRS) the radio is set in 2GFSK mode and the MODEM_FREQ_DEV parameter is used to set the FM deviation. GPIO1 is then used in direct mode as a modulation input. The radio applies a gaussian filter to this square wave which results in an acceptable spectrum. See this ipython notebook for more details on how the MODEM_TX_NCO_MODE parameters are chosen et cetera. (The internal filter is a 17-tap FIR filter that is by default configured as gaussian.)


To program and debug the ARM Cortex we use a Blackmagic Probe. The probe and its source are GPL-licensed and available in the github repository.

You can build your own or buy one online.


Memory 128Mbit SPI Flash

This hasn’t been used for anything yet, and we haven’t even written the drivers. Potentially could be used in future?

Sometimes we don’t populate this.

Here’s the datasheet.

16.369MHz TCXO

We use a temperature controlled oscillator (TXCO) from Epson to provide a clock to both the radio and ARM Cortex.

Epson TXCO

The Pin 1 marker is a perfect circle.

It has a supply voltage of 1.7V - 3.3V. This was one of the harder parts for find for a 1.8V volt supply. The output waveform is specified at 0.8Vpk-pk and in test it’s about 0.9Vpk-pk. This is no problem for the radio but ideally would be higher for the CLKIN pin of the ARM Cortex. We’ve had no problems with a 1.8V supply, but at 3.3V the ARM Cortex never locks on the clock. In this case the USE_XOSC option in firmware can be set false.

The frequency tolerance is given at ±2 parts-per-million (ppm) at 25°C, with ±1 ppm per year aging at 25°C. The temperature range is given at -30°C to 85°C with another ±2 ppm variation over this range. We’ve tested it to -55°C by dropping it unprotected into the jet stream (as you do) and it got rather drifty (10 ppm??) before the board cut out. TODO: Cold chamber testing

GPS Antenna

A 1/4 wave piece of guitar wire is used for the GPS antenna. This has vertical polarisation which means it will be 3dB down compared to a right-hand circularly polarised antenna. However the antenna has such a clear view of the sky that this isn’t an issue. TODO: Good picture

Telemetry Antenna

The telemetry antenna is a 1/4 wave ground plane antenna that is tuned to 434 MHz. It’s built from guitar wire with little bits of kapton tape on the end.

TODO How does this perform on 2 meters for APRS?

TODO: Photo

Hardware Watchdog

Windowed Hardware Watchdog

Radio Filter

5th order Chebyshev

Match Schematic


The tracker transmits Radio Teletype (RTTY).

Contestia 32/1000

The tracker alternately transmits Contestia Mode.


The tracker also transmits Automatic Packet Reporting System (APRS) packets.


The tracker uses geofences to decide which frequencies to operate on etc. APRS transmissions essentially follow this map and this list with exceptions for areas where airboune operation is not permitted.

See this ipython notebook used to automatically generate the C header files used for geofencing.

TODO: Actually test this