Telemetry & Telecommand Stack
COMPLETEDReusable C libraries for packet framing, CRC-16 integrity, and ACK/NACK reliability over XBee, GSM/4G, and LoRa — plus the Python ground-station tools to talk to them.
Why a stack instead of one-off code
Every avionics project needs the same thing: get packets from the vehicle to the ground, intact, over whatever radio the mass and link budgets allow. Rather than rewrite that per project, I built it once as a set of reusable C libraries that our CanSat and Model Rocketry avionics both shipped with.
The protocol layer
The core is transport-agnostic: packet framing with headers, CRC-16 integrity checking, and an ACK/NACK acknowledgment protocol so the ground station knows what arrived and the vehicle knows what to resend. The same packet format runs over three very different physical links — XBee over UART, GSM/4G (EC200U) over UART at 921600 baud, and LoRa over SPI.
On the firmware side, transmission is interrupt-driven and reception runs through DMA, with clean FreeRTOS integration so telemetry never blocks a flight-critical task. The libraries ship with STM32CubeIDE/CubeMX driver templates for rapid bring-up on new boards.
The ground half
A telemetry protocol is only half a system. I wrote the Python ground-station tools that decode, log, and display the packet stream, and a USB-to-TTL test harness that lets us exercise the whole protocol on a bench without any radio in the loop — framing bugs get caught over a wire before they get blamed on RF.
Result
The stack flew on both the CanSat and the Model Rocketry avionics, and its framing and CRC conventions became the team’s house standard for serial protocols.