m20-custom-firmware/README.md

6.7 KiB

m20-custom-firmware

The goal of the project is to reverse engineer the Meteomodem M20 radiosonde and build custom firmware for it for use in ham radio baloons and the Horus Binary V2 radio protocol.

Code

The code is writen in C using STM32CubeMX and Low Layer (LL) libraries and compiled using arm-none-eabi toolchain. Now fits into the original STM32L051R6T6 chip.

Stage

In this state the code works to the point where it gets GPS data and sends it using Horus Binary over radio. However this code is currently highly experimental and will probably not yet work correctly in the intended application.

What works

  • GPS (NMEA): ✔️
  • GPS (XM1110) ✔️
  • Radio: ✔️
  • Uart: ✔️
  • Outside temperature sensor:
  • LPS22 barometer + temp sensor: (to be done soon)
  • humidity sensor:

Authors

  • Paweł SQ2IPS
  • Jędrzej SQ2DK

License

See LICENSE

Images

alt text alt text alt text

Schematics

Great pcb reverse enginering work was made by joyel24, PDF link (although there are some errors in it)

Used libraries

GPS

There are 2 variants of GPS modules, both of them are supported.

New GPS (NMEA)

In newer M20 sondes u-blox MAX-M10M that uses NMEA protocol.

alt text

Old GPS (XM1110)

In older M20 sondes XM1110 GPS module was used. It transmits data over UART but with custom firmware that transmits only binary protocol data.

alt text Data format:

alt text

Barometer and temp sensor

LPS22HB sensor is used with SPI interface. File lps22hb.c and lps22hb.c are a library for this sensor.

Radio

TODO

Running the firmware

First you need to obtain the code, you can do it with git:

git clone https://github.com/sq2ips/m20-custom-firmware.git

From github website "code" button. Or directly from here, and the unzip the file.

Configuration

Before building the firmware you fist need to configure parameters located in the config.h file. TODO description

Building the firmware

Beofere flashing the firmware you need to build it first, there are a few ways you can do it depending on the platform:

Building directly on Linux

To build directly on linux you need the arm-none-eabi toolchain, you can install it from your package manager depending on the linux distro. For example, on Debian it will look like this:

sudo apt install gcc-arm-none-eabi

WARNING: in difrent distros version of the toolchain can varry and result in a too big result file

Another way that avoids this problem is downloading the toolchain from here. After downloading you need to extract it:

tar -xvf arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz

and install the binaries into your system:

sudo cp arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi/bin/* /usr/local/bin/

You will also need make to build.

sudo apt install make

After installing everything you can go into the directory where you do downloaded the code, then:

cd m20

And now you can make the firmware:

make

After succesful building you should see a memoy usage table like this:

alt text

Building with Docker on Linux

First you need to get Docker, you can install it from your package manager depending on the linux distro. For example, on Debian it will look like this:

sudo apt install docker

Then you need to add your user into the docker group like so:

sudo groupadd docker && sudo usermod -aG docker $USER

Now you need to start the docker daemon:

sudo systemctl start docker

But you will need to do it again after reboot of your computer, you can set it to autostart:

sudo systemctl enable docker

Now you should into the directory of the downloaded code, then:

cd m20

And now build the Docker image:

docker build -t m20 .

It will need some time to download an install the packages, after it finishes run:

docker run --rm -v .:/opt/m20 m20:latest

It will build the code and after finishing you should see a memory usage table just like in the previous method.

Building with Docker on Windows

Building with WSL on Windows (TODO)

Flashing the firmware

Connecting

Before flashing you first need to connect the sonde to your computer through the ST-LINK programmer. You can do it using 5 goldpin cables. This is the sonde pinout:

alt text

Follow it and the pinout of the programmer printed on the case. After connecting it and the programmer to your USB port you are now ready to flash the firmware.

Flashing on Linux

For flashing you will need the OpenOCD you can install it from your package manager depending on the linux distro. For example, on Debian it will look like this:

sudo apt install openocd

After installing it and ensuring that you are in the m20 directory you first need to remove the write protection (only before the first flash):

make protection

or if you don't have make or want to run it directly:

openocd -f ./openocd_m20.cfg -c "init; halt; flash protect 0 0 7 reset; exit"

After it finishes you can flash the build firmware:

make flash

or directly

openocd -f ./openocd_m20.cfg -c "program build/m20.elf verify reset exit"

After it finishes your sonde should now work with the new firmware.

Debuging (TODO)