1
votes

Standard CAN (ISO 15765-4) OBD requires that all messages have 8 data bytes - (ELM327 documentation)

Reading from my car with a bluetooth ELM327 I get messages that are not all 8 bytes long.

Here is the configuration :

AT Z    # Reset
AT D    # Default
AT SP 6 # Set Protocol
AT CFC1 # Flowcontrol
AT D1   # Show DLC
AT AL   # Allow long messages
AT H1   # Show headers
AT CAF0 # Disable Formatting
AT L0   # Disable linefeeds
AT S0   # Remove whitespace

The output :

Command: AT MA
17A8FFFFFFAA00F031A3
17E8FFFFFF00FF4000FF
186719503203200020
0C6880637FFF800E8E82
2BC8948641FD03891D73
18A6FFF000064000
1F68DE20003700FFFFFF
1F88F504826FFE000A0D
391600008000C000
12E8C77FFF7FE0FFFF00
24270200FFEFFE000C
29C800000000FFFF0000
35245C000000
130800286FFE009FFECD
17A8FFFFFFAA00F031A3
17E8F
BUFFER FULL

Here most messages are correct (3 bytes ID + 1 byte DLC + 8 bytes Data), but some are shorter and sometimes I recieve messages that are longer. Are these normal ? If not, any ideas where it could come from ?

2

2 Answers

2
votes

It is true that all OBD related (i.e. standardized) messages have 8 bytes of data. However the trace you have posted does not contain any OBD messages.

OBD messages have a CAN-ID between 0x7DF and 0x7EF

The messages in your output seem to be other (manufacture-specific) CAN messages. The manufacture is free to define the format of those messages, thus a DLC of less than 8 is allowed.

0
votes

this sample of listen OBDII can protocol :

idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 316 DLC: 08 DATA: 01  1E  AC  09  1E  1C  00  5E 
idv: 0 exID: 80012CC ID: 0A1 DLC: 08 DATA: 78  7F  00  00  1D  00  00  00 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8A  00  00  00  00 
idv: 0 exID: 80012CC ID: 316 DLC: 08 DATA: 01  1E  AC  09  1E  1C  00  5E 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  47  00  8B  00  00  00  00 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 7DF DLC: 08 DATA: 02  01  0C  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 7E8 DLC: 08 DATA: 04  41  0C  09  9C  00  00  00 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8A  00  00  00  00 
idv: 0 exID: 80012CC ID: 316 DLC: 08 DATA: 01  1E  98  09  1E  1C  00  5E 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8B  00  00  00  00 
idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8B  00  00  00  00 
idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00  

every sensor module and ... use can wire to transmission data with each others

but here is the ELM327 send and receive packet for reading RPM

idv: 0 exID: 80012CC ID: 7DF DLC: 08 DATA: 02  01  0C  00  00  00  00  00 
idv: 0 exID: 80012CC ID: 7E8 DLC: 08 DATA: 04  41  0C  09  9C  00  00  00 

as you see DLC of packets always is 8 bytes the firs data bit of can protocol is number of data bytes in that packet for example

DATA: 02 01 0C 00 00 00 00 00 number byte of data =02 data = 01 0C (RPM READING COMMAND)