1
\$\begingroup\$

I'm using an Arduino with MCP2515 and MCP2551 to read data from a CAN bus over the OBD-II port of my car, Honda Jazz 2012. From what I've read on other forums and the OBD wiki, I can transmit the PID query to the engine over CAN ID 0x7DF and should be receiving the data on 0x78E.

I'm transmitting the data in the format described on the wiki:

Number of bytes|01|PID|0|0|0|0|0

The data I'm receiving doesn't contain data from CAN ID 0x78E or any ID nearby. Also even if I'm not sending data to the CAN bus, I'm still receiving the data, so using that I tried to remove noise, but it seems all the CAN IDs are broadcasting all the time.

So, I sampled some STN1110, OBD-to-UART interpreter, and tried to tap the connection between STN and the car ECU. It appears that the STN has a CAN ID of 0x18DB33F1 and the ECU is transmitting the data queried over CAN ID 0x18DAF110. I've put some of the data here: https://goo.gl/zTTIkk.

  • Do I need to assign my circuit an ID manually. I believe it's done automatically, otherwise I won't be getting any data.
  • How do I interpret this data? Is there a way or I'll just have to go with reading more data and making sense out of it, removing noise little by little.

I have read that there is a gateway between the OBD port and the CAN bus, so to access data from the bus, I'll need to pass the gateway. How?

\$\endgroup\$
1
  • \$\begingroup\$ What OBD wiki? iobd2.org? This is not immediately apparent from a DuckDuckGo search. \$\endgroup\$ Commented Sep 6, 2015 at 18:05

2 Answers 2

0
\$\begingroup\$

It appears that the car ECU was a bit old and it uses raw can instead of diagnostic can. I changed the car and everything is working as it should.

\$\endgroup\$
0
\$\begingroup\$

The CAN bus is not like a regular bus that you might be used to. The CAN bus is message-based, not module-based. This means that every message has an address and every module on the bus can receive it at the same time. Messages are not directed from module to module; they are directed at everyone. When a module receives a message it decides whether it is needed or not.

If you listen to the CAN bus you will hear every message that is being transmitted all the time. It is up to your code to filter out what you need. Most integral CAN modules have a way to read in wanted messages and discard unwanted ones.

The CAN bus is wired directly to the OBD port. If memory serves me correctly, pin 7 and 14. The gateway you mention is not between the OBD port and the CAN bus; it is between the CAN bus and the other slower buses in the car.

\$\endgroup\$
9
  • \$\begingroup\$ Thanks for the reply :). I just read about the message part and understood a bit about what's going on. So, what I'm getting is all the data that any sensor in the car is transmitting or receiving right? As far as filtering is concerned, I think I'll have to do it based on the id of the node. The OBD port has 6,14 as the CAN bus, but I don't see any messages from the ECU (at 0x7e8). Is there a special command that I need to send other than valid pid to 0x7df, to get the ECU to respond. \$\endgroup\$ Commented Aug 22, 2015 at 15:20
  • \$\begingroup\$ It's not just sensor data, it's also control data, diagnostic data, security data, data requests... and so much more. \$\endgroup\$
    – vini_i
    Commented Aug 22, 2015 at 15:26
  • \$\begingroup\$ Are the controls data available on OBD port too? Won't that make the car vulnerable, if one modified those data and sent some other data back? \$\endgroup\$ Commented Aug 22, 2015 at 15:27
  • \$\begingroup\$ Vulnerable how? Theoretically you can get the car to do almost what ever you wanted by issuing a correct message on the CAN bus. Practically this is already done with the use of a factory OBD diagnostic tool. You can start the engine, turn off cylinders, run the ABS pump and solenoids... Realistically the security data that is exchanged between the ECU and what every reads the key is encrypted with a rolling code type system. This system is initialized when the vehicle is manufactured or when a module is replaced due to a malfunction. \$\endgroup\$
    – vini_i
    Commented Aug 22, 2015 at 15:36
  • \$\begingroup\$ This is new to me. I had heard that you could do all these things over can bus, but you would have to physically place your device on the can bus, obd didn't give that much flexibility. If what you are saying is true, I think cars can be real fun :-P. \$\endgroup\$ Commented Aug 22, 2015 at 15:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.