Page 1 of 1

How to debug OBD

Posted: Sat Oct 28, 2023 1:45 pm
by Timmie
Hi Folks,

Looking at the console, I get `ECU ON` but then I only get OBD Timeouts
TYPE:15
MEMS:ICM-42627
ACC BIAS:-1.00/0.01/-0.01
GNSS:OK
[OBD] ECU ON
[DAT] UCZLVWYP#0:------------------------------------------
[CELL] 48 bytes being sent
[NET] 00:11.7 | Packet #18 | Out: 0 KB | In: 23 bytes | 299 KB/h
Timeouts: OBD:1 Network:0
[DAT] UCZLVWYP#0:------------------------------------------
[CELL] 53 bytes being sent
[NET] 00:14.2 | Packet #19 | Out: 0 KB | In: 23 bytes | 260 KB/h
Timeouts: OBD:2 Network:0
[DAT] UCZLVWYP#0:------------------------------------------
[CELL] 81 bytes being sent
[NET] 00:15.5 | Packet #20 | Out: 1 KB | In: 23 bytes | 256 KB/h
Timeouts: OBD:3 Network:0
[CELL] 88 bytes being sent
[NET] 00:19.5 | Packet #22 | Out: 1 KB | In: 23 bytes | 235 KB/h
RSSI:-105dBm
Timeouts: OBD:4 Network:0
By getting the ECU ON, I presume it was able to detect the canbus as PROTO_ISO15765_11B_500K

But I dont get any feedback on why its timing out or what configuration I might have missed.

Re: How to debug OBD

Posted: Sat Oct 28, 2023 9:34 pm
by Timmie
I poked around for a bit, tried setting `VERBOSE_LINK` to 1 which gave me a bit more output.

Here's how it looks, the VIN comes out perfect, but still seems to die looking for something when it gets `NO DATA` which is interpreted as a timeout.
OBD:OK
SD:30507 MB total, 2 MB used
File: /DATA/15.CSV
[UART SEND]0902 <-- getVIN()
>: 4E 30 33 38 -- -- -- -- -- -- --
VIN:WAUZZZ4G0J-------
[UART SEND]03 <-- readDTC() ?
>3 00 RECV]43 00
[CELL] Activating...
[UART SEND]010D <-- init() ?
>1 0D 00 V]41 0D 00
[UART SEND]010C
>1 0C 00 00 1 0C 00 00
[UART SEND]0111
>UART RECV]41 11 E5
[UART SEND]0104
>1 04 00 V]41 04 00
[UART SEND]010A
>UART RECV]NO DATA
Timeouts: OBD:1 Network:0

Re: How to debug OBD

Posted: Thu Nov 30, 2023 3:07 am
by alfresco
It seems the root cause of the recurring OBD timeouts is that the device is not getting a response from the vehicle's ECU after the initial handshake. I think that you can try one of those things below:

- Double check all physical OBD connections and pinouts - any loose wiring or incorrect pins could cause communication issues

- Try an alternative OBD-2 scanner tool to rule out vehicle-specific compatibility problems

- Ensure the ECU is fully powering up and staying online - older vehicles may need time before the bus initializes

- Scan for ECU protocol errors like buffer overflow or incomplete message sets

- Increase timeout thresholds in the code to allow more response time

- Add robust re-try logic and error handling in case the ECU drops mid-query

- Log raw CAN bus traffic to pinpoint where communication is getting cut off

Getting the VIN initially means it has some connectivity. The key is determining why it's losing sync with the ECU after that point. Trapping the "NO DATA" errors and analyzing the command chain leading up will help narrow down the failure point. Don't hesitate to add more verbose debug trace statements too. Hopefully some combination of hardware and software tweaks resolves the recurring time outs! :)