Communication with OBC
The UART_3 serial port is used to implement payload communication with OBC. The logic and structure of the communication frame are described below.
Communication frame structure
Communication between the payload and OBC is based on two types of frames: read/write frame and ACK/NACK frame. Read/write frame is used to send or request data. ACK/NACK informs about successful or unsuccessful transaction. There is also one special type of frame - log frame.
Read/write frame
#
Description
Size
Value
1
preambule
5b
0b11010
2
data size
2b
3
read/write flag
1b
0b1-read 0b0-write
4
register address
8b
5
data word 1
16b
6
data word 2
16b
7
data word 3
16b
8
CRC
16b
Data: 16b data words are sent split into 2 bytes in the following order: 1. Least significant byte 2. Most significant byte. CRC: 16b CRC word is sent split in the same way as data words. CRC is calculated from the first 8 bytes, which includes swapped bytes of data words.
ACK/NACK frame
#
Description
Size
Value
1
preambule
5b
0b10101
2
data size
2b
00
3
correct/incorrect
1b
0b1-ok 0b0-not
4
register address
8b
Log frame
#
Description
Size
Value
1
preambule
5b
0b11010
2
data size
2b
0b11
3
read/write flag
1b
0b0
4
log type
8b
0x82-normal log / 0xF8-special log
5
timestamp
16b
6
data id
16b
7
data value
16b
8
CRC
16b
Communication commands logic
Payload commands
Name
Add
Description
Size
Values
REG_ADD_SR_ADCS_COIL_X
66 67
Set PWM of coil X to a given value.
int16
-100 to 100
REG_ADD_SR_ADCS_COIL_Y
68 69
Set PWM of coil Y to a given value.
int16
-100 to 100
REG_ADD_SR_ADCS_PWM
208 209
Confirm setting PWM of coils X and Y to given values.
X: int8
Y: int8
-100 to 100
-100 to 100
REG_ADD_SR_ADCS_STATUS
206
lnform payload OBC about status of SatRevolution detumbling process.
uint16
0 - unknown /in progress 1 - success 2 - error
REG_ADD_ADCS_COIL X_VALUE
160 161
Set in manual mode PWM of coil X to a given value.
int16
-100 to 100
REG_ADD_ADCS_COIL Y_VALUE
162 163
Set in manual mode PWM of coil Y to a given value.
int16
-100 to 100
REG_ADD_ADCS_COIL Z_VALUE
164 165
Set in manual mode PWM of coil Z to a given value.
int16
-100 to 100
REG_ADD_MODE_TIME
180 181
Set the current mode’s timer_1s value to a given value multiplied by the current mode’s timer_prescaler.
uint16
REG_ADD_MODE
178
Set mode with id equal to the given value as the current mode
uint8
0 to 8
REG_ADD_MODE_NEXT
179
Set mode with id equal to the given value as the next mode after current.
uint8
0 to 9
9 - current as next
REG_ADD_LOG1MIN_ CONFIG_ADD_REG
184 185
Add register of given value to the log list in 1min period log mode.
uint16
136 to 255
REG_ADD_LOG1S_ CONFIG_ADD_REG
188 189
Add register of given value to the log list in 1s period log mode.
uint16
136 to 255
REG_ADD_LOG200MS_ CONFIG_ADD_REG
192 193
Add register of given value to the log list in 200ms period log mode.
uint16
136 to 255
REG_ADD_LOG1MIN_ CONFIG_DLT_REG
186 197
Delete register of given value from the log list in 1min period log mode.
uint16
136 to 255 1 - clear list
REG_ADD_LOG1S_ CONFIG_DLT_REG
190 191
Delete register of given value from the log list in 1s period log mode.
uint16
136 to 255 1 - clear list
REG_ADD_LOG200MS_ CONFIG_DLT_REG
194 195
Delete register of given value from the log list in 200ms period log mode.
uint16
136 to 255 1 - clear list
REG_ADD_STOP_LOGS
246 247
Stop or start logging data.
uint16
0 - START
1 - STOP
REG_ADD_SPECIAL_ LOG_BUFF
254 255
Inform whether the special log buffer is full. If so - log to normal buffer.
uint16
0 - FULL 1 - NOT FULL
Setting calibration parameters
To set any of constant parameters in the equations mentioned above, there is a need to define the address and value of the designated coefficient. This is done by writing the following registers:
REG_ADD_FLASH_CONFIG_PARAM_<ID> - ID of the parameter from the table below
REG_ADD_FLASH_CONFIG_VALUE_<1 or 2> - float value of the parameter
Param ID
Description
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Logging logic
By default, payload logs data by sending log frames with log type 0x82 (normal log). There is also a second log type 0xF8 (special log) used in modes: Diagnostic, Detumbling and F.R.W. experiment. Special logs are high value data and are stored in non-shift buffer. The attached sheet describes the logged data and its frequency in every mode.
KRAKsat OBC has implemented logic, which supports the storage of various types of logs. Logs are stored in different memory spaces depending on their type and memory space availability.
Last updated