I'm not generally a 'car person', so hopefully I can explain this well enough to get some help here:
When sending messages to an OBD-II device, I receive one response in most cars I've tested. However, with cars that apparently have more than one ECU chip, I get a response from each of them. For example, if I send a 01 0C
PID command to a vehicle with 3 ECU chips, I receive 3 responses which are generally very similar but still different.
A 01 00
command is supposed to return 4 bytes that states the supported PIDs of the vehicle, but this also returns 4 bytes for each ECU -- one being a fully fleshed out 4 bytes with several flags on and off, while the others seem to only have a handful of flags turned on (these flags so far seem to always be flags that are included in the 'main' response, but I'm unsure if this is always the case).
Example:
SENT: 01 00
RECEIVED:
00 BF BF AC D3 - This response has the most binary flags turned on
00 98 18 80 11 - 8 flags on here
00 98 18 80 13 - 9 flags on here
The last two lines consist of flags that are also flagged within the first line, but the line 3 has one additional flag that line 2 does not.
It seems to me that perhaps there is a single ECU that qualifies as the 'primary' chip that I should be listening to when I'm sending commands, and (I think) I understand that I can use a CAN ID mask/filter to only pay attention to the ones I need.
The question is: Is there really a 'primary ECU' that I should pay attention to, or are all of these responses equally important? If there's a primary one I need to be targeting, is there a command I can send to determine which is the 'most significant'?
Vehicles tested on:
2011 Chevy Cruze [2 ECUs]
2015 BMW M5 [3 ECUs]
2015 Range Rover Autobiography [3 ECUs]