OBDLink MX+ works for CAN bus on car but not standalone CAN bus for datalogger

Hey @aol_of_RaceChrono - Posting to IOS category in case this is an IOS specific issue. Otherwise consider it general.

I have installed Team Plus tire temp sensors - as noted elsewhere on this forum - which are natively supported in RaceChrono and work great. I also have their track grade TPMS sensors which are not currently supported. Have a separate RFE posted some months back requesting this get on the roadmap - https://racechrono.com/forum/discussion/2579.

Anyway, as a workaround I have purchased the "CAN Gate" external data collector from Team Plus which gathers both the tire temp and TPMS data and chucks it out via 4-wire CAN. (https://team-plus.com/product/cangate-for-wheel-turtle/)

As noted elsewhere on this and other forums, been doing a ton of CAN hacking along with @webkris using OBDLink MX+ and RaceChrono and having lots of success. Including getting two simultaneous OBDLinks pulling CAN data into RaceChrono. (see here for detailed writeup - https://www.718forum.com/threads/successfully-hacked-my-718-gts-can-bus-for-racechrono-data.31918).

So what I thought I would do is connect the CAN Gate directly to an OBDLink MX+ in a "private" CAN network. I have it all built and verified working using a CL1000 CAN sniffer. However, when I switch over to the OBDLink RaceChrono is unable to see any valid data even though when I put the exact same OBDLink onto the car CAN bus it pulls all the normal CAN channels no problem.

Here's a sample of the CAN Gate PIDs being broadcast on to the private network as captured by the CL1000:

Timestamp;Type;ID;Data
01T000020694;0;4c0;494a4a4a4a4a4a4a
01T000020696;0;4c4;4a494a494a4a4a4a
01T000020698;0;4cc;504f4f4f4f4e4e4d
01T000020700;0;4d0;2effffff014700da
01T000020702;0;4d1;21f1f1f101320000
01T000020704;0;4d3;20e7e7e701320000
01T000020707;0;4c5;ffffffff0c15ffff
01T000020709;0;4c9;ffffffff0c31ffff
01T000020711;0;4cd;ffffffff0c3bffff
01T000020782;0;4c0;494a4a4a4a4a4a4a
01T000020784;0;4c8;4b4d4d4d4e4e4e4f
01T000020785;0;4d0;2effffff014700da
01T000020788;0;4d2;2ae5e5e501320000
01T000020790;0;4d3;1ef3f3f301320000

I've done all the CAN wiring diagnostics - verified proper termination and resistance between CAN H/L lines, etc. It seems like a software issue. Baud rate is identical to the car CAN buses so that's not it either.

From reading around I'm seeing that OBDLink has some API where it is programmed to have "pass" channels for specific PIDs. I assume that RaceChrono is doing exactly this for the two dozen or so CAN PIDs I am already pulling from the car. I have set up CAN PIDs for all of the CAN Gate temp and pressure channels - and as I say I have verified with a sniffer that these are being broadcast on the CAN. So I would expect that if RaceChrono is plumbing any defined PIDs it is plumbing all of them.

Regardless I just cannot get it working. Is there some constraint on plumbing CAN PIDs in the 0x4Cx and 0x4Dx range into an OBDLink?

Anybody had any luck with a 3rd party CAN sniffer supporting OBDLink? I've experimented with a handful from the App Store with no joy so far.

Am I more likely to have luck with CAN sniffing via OBDlink on Android?

Thanks.

Comments

  • Update... and question to @aol_of_RaceChrono.

    After opening support cases with both CSS and OBDLink got critical clues to debug this. Better yet, was able to identify root cause which is that the OBDLink MX+ (and maybe other models, not sure) does not issue acknowledgements on the CAN bus. A sending node on a CAN bus that does not sense an "ack" effectively locks up.

    Helpfully, the CSS CL1000 CAN sniffer defaults to a "good neighbor" mode where it will issue an ack (even though it's just sniffing CAN packets) if it detects a CAN node sent a frame that was not ack'ed.

    Using this information I've built a modified setup with a passive CAN hub with 3 active nodes plus a terminator plug:

    Node 1 - Team Plus CANgate (to send tire temp & pressure data to the CAN bus)
    Node 2 - OBDLink MX+ (to read the data from CANgate and pass to RaceChrono)
    Node 3 - CSS CL1000 in good neighbor “ack” mode (to ack the frames that MX+ is not)

    This seems to mostly work, and I tested it out at Thunder Hill last weekend pretty successfully. Now it's time to simplify the setup and get it ready for permanent install.

    According to OBDLink support it can ack CAN frames but this is not default behavior. They say "...While monitoring, OBDLink MX+, by default. assumes there is another node on the bus that will be ACKing messages. If there is no other node, you will need to enable ACKing using the command STCMM 1 before you start monitoring.
    Is messages are not ACKed, many CAN drivers will interpret this as a transmission failure..."

    So - @aol_of_RaceChrono - how do I issue the command "STCMM 1" to an OBDLink in CAN mode?

    I see the "Initialization commands" section under "OBD-II Settings" under "Vehicle profile". But this appears to be for OBD mode not for CAN mode. Under the CAN section there is no similar section for initialization commands.

    If I add such a command under the OBD section, will it be sent if the MX+ is not in OBD mode?

    Anyone curious about CAN acks I can explain more offline. It is very odd protocol design for sure - and I worked in the networking field for 35 years and very very familiar with layer 1/2 architectures for various wired and wireless network types. The fact that a "broadcast" message on a CAN bus requires an "ack" or the whole system breaks makes my head spin.
Sign In or Register to comment.