Communication specification
Technical specification
Hardware
KRAKsat is equipped with two hardware redundant UHF transceivers - parts of SR-NANO-BUS platform.
Frequency
KRAKsat was assigned coordinated frequency for up- and downlink 435.500 MHz with emission designator 25K0D1D and EIRP 32 dBm. Downlink modulation is AFSK 1200bps and uplink is 2GFSK 9600bps. Satellite callsign is SR9KRA.
Downlink
KRAKsat downlink communication can be one of three types:
beacon - emitted every 15 minutes
commands responses - specific to uplink type
payload logs transmission - on request, encoded in Base91
SR-NANO-BUS downlink can be distinguished by their frames format. Data transceived by UHF1 is decoded as APRS message (with a hardcoded callsign), while data from UHF2 contains frame in APRS telemetry format (without a callsign).
Beacon
Beacon is emitted every 15 minutes by SR-NANO-BUS platform OBC. It consists of 8 frames, sent one by one from both radios. Beacon frames are ASCII strings, terminated by \0, containing information about the status of crucial components.
Beacon frame
Frame name | Frame value | |
1 | Satellite status | M1;STS;[User Flags (32-bit value)] |
2 | Master status | M1;LOG;[Timestamp];[Boot nr];[CPU voltage];[CPU temperature] |
3 | UHF1 Status | U1;RL;[Timestamp],[CPU voltage];[Battery voltage];[CPU temperature];[Amplifier temperature] |
4 | UHF1 Modem Status | U1;MS;[Timestamp];[Current RSSI];[Latch RSSI];[Afc frequency offset] |
5 | UHF2 Status | U2;RL;[Timestamp],[CPU voltage];[Battery voltage];[CPU temperature];[Amplifier temperature] |
6 | UHF2 Modem Status | U2;MS;[Timestamp];[Current RSSI];[Latch RSSI];[Afc frequency offset] |
7 | ADCS Flags Status | A1;FLAGS;[Fault] [Flags1] [Flags2] [Accelerometer temperature] [Magnetometer temperature] |
8 | Payload status | PL;STATUS;[Payload status as decimal number] |
Data from frames 1-7 of the beacon status are calculated in SR-NANO-BUS platform OBC. Frame 8 with payload status is prepared in the payload software and updated every minute.
Beacon's first line, master status (M1;STS) is not properly implemented in SR-NANO-BUS platform, so data from 32-bit flags aren't generated correctly.
Payload status
Parameter | Bits | Comment |
MODE | 0, 1, 2 | |
NEXT MODE | 3, 4, 5 | |
µC VOLTAGE | 6, 7 | 0 - correct 1 - too big > 3.7V 2 - too small < 3.0V |
SATELLITE VOLTAGE | 8, 9 | 0 - correct 1 - too big > 9.5V 2 - too small < 9.5V |
GYROSCOPE | 10 | 0 - correct 1 - error |
MAGNETOMETER | 11 | 0 - correct 1 - error |
IMU TEMPERATURE | 12 | 0 - correct 1 - error |
EXPERIMENT TEMPERATURE | 13 | 0 - correct 1 - error |
UNUSED (2 zeros) | 14, 15 |
Mode and Next mode values in beacon payload status were encoded as 3-bit numbers while having 9 possible values. This software error caused inability to properly distinguish the current payload state.
Commands responses
Every uplink command has a defined command response, based on which the operator knows if the request was successfully received.
Command | Action | Response |
ADCS_LOGS_ASCII_GET | Get ADCS FLAGS | A1;FLAGS;[fault] [flags1] [flags2] [acc temperature] [mag temperature] |
AOCS_ADCS_CONTROL_FLAGS_SET | Set ADCS control flags | |
BROADCAST_TIMESTAMP_SET | Set the current timestamp on the satellite modules | M1; TS; [number of platform's boot]; [timestamp set]; [set value] |
BROADCAST_DEV_RESET | Reboot the satellite | |
MASTER_CLEAN_PLAN | Clear the planner | M1;TSK;CLEAN_PLAN |
MASTER_CMD_DOWNLINK_S | Enable/disable downlink for chosen radio | M1;DWN;154;0;1. |
MASTER_FLASH_BLOCK_ERASE | Erase sector (64kB) of FLASH data from the given address (independent of buffers) | FLASH BLOCK ERASE STATUS;[address];[status] |
MASTER_FLASH_SECTOR_ERASE | Erase the sector (4kB) of FLASH data from the given address (independent of buffers) | FLASH SECTOR ERASE STATUS;[address];[status] |
MASTER_GET_NR_OF_TASKS | Return the current number of tasks in the planner | M1;TSK;LEN;[amount of tasks] |
MASTER_GET_PLAN_G | Return information about the Mission Planner status | M1; TSK; [task number]; [time of planned execution]; [destination module]; [command] |
MASTER_LOG_G | Get timestamp, boot number, CPU voltage and temperature | M1;LOG;[TS];[Boot nr];[CPU voltage];[CPU temperature] |
MASTER_LOGGER_INFO | Information about the normal buffer | FL; [full buffer]; [amount of used space]; [start of data address]; [end of data address] |
MASTER_LOGGER_POP | Remove a given amount of data from the normal buffer, along with the offset of the data origin address | FL; [full buffer]; [amount of used space]; [start of data address]; [end of data address] |
MASTER_PAYLOAD_STATUS | Return the last received payload status | PL;STATUS;[payload status] |
MASTER_PL_ADCS_COIL_X_VAL | Set PWM duty for X magnetorquer in manual mode | |
MASTER_PL_ADCS_COIL_Y_VAL | Set PWM duty for Y magnetorquer in manual mode | |
MASTER_PL_ADCS_COIL_Z_VAL | Set PWM duty for Z magnetorquer in manual mode | |
MASTER_PL_ADCS_COILS_ALL | Set PWM duty for all magnetorquers in manual mode | |
MASTER_PL_ADCS_CONFIG_K_X | Set the gain for detumbling the X axis | |
MASTER_PL_ADCS_CONFIG_K_Y | Set the gain for detumbling the Y axis | |
MASTER_PL_ADCS_CONFIG_K_Z | Set the gain for detumbling the Z axis | |
MASTER_PL_ADCS_MAX_DUTY_ALL | Set max PWM duty for all magnetorquers | |
MASTER_PL_ADCS_MAX_DUTY_X | Set max PWM duty for X magnetorquer | |
MASTER_PL_ADCS_MAX_DUTY_Y | Set max PWM duty for Y magnetorquer | |
MASTER_PL_ADCS_MAX_DUTY_Z | Set max PWM duty for Z magnetorquer | |
MASTER_PL_CALIBRATION_CONFIG | Set configuration param - config param ID - config param | |
MASTER_PL_DISABLE | Turn off the payload power supply | |
MASTER_PL_ENABLE | Turn on the payload power supply | |
MASTER_PL_EXP_ACC_TIME | Set experiment acceleration time | |
MASTER_PL_EXP_END_PERIOD | Set experiment end period | |
MASTER_PL_EXP_MODE | Set experiment parameters: -experiment mode -experiment duty | |
MASTER_PL_EXP_PARAMS1 | Set experiment parameters: - Experiment mode - Experiment duty - Experiment period - Experiment PWM frequency - Experiment PWM duty | |
MASTER_PL_EXP_PARAMS2 | Set experiment parameters: - Experiment starting period - Experiment end period - Experiment acceleration time | |
MASTER_PL_EXP_PERIOD | Set experiment period | |
MASTER_PL_EXP_PWM | Set experiment parameters: - experiment PWN frequency -experiment PWM duty | |
MASTER_PL_EXP_START_PERIOD | Set experiment starting period | |
MASTER_PL_FRW_LIST_ARG | Set experiment add list element | |
MASTER_PL_FRW_MAX_DUTY | Set the max PWM duty for FRW electromagnets | |
MASTER_PL_GO_IDLE | Set payload to IDLE mode | |
MASTER_PL_LOG1MIN_CONFIG _ADD_REG | Provide address of registers that are assigned to the log with a period of 1 min (add) | |
MASTER_PL_LOG1MIN_CONFIG _DELETE_REG | Provide address of registers that are no more assigned to the log with a period of 1 min (delete) | |
MASTER_PL_LOG1S_CONFIG _ADD_REG | Provide address of registers that are assigned to log with a period of 1000 ms (add) | |
MASTER_PL_LOG1S_CONFIG _DELETE_REG | Provide address of registers that are no more assigned to the log with a period of 1000 ms (delete) | |
MASTER_PL_LOG200MS_CONFIG _ADD_REG | Provide address of registers that are assigned to the log with a period of 200 ms (add) | |
MASTER_PL_LOG200MS_CONFIG _DELETE_REG | Provide address of registers that are no more assigned to the log with a period of 200ms (delete) | |
MASTER_PL_MODE_CONFIG | Set payload mode with parameters: -current mode -next mode -time for mode | |
MASTER_PL_WAKE_UP | Wake up payload from IDLE mode | |
MASTER_SPECIAL_LOGGER_INFO | Information about the special buffer | FSL; [full buffer]; [amount of used space]; [start of data address]; [end of data address] |
MASTER_SPECIAL_LOGGER_POP | Remove a given amount of data from the special buffer, along with the offset of the data origin address | FSL; [full buffer]; [amount of used space]; [start of data address]; [end of data address] |
MASTER_TIMESTAMP_GET | Get current timestamp from the satellite | M1;TG;[platforms boot amount]; [timestamp get] |
MASTER_TRANS_END_FAIL | End of transaction - failure (no indicator shift) | PL;FINISH;sent = [address of the indicator];transaction FAIL |
MASTER_TRANS_END_SUCCESS | End of transaction - success (indicator moved by the amount of data transferred) | PL; FINISH; sent = [address of the indicator], transaction SUCCESS |
MASTER_TRANS_GET_CURRENT_ADDR | Information about the address of the indicator for the current transaction | PL; CURRENT ADDR = [address of the indicator] |
MASTER_TRANS_SEND_1KB_LOG | Launch of a 1kB downlink | PL; [number 1kB part]; [chunk number]; [number of chunks]; [data] PL; INFO; WAITING FOR RETRANSMISSION REQUESTS PL; INFO; NO TRANSACTION IN PROGRESS |
MASTER_TRANS_SEND_1KB_RETRY | Start the retransmission of a given data range within a part (1kB) | PL; R; [part number]; [chunk number]; [data] PL; RET; [part number]; [number of chunks]; 1kB retransmission done PL; INFO; NO TRANSACTION IN PROGRESS |
MASTER_TRANS_SEND_NUM_PARTS | Initialization of a new transaction | PL;NOP;[timestamp];[number of parts in the transaction] |
MASTER_TRANS_SET_ADDR | Set the address of the indicator for the current transaction | PL; TRANS START ADDR = [address of the indicator] |
MASTER_TRANS_SET_CHUNKSIZE | Set the size of a single data chunk in the current transaction | |
MASTER_TRANS_SET_DATASIZE | Set the amount of data to be sent in the current transaction | |
MASTER_TRANS_SET_DEFAULT | Set the default transaction parameters | |
MASTER_TRANS_SET_NORMAL_DATA _START_ADDR | Set the normal transaction rate to the beginning address of the data in the normal buffer | |
MASTER_TRANS_SET_PARTSIZE | Set the size of a single piece of data in the current transaction | |
MASTER_TRANS_SET_SPECIAL_DATA _START_ADDR | Set the special transaction rate to the beginning address of the data in the special buffer | |
UHF_CHANNEL_RX_G | Get current frequency | U1;CH;[timestamp];[current channel] |
UHF_CHANNEL_TX_G | Get current frequency | U1;CH;[timestamp];[current channel] |
UHF_FEC_G | Read FEC flag | U1;FEC;[fec flag] |
UHF_FEC_S | Set FEC flag (valid only for binary data sent through UHF) | U1;FEC;[fec flag] |
UHF_LOG_G | Get battery voltage | [U1;RL;[timestamp],[3V3 bus voltage];[12V bus voltage];[RF amp temp];[MCU temp] ] |
UHF_MODEM_STAT_G | Get radio data | [U1;MS;[timestamp];[current RSSI];[latched RSSI];[automatic frequency control offset] ] |
UHF1_ECHO | Send an echo | 48byte ASCII STRING |
UHF2_ECHO | Send an echo | 48byte ASCII STRING |
SR-NANO-BUS platform contains IMU sensors for ADCS (gyroscope and magnetometer) but because of a software bug, IMU data can't be transmitted. It's connected with the fact that instead of being sent as ASCII, frames with IMU data are binary. '\0' sign that is used in APRS as the end of line can be anywhere in ADCS data, so if it's somewhere at the beginning, all the data behind won't be copied to AX.25 frame and transmitted.
Payload logs transmission on request
Payload logs are saved in the flash memory, part of SR-NANO-BUS platform. There is no special way of handling data e.g. filesystem - every new binary frame is just put into the first free memory address, depending on the payload mode (as described in logging logic).
Flash memory | Special | Normal |
INFO | 0x0 | 0x1000 |
CAPACITY | 6MB - 16KB | 2MB - 16KB |
START | 0x 20 00 | 0x60 00 00 |
END | 0x 5F E0 00 | 0x 7F C0 00 |
Payload log frame
Every log frame contains 6 bytes of information - relative timestamp, register address (key) and register value. Its available parameters and logging interval are specific to the current payload mode. All log frames are prepared in the payload software and transmitted to the OBC as described in Logging logic chapter.
Log frame info | Size |
Relative timestamp | 2B |
Register address | 2B |
Register value | 2B |
Payload log frames downlink
Log frames downlink is accomplished in form of a transaction. First, the transaction has to be initialized and a chosen address set. After that, 1 KB of logs can be downloaded. A part of data consists of chunks (typically 35-38 of them), numbered and encoded in Base91. Base91 algorithm used by SR-NANO-BUS platform is so-called rlyeh's modification.
Although UHF1 and UHF2 from SR-NANO-BUS are hardware redundant, their software has some differences. The biggest difference manifests itself in the fact that logs transmission can be provided only using UHF1. UHF2 can never transmit log frames.
Example of payload logs (1 kB)
Last updated