Phoenix frames decoding

We are operating in mode 6.

1 Like

I see. Just having a thread of which observations have demodulated frames would work just fine! It’s just difficult to tell from the waterfalls sometimes. A lot of the waterfalls look to me like they are displaying QARMAN packets at an interval of 2 minutes.

Thank you for the object clarification as well. We don’t have a qualitative value on what the spacing between cubesats needs to be before the Doppler shift starts to affect the success of establishing two-way communication with Phoenix.

1 Like

PHOENIX RAW Telemetry, Interval 30 sec:

2020-03-29 12:56:19.260 UTC: [78 Bytes KISS Frame (without CRC)]
1 > C0 00 57 4A 32 58 4F 59 00 4B 49 4F 4F 37 59 00 03 00 CA A7
21 > DB DC 00 FF E0 FF E1 00 00 00 00 00 00 00 04 00 00 00 16 00
41 > 00 00 E8 00 00 01 46 02 C3 21 00 00 00 01 B9 FC BB D2 FF 8C
61 > 00 00 01 C5 FC 00 04 EE B6 00 35 75 B0 00 55 B6 85 C0
А.WJ2XOY.KIOO7Y…КЫЬ.яаяб…и…F.Г!..№ь>Тя_…Еь…о.5u°.U:А

3 Likes

@sarah_srogers this is a KISS frame - remember to “unkiss” before interpreting!

Thanks @EU1SAT Vlad! You are also welcome to push frames int db.satnogs.org via SiDS. Let me know if you would need some help with that! :slight_smile:

2 Likes

Thanks so much for alerting us of this, Vlad! I’ve decoded the packet, and it appears that we have managed to turn on the AX100’s auto hk beacon. I’ve posted this below

Removing the AX.25 header and the KISS wrapping, this packet is decoded as follows:

CSP Header: CA A7 DB DC 00 --> actually CA A7 C0 00 due to KISS framing protocol

Decoding the CSP header tells us this packet comes from node 5, port 0 - ax100 control port, which is also used for sending out telemetry packets.

Data portion:

FF E0 - board temp = 65504 --> 65.504 degC (note: at our AFT range, expected from models max allowable temp = 85C)

FF E1 - PA temp = 65504 --> 65.505 degC

00 00 - last rssi = 0 (common value)

00 00 - last rferr = 0 (common value)

00 00 00 04 - tx_count = 4 (count since reboot)

00 00 00 16 - rx_count = 22

00 00 00 E8 - tx_bytes = 232

00 00 01 46 - rx_bytes = 326

02 - active_conf = 2

C3 21 - boot_count = 49953 (lol)

00 00 00 01 - boot cause = 1

B9 FC BB D2 - last_contact = 3120348114 (timestamp of last valid packet)

FF 8C = bgnd_rssi = -116 (using 2’s complement, common value)

00 = tx_duty = 0 (total tx duty time since reboot, common)

00 01 C5 FC - tot_tx_count = 116220 (expect to be high)

00 04 EE B6 - tot_rx_count = 323254

00 35 75 B0 - tot_tx_bytes = 3503536

00 55 B6 85 - tot_rx_bytes = 5617285

This is an excellent first step for us. We haven’t managed to establish contact with our OBC yet, but hopefully this is a step in the right direction.

2 Likes

I’ll try to update the decoder - a proper doc would be a lot easier to do so! :crazy_face:

2 Likes

Absolutely. Here you go!
AX100 telemetry decoder cheat sheet.pdf (197.1 KB)

If you need me to add anything else to this, just let me know

3 Likes

I’ve just updated the decoder. Need to do some testing and it will be available soon!
One question: Is it possible to serve a mapping table of nodes and ports? It’s just to make the decoder represent a good reference without inventing new names for the nodes and ports.

$ decode_frame Asuphoenix ../sampledata/asu_phoenix/eu1sat_01.bin 
{
    "dest_callsign": "WJ2XOY",
    "dest_ssid": 0,
    "src_callsign": "KIOO7Y",
    "src_ssid": 0,
    "ctl": 3,
    "pid": 0,
    "raw_csp_header": 3399991296,
    "priority": 3,
    "source": 5,
    "destination": 10,
    "destination_port": 31,
    "source_port": 0,
    "reserved": 0,
    "hmac": 0,
    "xtea": 0,
    "rdp": 0,
    "crc": 0,
    "temp_brd": -32,
    "temp_pa": -31,
    "last_rssi": 0,
    "last_rferr": 0,
    "tx_count": 4,
    "rx_count": 22,
    "tx_bytes": 232,
    "rx_bytes": 326,
    "active_conf": 2,
    "boot_count": 49953,
    "boot_cause": 1,
    "last_contact": 3120348114,
    "bgnd_rssi": -116,
    "tx_duty": 0,
    "tot_tx_count": 116220,
    "tot_rx_count": 323254,
    "tot_tx_bytes": 3503536,
    "tot_rx_bytes": 5617285
}
4 Likes

Sure! I’ve summarized the nodes below:

  • AX100 - Node 5
  • OBC - node 2
  • Ground station - node 10

The ports can be mapped based on the following image

3 Likes

Great, and what about the port mapping of the OBC?

the port mapping for ports 0-6 is the same for the OBC

1 Like

The same as 0 to 6 are equal or “the same as for ax100 mapping”?

This mapping is essential, as seen in this tweet:

Ah. Sorry, let me rephrase my response.
the OBC has 7 reserved ports (ports 0-6). The port mapping for ports 0-6 on the OBC is the same as the port mapping for ports 0-6 on the AX100.

Does that make more sense?

1 Like

Indeed it does! Port 0 of the OBC is the control port of the OBC following this!

1 Like

The packets seen by Bob in the tweet you posted show data coming from Node 5 (the AX100) and port #7 (the RPARAM port, which is the port we use for sending commands to change and save variables).

Hm, that would be the 8th port :wink:

@sarah_srogers is that assumption from above correct? I would like to finish work on that :crazy_face:

I was referring to the RPARAM port, which is port #7, but the 8th line in the csp port list.

I’ve decoded the CSP header from the packet posted in the above twitter link, for clarification.

0a a3 c7 01
00 - prio = 0
00101 - source node = 5 (AX100)
01010 - dest. node = 10 (ground)
001111 - dest port = 15
000111 - source port = 7 (RPARAM Port)
0000 = reserved.
0001 - flags = CRC only

Now: we are talking about port 7, which is also the same!? There are 8 reserved ports? What about the rest? Is there more to expect?

Sorry for being detailed on this, but deploying a new decoder takes time each time.

No worries. Sorry for the confusion here. There isn’t a handy table in any of gomspace’s manuals that I can use for clear illustration. There are just statements sprinkled throughout the manual. I looked through the code to get a clearer picture of how the obc directs data to the various ports when it processes a CSP packet as well as on other definitions set within the software. Based on this, I’ve outlined the OBC 's reserved ports below:

Port Name
0 — CSP_CMP
1 — CSP_PING
2 — CSP_PS
3 — CSP_MEMFREE
4 — CSP_REBOOT
5 — CSP_BUFF_FREE
6 — CSP_UPTIME
7 — AX100_RPARAM
9 — A3200_PORT_FTP
18 — A3200_PORT_FP
21 — A3200_PORT_HK

Any other ports are arbitrarily chosen to establish a connection. I hope this helps, but if I can clarify anything else here, please let me know!

2 Likes