Serial (RS232) Protocol

Updated on Mar 4, 2026

115200 Baud, no parity, 8 data bits, 1 stop bit

Message format: 

$VBOX3i_nnnn0000_stttaaaaoooovvhheeezzyyxxffffjjjj1111222233334444lpddddddqqrrii77778888kkmmmgggg559966cc

The $VBOX3i and commas are in ASCII, the rest is in binary.
 

Although not all of the channels listed below are present in the serial stream unless selected in VBOX Setup software, the table shows the order in which they appear in the data stream

Enter first 4 bytes (nnnn) as 8 characters of hexadecimal:  

 

FormatBytesDescriptionnnnn, bit mask.
nnnn4Reservedto indicate channel presence
00004Reserved
sInteger1SatellitesNumber of satellites0x00000001
tttInteger3TimeNumber of 10 ms ticks since midnight UTC0x00000002
aaaaSigned4Latitude(MMMM.MMMMM * 100_000)Signed Integer of Decimal minutes *100_000.Positive = North, Negative = South0x00000004
ooooSigned4Longitude(MMMMM.MMMMM * 100_000)Signed Integer of Decimal minutes *100_000.Positive = West, Negative = East0x00000008
vvInteger2VelocityVelocity in Knots * 1000x00000010
hhInteger2HeadingDegrees from true north * 1000x00000020
eeeInteger3HeightAltitude. In metres WGS84 * 100True signed 24 bit number0x00000040
zzSigned2Vertical VelocityVertical velocity in m/s * 1000x00000080
yySigned2Lat acc (GPS)Lateral acceleration in g * 1000x00000100
xxSigned2Long acc (GPS)Longitudinal acceleration in g * 1000x00000200
ffffInteger4Brake Distance(m *12800)0x00000400
jjjjInteger4Distance(m *12800)0x00000800
1111Float4Internal analogue ch10x00001000
2222Float4Internal analogue ch20x00002000
3333Float4Internal analogue ch30x00004000
4444Float4Internal analogue ch40x00008000
lInteger1GLONASS satellitesNumber of GLONASS satellites0x00010000
pInteger1GPS satellitesNumber of GPS satellites0x00020000
dd2Reserved0x00040000
dd2Reserved0x00080000
dd2Reserved0x00100000
qqInteger2VBOX Serial Number0x00200000
rrInteger2Kalman Filter Status0x00400000
iiInteger2Solution Type0x00800000
7777Integer4Velocity Qualitykm/h * 1000x01000000
8888Signed4Internal Temperature0x02000000
kkInteger2CF Buffer size0x04000000
mmmInteger3RAM AddressFree space on CF *980991 = Full, 0 = Empty0x08000000
ggggFloat4Event time 10x10000000
55Float2Event time 20x20000000
99Integer2Battery 1 Voltage0x40000000
66Integer2Battery 2 Voltage0x80000000
cc2Checksum
CRC of message, See Note 1*

Note: ffff - Brake Distance: After the initial trigger activation, any new trigger activations within 2 seconds are ignored. After 2 seconds, if speed >2.7 km/h, new trigger input will reset the Brake Distance counter.

When CAN channels are also selected to be present in the Serial data stream the data stream will look like the following:

$VBOX3i_nnnn0000_stttaaaaoooovvhheeezzmmmggggcc$NEWCAN_####_1111.....WWWWXX

$NEWCAN_####_1111.....WWWWXX  is the additional CAN channel information to the serial data stream.

The XX is a two byte checksum. - This is the same format as before see NOTE 1 below

The format for the serial string is $NEWCAN_####_1111.....WWWWXX

Where #### is a 32-bit value, representing the number of bytes to follow.
 

The order in which the data will come across depends upon the order in which you select the channels from the set-up screen. For example if the first channel you choose to log is FIM Channel 1 then the first 4 bytes will contain the data from the FIM. If the second channel was ADC02 Channel4 then the next 4 bytes will contain data for the ADC02. If you then remove (choose not to log) FIM Channel 1 and select ADC02 Channel 1 then the first 4 bytes will now contain the data for ADC02 Channel 1.
 

The data transmitted for each channel is in a standard IEEE 32 bit Float  format.
 

BytesDescriptionBit mask
ffff4CAN channel 150x7FFF
$NEWCAN7String header
####4Reserved to indicate channel presence
,1comma separator
11114CAN channel 10x1
22224CAN channel 20x3
33334CAN channel 30x7
44444CAN channel 40xF
55554CAN channel 50x1F
66664CAN channel 60x3F
77774CAN channel 70x7F
88884CAN channel 80xFF
99994CAN channel 90x1FF
aaaa4CAN channel 100x3FF
bbbb4CAN channel 110x7FF
cccc4CAN channel 120xFFF
dddd4CAN channel 130x1FFF
eeee4CAN channel 140x3FFF
,1comma separator
gggg4CAN channel 160xFFFF
hhhh4CAN channel 170x1FFFF
iiii4CAN channel 180x3FFFF
jjjj4CAN channel 190x7FFFF
kkkk4CAN channel 200xFFFFF
llll4CAN channel 210x1FFFFF
mmmm4CAN channel 220x3FFFFF
nnnn4CAN channel 230x7FFFFF
oooo4CAN channel 240xFFFFFF
pppp4CAN channel 250x1FFFFFF
qqqq4CAN channel 260x3FFFFFF
rrrr4CAN channel 270x7FFFFFF
ssss4CAN channel 280xFFFFFFF
tttt4CAN channel 290x1FFFFFFF
uuuu4CAN channel 300x3FFFFFFF
vvvv4CAN channel 310x7FFFFFFF
wwww4CAN channel 320xFFFFFFFF
ZZ2Checksum

The bit pattern b1b2b3...b9b10b11...b32  of a word in a 32-bit machine represents the real number
 

(-1)s x 2e-127 x (1.f)2

where s = b1,  e = (b2...b9)2, and f = b10b11...b32.  
 

VB3i11

Note that only the fraction from the normalized mantissa is stored and so there is a hidden bit and the mantissa is actually represented by 24 binary digits.

Example of the Fraction part of the calculation the 23 bits 01110111100110110011110 would be come 1. 01110111100110110011110
 

The 23 bits after the 1. represent the presence of the binary weighted fractions _½, ¼, 1/8, 1/16, 1/32_1/64 etc.

*Note 1

CRC Calculation example :

s[n] is a string containing the message

Polynomial:= 4129

CRC:=0;

for Loop:=1 to Length(s) do

begin

Temp:=s[Loop];

CRC:= CRC xor (integer(Temp) * 256);

CRC:= CRC mod 65536;

for i:=7 downto 0 do

begin

if ( (CRC and 32768)=32768) then

begin

CRC:= CRC *2 ;

CRC:= CRC xor Polynomial;

end

else

begin

CRC:= CRC *2 ;

end;

CRC:=CRC mod 65536;

end;

end;

result:=CRC;