Decoding MXL Cubesats

Decoding MXL Cubesats with a SDR and Sound-Modem software.

The Michigan Exploration Laboratory (MXL) ground-station software by default wants to connect to a physical TNC. For this connection they use a python based daemon that connects the RS232 TNC interface via a tcp socket on port 12500 to there final ground-station client. This solutions is used with: MCubed, MCubed-2 and GRIFEX.

Many radio amateurs such like myself use a SDR receiver and no longer make use of a  physical TNC and therefor I was looking for an alternative way to use there ground-station software. Well the python part can be swapped with another kiss server like the one that comes with the UZ7HO Sound-Modem or Direwolf (that also runs on Linux) solution.

Below a block diagram with the two different ways to connect the ground-station software.

sound-modem-mxl

For this to work with a SDR solution, one has to do the following:

Alter the MXL ground-station software configuration file

<path>\MCubed2_GS_Client\config.props

radio.1.name=Radio
radio.1.address=localhost
radio.1.port=8100
radio.1.type=KISS
radio.1.tncport=1
client.callsign=(call)
client.id=(call)_GS
server.address=mxlab.engin.umich.edu
server.port=12805

UZ7HO-KissServerUZ7HO, enable the kiss server option and select a ground-station software corresponding port. Select Settings -> Devices -> Server setup. In this example I used port 9100, default is 8100.

After this you can start your favorite SDR program, redirect the audio to the sound-modem software and start the MXL ground-station JAR (Java Archive) for example mcubed2_gs_client.jar when you want to decode MCubed-2.

This information can also be found at the website from JE9PEL: 9k6 decoding

Credits: UZ7HO, VB-Cable, SDR# and MXL

GRIFEX active and decoded

With the help of the recorded IQ file that can be downloaded at the following location, I was able to decode and send a couple of kiss packets to the GRIFEX telemetry server. Below you can see the data decoded by the MXL Ground Station Client.

GRIFEX-GS-client

2015-01-31 17:49:22.300 UTC: [267 Bytes KISS Frame (without CRC)]
   1 > C0 00 96 88 70 A6 A0 A6 60 86 A2 40 40 40 40 E1 03 F0 AB CD 
  21 > 00 00 00 42 03 F5 00 B4 75 16 10 00 00 00 00 1A 00 10 00 06 
  41 > 00 01 00 23 00 37 11 EE 7B C9 71 01 CA CB 00 00 7E 2A 00 00 
  61 > 12 00 1B 00 71 00 00 00 00 28 08 00 00 29 06 21 06 F9 0C 5D 
  81 > 00 27 00 F1 0C B8 0E 0C 00 A5 0E E3 05 47 06 B2 0E 0E 00 63 
 101 > 0D 1C 00 17 00 F9 0C 8B 00 54 00 14 06 63 0D 80 00 F6 0C AF 
 121 > 00 DB DD 00 0E 00 2F 02 0D 00 00 06 01 06 66 0A C4 00 03 0F 
 141 > 41 00 FB 05 FF 05 A8 00 02 00 2A 02 07 00 0D 06 0D 06 97 0A 
 161 > F3 00 2D 0F 53 00 05 06 09 06 01 FC 4E 06 4B 06 4F 06 00 DB 
 181 > DC 1E 00 5A 00 53 FF 65 00 C2 FF 12 00 99 00 AE FF 45 00 E8 
 201 > 00 F6 FF DB DD 00 4A 0B 40 0B 39 0A 27 0A 36 0A 41 0A BE 0A 
 221 > C4 0A 36 06 BE 09 03 00 00 00 88 33 88 33 4C 00 00 00 00 00 
 241 > 00 00 00 E3 03 00 00 01 00 FF FF FF FF FF FF FF FF FF FF FF 
 261 > 24 94 B0 15 1C 40 C0

UZ7HO-kiss-serverI used the UZ7HO G3RUH 1.7 beta sound modem software and enabled the Kiss server on port 9100. After that I configure the config.props file that is part of the MXL Ground Station Client software to use the kiss server port. Below the config.props I used.

Don’t use the tcp to serial option that comes with the GS client software. There is a direct connection between the GS client and UZ7HO via in my example port 9100.

radio.1.name=Radio
radio.1.address=localhost
radio.1.port=9100
radio.1.type=KISS
radio.1.tncport=1

client.callsign=PE0SAT
client.id=PE0SAT_GS
server.address=mxlab.engin.umich.edu
server.port=12805

librap.SID=50
librap.PID=0

api.crafts=https://mxl-ops.engin.umich.edu/api/craft?count=25
api.command=https://mxl-ops.engin.umich.edu/api/commands/
api.raps=https://mxl-ops.engin.umich.edu/api/raps

Good luck decoding GRIFEX with this setup.