]> sigrok.org Git - sigrok-dumps.git/blame - sae-j1850/vpw/P01_bench_by_itself/README
sae_j1850_vpw: Add VPW sample data from P01 PCM
[sigrok-dumps.git] / sae-j1850 / vpw / P01_bench_by_itself / README
CommitLineData
d8937b14 1------------------------------------------------------------
2J1850 VPW transmission from GM P01 Powertrain Control Module
3------------------------------------------------------------
4
5Captured by pman92 - 2 May 2020
6
7This is a capture of data from a General Motors "P01" Powertrain Control
8Module. The control module was wired on the bench in a minimal setup
9with nothing else connected. An ignition switch was included to provide
10ignition power to the PCM. The following information was then obtained
11from the module with PCMHammer 012 and an X-Pro VT interface (see
12https://github.com/LegacyNsfw/PcmHacks/wiki/PCM-Hammer and
13https://obdxpro.com/x-pro-vt/).
14
15 VIN: 6H8WHY19F2L857286
16 OS ID: 12202088
17 Calibration ID: 92113609
18 Hardware ID: 9386530
19 Serial Number: 2EB2TZJT2070
20 Broad Cast Code: DFNN
21 MEC: 0
22
23An Arduino was connected to the data line via a basic interface circuit
24that used a voltage comparator to monitor the J1850 VPW bus voltage
25(high or low). The Arduino was programmed using pin change interrupts to
26measure the time difference between changes of bus state (active or
27passive). The Arduino would watch for SOF signals and then count the
28following bus state/time changes to calculate the data within the packet.
29It would calculate and confirm the checksum matched to ensure the data
30was OK. It would then transmit the complete received packet back to the
31PC via USB and was displayed on the Arduino serial monitor. The returned
32data included a timestamp. If a checksum didn't match, an error message
33would be returned instead of the relavent data packet.
34
35
36Logic analyzer setup
37--------------------
38
39The capture was taken with a Saleae Logic 8 Channel clone at 16MHz for
4050M samples. The ignition switch on the bench wiring was turned on and
41the PCM started transmitting data.
42
43 Probe VPW
44 -------------
45 1 data
46
47
48Capture verification
49--------------------
50
511. Arduino checksum calculation and confirmation
52
53J1850 VPW packets contain a checksum. If a bad or incorrect checksum was
54found, an error message would be transmitted back to the PC by the Arduino
55instead of that data packet/frame. No error messages were recorded during
56the capturing of this data, so the Arduino checksum calculations were all
57correct, and it considered the data intact.
58
592. Visual inspection of first data packet in Pulseview
60
61The first data packet (+616.8ms to +622.1ms) was visually inspected in
62PulseView and the bit values written down by hand. They were then split
63into groups of 8 bit values, which were converted each to a single hex
64value. The single hex values of the first data packet were then confirmed
65to match the hex values that the Arduino had returned as the first packet.
66
673. Timing between first and last data
68
69There is a total of 33 packets visible. PulseView shows the first packet
70ending at 622ms, and the last packet ends at 3059ms, meaning 2437ms between
71the "end of the first" and "end of the last" packets in the capture. The
72Arduino also returned a time stamp of when the packet was processed and
73sent to the PC. Between the first and 33rd packet, the difference in
74Arduino time stamps was 2438ms. The difference of only 1ms confirms the
75PulseView capture and Arduino are looking at the same range of data.
76
77NOTE that there are glitches within the capture. There is a series of
78short glitches/pulses around 506-507ms within the capture. I'm unsure of
79the cause, but this was around the time when the ignition switch on the
80bench was turned on. Maybe it was noise caused by the switch or maybe it
81was noise coming from the PCM when it powered up. Either way this could
82be a good example to make sure the decoder can ignore/skip bad data or
83glitches.
84
85
86Data
87----
88
89The Arduino returned the following data packets, written in hex, from
90first to last within the PulseView capture:
91
92 68 13 10 11 00 46
93 68 EA 10 0A 01 AE
94 88 15 10 01 C8
95 88 1B 10 10 00 00 46
96 8A EA 10 20 8A 00 10
97 A9 CE 10 07 69
98 A8 F3 10 11 02 2B
99 C8 3B 10 3C 04 48
100 68 EA 10 0A 01 AE
101 88 15 10 01 C8
102 8A EA 10 20 8A 00 10
103 A9 CE 10 07 69
104 49 92 10 01 BE
105 49 92 10 01 BE
106 8A EA 10 20 82 00 4A
107 8A EA 10 20 82 00 4A
108 68 49 10 10 0B CF
109 68 EA 10 0A 01 AE
110 88 15 10 01 C8
111 8A EA 10 20 8A 00 10
112 A9 CE 10 07 69
113 E9 2A 10 3C EE
114 49 92 10 01 BE
115 E9 2A 10 3C EE
116 8A EA 10 20 82 00 4A
117 68 EA 10 0A 01 AE
118 88 15 10 01 C8
119 8A EA 10 20 8A 00 10
120 A9 CE 10 07 69
121 E8 FF 10 03 B3
122 49 92 10 01 BE
123 E9 2A 10 3C EE
124 8A EA 10 20 82 00 4A