D-SAT support added to gr-satellites

D-SAT is an Italian cubesat that will demonstrate a new deorbit hardware. Apparently this system uses dedicated propulsion to make the satellite re-enter from a 500km orbit in 30 minutes. It also carries three more experiments and it was launched in June 23 together with several other small satellites. According to the information from the team, it transmits 4k8 telemetry in the 70cm band. It is not stated explicitly, but we read attentively, we see that it uses a NanoCom U482C transceiver from GOMspace.

Recently, I have seen Mike DK3WN decode very nice images from D-SAT and I have investigated a bit to see what software he is using.

The satellite team provides some decoding software through their forum, which requires registration. Version 2 of their software can be downloaded directly here using the password dsatmission. Its software is based on GNU Radio and it uses a few components from gr-satellites, namely the U482C decoder and some KISS and CSP blocks. These have been incorporated into their decoder from before gr-satellites was restructured. They include a note thanking me in the README, but I didn’t ever hear from them that they were using gr-satellites. It would have been nice if they had contacted me, since this opens up many possibilities for collaboration.

Apart from that, they include a groundstation software which performs telemetry decoding and so on. Unfortunately, the groundstation software is closed-source, distributed only as an x86_64 Linux executable. This is not good for Amateur Radio. We should strive for open source software and open specifications for everything that transmits in our bands. The groundstation software is also distributed in a quite ugly manner as the remains of an Eclipse project (source code stripped, of course). However, it is interesting because it seems that this software is the same they use in their groundstation, and it supports sending commands to the satellite. Naturally, the command transmission is not implemented in the software they distribute, but it is still very interesting to have a peek and see what kinds of commands the satellite supports.

I have added a D-SAT decoder to gr-satellites. The decoder supports sending frames to their groundstation software. Here I describe how to set everything up.

The decoder for D-SAT is a standard U482C decoder, such as the GOMX-1 decoder. The frames are passed to the groundstation using the KISS protocol, with two provisions: First, the endianness of the CSP header needs to be swapped (it seems that it is always a mess to get this right between different implementations). Second, a CRC-32C checksum needs to be appended to the frame before KISS encapsulation. There was already a block to swap the CSP header in gr-satellites. I have added a new block that appends the CRC-32C, using the same Python code that is already being used for checking the CRC-32C checksum in CSP packets that carry it. This is a cleaner implementation than the modifications that the D-SAT team made to the U482C decoder and KISS framer to include these provisions.

The D-SAT decoder in gr-satellites sends the KISS frames by UDP to port 50000 on The groundsation software expects to read the frames from a tty. socat can be used to connect these two by running

socat -d -d pty,raw,echo=0,link=/tmp/kisstty UDP-RECV:50000

After starting socat, one can run the groundstation software. It is not necessary to run any of the install scripts from the D-SAT software distributed by the team, and probably it’s not the wisest idea to do so. It is enough to extract the zip file and go into the folder


Then we can run

bin/GS_SDR/GS_sdr /tmp/kisstty 10

The number 10 here refers to the CSP address of the groundstation (it should be 10, since D-SAT sends CSP frames to address 10).
Note that you will probably first need to give GS_sdr execution permissions using

chmod +x bin/GS_SDR/GS_sdr

Finally, we can run the D-SAT decoder in gr-satellites, which will sends frames to the groundstation software and the groundstation software will decode and print the frames. As a simple test, we can use the sample WAV file in satellite-recordings. Remember that satellite-recordings is distributed as a git submodule inside gr-satellites, although you can also clone it independently.

We can run

cd gr-satellites/apps
grcc -d . dsat.grc

In another terminal, we run

gr-frontends/wav_48kHz.py -f gr-satellites/satellite-recordings/dsat.wav

We should see the frames appear in the gr-satellites decoder and in the groundstation software.

One comment

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.