Describes how to decode data from recieved telemetry. This includes evaluation of temperature, pressure and humidity from measured values or GPS coordinates.
Each frame contains payload consisting of subframes with varying length.
offset (B) | lenght (B) | name | content |
---|---|---|---|
0 | 1 | SUBFRAME_TYPE | Type of subframe ? |
1 | 1 | SUBFRAME_LEN | Length of subframe payload |
2 | 2*SUBFRAME_LEN | SUBFRAME_PAYLOAD | subframe payload |
2*SUBFRAME_LEN+2 | 2 | SUBFRAME_CRC | CRC 16 of subframe payload, polynom = 0x11021 (0x1021 withought leadeing 1) |
SUBFRAME_TYPE | description |
---|---|
0x65 | Calibration and Configuration fragment |
0x69 | Measurement data |
0x67 | GPS data |
0x68 | RADAC (radiation measurement) / O3 (ozone) |
0xff | padding ? |
expected payload length: 32
offset (B) | lenght (B) | name | content | description |
---|---|---|---|---|
0 | 2 | CALIB_FR_NUM | uint16 | frame number, (starts from 1) |
2 | 10 | CALIB_ID | string | 0x20 0x20 + sonde ID (same as on cover) |
12 | 1 | CALIB_STATE_0 | uint8 | 0 - OK; 0x08/0x0A - battery low / battery low, powe off countdown running? |
13 | 1 | CALIB_STATE_1 | uint8 | see table bellow |
14 | 1 | CALIB_UNKNOWN_0 | 0x00 | ??? |
15 | 1 | CALIB_FRAG_NUM | unit8 | callibration and configuration fragment number |
16 | 16 | CALIB_FRAG_DATA | bytes | calibration and configuration data fragment |
TODO: verification needed, possible documentation bug
bit offset | description |
---|---|
(LSB) 0 | start detected (set at the same time as bit 5) |
1 | ??? |
2 | humidity sensor heating: 0 = off, 1 = on |
3 | humidity sensor for measurement: 0 = U1 (CH2), 1 = U2 (CH3) |
4 | set to 1 when current drown from battery is increased by 50mA |
5 | start detected (set at the same time as bit 1) |
6 | ??? |
(MSB) 7 | ??? |
expected payload length: 24
offset (B) | lenght (B) | content | name | description |
---|---|---|---|---|
0 | 3 | int24 | MEAS_T | Temperature sensor (wire at end of stick) |
3 | 3 | int24 | MEAS_U1 | Humidity (remoter to sonde) |
6 | 3 | int24 | MEAS_U2 | Humidity (closer to sonde) |
9 | 3 | int24 | MEAS_REF1 | reference upper bound, increase with temperature (or vice versa, TODO) |
12 | 3 | int24 | MEAS_REF2 | reference upper bound, decrease with temperature (or vice versa, TODO) |
15 | 3 | int24 | MEAS_P | Pressure |
18 | 3 | int24 | MEAS_REF3 | reference lower bound |
21 | 3 | int24 | MEAS_REF4 | reference lower bound |
ref = (MEAS_REF3 + MEAS_REF4) / 2; p_rel = 1.0 / ((MEAS_P - ref) / (MEAS_REF1 - ref) - 0.0655) * 0.9053 + 0.08778; # pressure in hPa P = p_rel * ((((CALIB_COEFF[15] * p_rel + CALIB_COEFF[14]) * p_rel + CALIB_COEFF[13]) * p_rel + CALIB_COEFF[12]) * p_rel + CALIB_COEFF[11]) + CALIB_COEFF[10]; ref4 = MEAS_REF2 - ref; u1_rel = 1.0 / ((MEAS_U1 - ref) / ref4); u2_rel = 1.0 / ((MEAS_U2 - ref) / ref4); # humidity U1 = ( (u1_rel * CALIB_COEFF[43] + CALIB_COEFF[42]) * \ u1_rel + CALIB_COEFF[41]) * u1_rel + ALIB_COEFF[40]; U2 = ( (u2_rel * CALIB_COEFF[53] + CALIB_COEFF[52]) * \ u2_rel + CALIB_COEFF[51]) * u2_rel + CALIB_COEFF[50]; U = max(U1, U2) rt = (1.0 / (CALIB_COEFF[37] - 1.0) + 17.99418) * \ 0.079298 / (((MEAS_T - ref) / ref4) - 0.15791); # temperature °C T = (((( rt * CALIB_COEFF[35] + \ CALIB_COEFF[34]) * rt + \ CALIB_COEFF[33]) * rt + \ CALIB_COEFF[32]) * rt + \ CALIB_COEFF[31]) * rt + \ CALIB_COEFF[30];
expected payload length: 122
offset (B) | lenght (B) | content | description |
---|---|---|---|
0 | 4 | GPS_TIME (int32) | GPS time - ms from week start |
4 | 2 | GPS_BLOB_0 | ???, 4*4 bits |
6 | 8 | GPS_PRN | PRN for each tracked satelite |
14 | 12 | GPS_STAT_1 | signal strength, fix status … |
26 | 96 | GPS_DATA_1 | doppler, pseudorange, … |
List of pseudorange sequence number for each recieving satelite, 0 == no satelite.
12*5 bit - PRN number (x - unused ?)
11100000 x2222211 44433333 x5555544 77766666 x8888877 AAA99999 xBBBBBAA
GPS satelite channel state.
offset (b) | length (b) | description |
---|---|---|
0 | 4 (int4) | signal strength or fix quallity, 0xf == NaN / no signal |
4 | 1 | time fix - set to 1 when time is succesfully obtained from subframe |
5 | 1 | pseudorange fix ??? - pseudorange fix is correlated to time ? |
6 | 1 | pseudorange fix ??? (not corelated to time ?) |
7 | 1 | signal tracking - some signal found at certain frequency |
offset (B) | length (B) | type | description |
---|---|---|---|
0 | 4 | int32/fract32 ? | value in range < -2e6, 0x1400000 ), pseudorange in metters?, 0x7FFFxxxx == NAN |
4 | 3 | int24/fract24 ? | some number, might be signed, not sure, doppler shift? |
7 | 1 | ??? | number, min/max: < -38, 39 > usually -5..10 |
expected payload length: 10
No usefull values available to decipher this frame, have someone something?
offset (B) | length (B) | description |
---|---|---|
0 | 10 | ??? |
ussual content:
0x03 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
expected payload length: 4
This type of frame probably identifies only padding
Calibration data are composed from fragments send in first subframe. Calibration data block is 512B long. Content is identical with data from EEPROM.
- there should be somewhere date/time (GPS send only seconds offset from start of week)
offset (B) | lenght (B) | content | description |
---|---|---|---|
0 | 2 | ??? | ??? (checksum?) |
2 | 2 | unit16 | downlik frequency: f = (400E6 + 10E3*value) Hz upper limit is around 423MHz (value = 0x08FC) |
4 | 2 | uint16 | always 0xffff - kill timmer ? |
6 | 2 | int16 | always 0x0100 - set transmit power to full ? |
??? | |||
22 | 10 | string | probe ID (same as printed on conver, starts with 0x20 0x20) |
??? | |||
64 | 5*x | CALIB_COEFF | calibration coefficients table |
Consist of sequence of repeated fields with following structure:
offset (B) | lenght (B) | context | description |
---|---|---|---|
0 | 1 | uint8 | calibration constant index |
4 | 4 | float32 | calibration constant value |
Example of calibration data
coefficient index row/col (x) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
1x | -366.026 | -43.9063 | 393.234 | -131.314 | 25.6268 | -2.02341 | 0.96 | |
2x | -803.34 | 363.815 | 317.784 | 127.429 | 0.96 | |||
3x | -187.802 | 89.6416 | -26.9122 | 9.15022 | -1.45707 | 0.0868068 | 0.849488 | |
4x (humidity 1) | -1223.17 | 3548.18 | -2646.42 | 588.217 | 0.96 | |||
5x (humidity 2) | -1198.04 | 3497.31 | -2611.15 | 580.153 | 0.96 | |||
6x | 0.0318379 | 0.0374458 | -0.0433925 0.00630527 | |||||
7x | -0.000132316 | 0.000414854 | -0.000402439 6.31402e-05 | |||||
8x | -2.04505e-06 | 1.5662e-067.05777e-07 | ||||||
11x | 0.5227 | -0.0284 | 0.000286 | 8.97e-07 | -1.26e-09 | |||
12x | 1.07573 | -0.204 | 0.009009 | -5.83e-05 | -1.04e-06 | |||
13x | 0.5227 | -0.0284 | 0.000286 | 8.97e-07 | -1.26e-09 | |||
14x | 1.07573 | -0.204 | 0.009009 | -5.83e-05 | -1.04e-06 | |||
15x | 4.75029e-06-5.47494e-08 4.851e-10 -1.736e-12 | 0.7 | ||||||
16x | 0.7 |