Awesome
tachograph_d8
Tachograph D8 serial output interpreter for VDO
and Stoneridge
models. Code was designed for PIC24
but can be adapted to any controller. Make sure you setup an interrupt-based UART driver which calls the notification functions from the tacho
module. FRAM
, J1939
and FMI
parts can be removed.
Stoneridge
specs can be found at this link.
I was unable to find specs for the VDO
tachograph so an attempt at reverse engineering the frame was made.
VDO frame interpretation
Frame arrival period = ~1 second
Frame length (bytes)
106 - both cards inserted
88 - 1 card
70 - no card
Content
----------------------
Frame start
----------------------
Byte[0] - 0x55 - U # sync byte (for autobaud?)
Byte[1] - 0x44 - D # device name
Byte[2] - 0x54 - T # -
Byte[3] - 0x43 - C # -
Byte[4] - 0x4F - O # -
Byte[5] - 0x00 - '0' # reserved? (zero)
----------------------
Time info
----------------------
Byte[6] - 0xAC - '172' # UTC seconds (0.25sec/bit) [0-236]
Byte[7] - 0x1E - '30' # UTC minutes
Byte[8] - 0x0D - \r # UTC hours
Byte[9] - 0x08 - '8' # month
Byte[10] - 0x47 - G '71' # day (0.25day/bit) - value of 0 is null (day 1 starts at 0.25)
Byte[11] - 0x20 - ' ' '32' # year (1985 offset)
Byte[12] - 0x7D - } '125' # local minute offset (1 min/bit and -125 min offset)
Byte[13] - 0x80 - '128' # local hour offset ( 1 h/bit and -125 h offset)
----------------------
Driver info
----------------------
Byte[14] - 0x0A - \n '10' # driver 1&2 working state + vehicle motion? (ex. 01 011 011)
Byte[15] - 0x00 - '0' # overspeed & driver 1 time rel states (0x40) (0x41)
Byte[16] - 0xC0 - '192' # driver 2 rel states
Byte[17] - 0xC0 - '192' # system event (first bit)
----------------------
Car info
----------------------
Byte[18] - 0x00 - '0' # speed LSB (1/256 km/h/bit)
Byte[19] - 0x00 - '0' # speed MSB (1 km/h/bit)
Byte[20] - 0x9B - '155' # High resolution total vehicle distance (4 bytes)
Byte[21] - 0xB2 - '178' # - 5 m/bit gain
Byte[22] - 0xE1 - '225' # -
Byte[23] - 0x05 - '5' # - MSB
Byte[24] - 0x03 - '3' # High resolution trip distance (4 bytes)
Byte[25] - 0x6F - o # - 5 m/bit
Byte[26] - 0x53 - S # -
Byte[27] - 0x00 - '0' # - MSB
Byte[28] - 0x40 - @ # K-factor (2 bytes)
Byte[29] - 0x1F - '31'
Byte[30] - 0xFF - '255'
Byte[31] - 0xFF - '255'
Byte[32] - 0x50 - P
Byte[33] - 0x04 - '4'
----------------------
Vehicle identification
----------------------
Byte[34] - 0x11 - '17' # VIN length (17 bytes)?
Byte[35] - 0x57 - W # VIN start
Byte[36] - 0x44 - D # -
Byte[37] - 0x42 - B # -
Byte[38] - 0x39 - 9 # -
Byte[39] - 0x36 - 6 # -
Byte[40] - 0x33 - 3 # -
Byte[41] - 0x34 - 4 # -
Byte[42] - 0x30 - 0 # -
Byte[43] - 0x33 - 3 # -
Byte[44] - 0x31 - 1 # -
Byte[45] - 0x4C - L # -
Byte[46] - 0x37 - 7 # -
Byte[47] - 0x31 - 1 # -
Byte[48] - 0x37 - 7 # -
Byte[49] - 0x37 - 7 # -
Byte[50] - 0x32 - 2 # -
Byte[51] - 0x39 - 9 # -
----------------------
Custom string?
----------------------
Byte[52] - 0x0E - '14' # Custom string length (14 bytes)?
Byte[53] - 0x01 - '1' # Custom string start...
Byte[54] - 0x31 - 1
Byte[55] - 0x32 - 2
Byte[56] - 0x33 - 3
Byte[57] - 0x54 - T
Byte[58] - 0x45 - E
Byte[59] - 0x53 - S
Byte[60] - 0x54 - T
Byte[61] - 0x20 - ' '
Byte[62] - 0x20 - ' '
Byte[63] - 0x20 - ' '
Byte[64] - 0x20 - ' '
Byte[65] - 0x20 - ' '
Byte[66] - 0x20 - ' '
-------------------------
1st Driver identification
-------------------------
Byte[67] - 0x12 - '18' # is non-zero if card is available
Byte[68] - 0x04 - '4' #
Byte[69] - 0x29 - ) # issuing member state (0x29 - Romania)
Byte[70] - 0x30 - 0 # card number start
Byte[71] - 0x30 - 0 #
Byte[72] - 0x30 - 0 #
Byte[73] - 0x30 - 0 #
Byte[74] - 0x30 - 0 #
Byte[75] - 0x30 - 0 #
Byte[76] - 0x30 - 0 #
Byte[77] - 0x30 - 0 #
Byte[78] - 0x30 - 0 #
Byte[79] - 0x30 - 0 #
Byte[80] - 0x38 - 8 #
Byte[81] - 0x36 - 6 #
Byte[82] - 0x48 - H #
Byte[83] - 0x31 - 1 #
Byte[84] - 0x30 - 0 #
Byte[85] - 0x31 - 1 #
-------------------------
2nd Driver identification
-------------------------
Byte[86] - 0x00 - '0' # 2nd card not present
-------------------------
End of frame
-------------------------
Byte[87] - 0xCC - '204' # CRC-8 simple XOR