The Mustang Forum for Track & Racing Enthusiasts

Taking your Mustang to an open track/HPDE event for the first time? Do you race competitively? This forum is for you! Log in to remove most ads.

  • Welcome to the Ford Mustang forum built for owners of the Mustang GT350, BOSS 302, GT500, and all other S550, S197, SN95, Fox Body and older Mustangs set up for open track days, road racing, and/or autocross. Join our forum, interact with others, share your build, and help us strengthen this community!

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

I spent a bit of time playing with RaceChrono and an OBDLink getting some CANbus data logged on my 2019 GT A10. I'm sharing my profile in case it's useful to anyone else - https://drive.google.com/file/d/1o0nFcKDj93ihn9y4ZPx9YZ8IT72R5jUq/view

Here's a list of parameters I was able to pull:

OBD2:
Gear
Trans temp
Tire pressure

CAN:
Brake position
Coolant temp
Engine RPM
Gear
Trans temp
Speed
Steering angle
Throttle position
Individual wheel speed
 
98
129
Exp. Type
HPDE
Exp. Level
20+ Years
Charlotte
This is good info. Thanks.

Do you know for sure whether the Coolant Temp really is coolant temp or if it might be Cylinder Head Temp instead. Just asking because so many of the gauges reflect values derived from CHT. And, I’ve been told CHT is heavily weighted in determining when and how much to pull timing.
 
This is good info. Thanks.

Do you know for sure whether the Coolant Temp really is coolant temp or if it might be Cylinder Head Temp instead. Just asking because so many of the gauges reflect values derived from CHT. And, I’ve been told CHT is heavily weighted in determining when and how much to pull timing.
The coolant temp looks to be the ECU's calculated value. I haven't found the PIDs for CHT yet but that's on my todo list.
 
98
129
Exp. Type
HPDE
Exp. Level
20+ Years
Charlotte
The coolant temp looks to be the ECU's calculated value. I haven't found the PIDs for CHT yet but that's on my todo list.

Please let me know if you do get CHT. It’s somewhat frustrating that so many traditional engine health indicators are calculated. But at least once we get CHT we’ll have some raw data to draw on.
 
2
2
Exp. Type
HPDE
Exp. Level
Under 3 Years
Eastvale Ca
I spent a bit of time playing with RaceChrono and an OBDLink getting some CANbus data logged on my 2019 GT A10. I'm sharing my profile in case it's useful to anyone else - https://drive.google.com/file/d/1o0nFcKDj93ihn9y4ZPx9YZ8IT72R5jUq/view

Here's a list of parameters I was able to pull:

OBD2:
Gear
Trans temp
Tire pressure

CAN:
Brake position
Coolant temp
Engine RPM
Gear
Trans temp
Speed
Steering angle
Throttle position
Individual wheel speed
Do you happen to have the can ids and calculations?
 
I spent a bit of time playing with RaceChrono and an OBDLink getting some CANbus data logged on my 2019 GT A10. I'm sharing my profile in case it's useful to anyone else - https://drive.google.com/file/d/1o0nFcKDj93ihn9y4ZPx9YZ8IT72R5jUq/view

Here's a list of parameters I was able to pull:

OBD2:
Gear
Trans temp
Tire pressure

CAN:
Brake position
Coolant temp
Engine RPM
Gear
Trans temp
Speed
Steering angle
Throttle position
Individual wheel speed
May I ask you to share this data as text file?
I'm working on this stuff as well, here are my findings so far: https://github.com/v-ivanyshyn/parse_can_logs/blob/master/Ford CAN IDs Summary.md
 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
May I ask you to share this data as text file?
I'm working on this stuff as well, here are my findings so far: https://github.com/v-ivanyshyn/parse_can_logs/blob/master/Ford CAN IDs Summary.md
I can send you the dbc file I’m working on, if you know how to work with them. Just quickly looking to see how yours compares, 0x415 for example. The first value is 16 bits, not 8 bits shifted 8 bits. My big issue with the CAN bus is I can’t find any engine data like spark, knock, fuel trims.

below is what 125 (0x76) looks like. Someone could write some code to convert all these values to an output Racechrono uses.
image.jpg
 
Last edited:
I can send you the dbc file I’m working on, if you know how to work with them. Just quickly looking to see how yours compares, 0x415 for example. The first value is 16 bits, not 8 bits shifted 8 bits. My big issue with the CAN bus is I can’t find any engine data like spark, knock, fuel trims.

below is what 125 (0x76) looks like. Someone could write some code to convert all these values to an output Racechrono uses.
View attachment 91048

Hello comrade :)
Regarding 0x415 - looks like in m case it's the same as you mean - 16bits are formed from byte0 and byte1.
I'm not familiar with dbc files, but if there are ways to export it to readable text file I'll be glad to take a look.
Do you have any reference or guidelines about file format for Racechrono? If there's no much coding, may be worth to try it...

And regarding power related CAN data - it's a severe struggle :) Engine load is available right in HS1-CAN. Also I see couple more streams similar to throttle/MAF but not exactly matching. I watched Forscan traffic - it requests throttle/MAF/sparks timing explicitly on 0x78E, so it's possible to use the same approach. But then the tracking device will interfere into CAN traffic, which is not so elegant rather than sniffing it silently. And this approach will lag a little since every request takes 20-30ms (so, if we want to retrieve for example 5 params - it will be at least 100ms rate).

In this topic my strongest desire is to retrieve torque. Sadly, we can't get it through Forscan either. I have a desperate idea to calculate it based on engine load at RPM at the moment with provided max. torque chart for all RPM range (like from dyno). Like: current_torque = current_load * max_torque_lookup(current_rpm). The two concerns here - if it will give reliable numbers (supposing no other factors affect the torque), and where to get a torque chart that matches the car.
 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
Regarding 0x415 - looks like in m case it's the same as you mean - 16bits are formed from byte0 and byte1.
Yeah it will give a lower resolution result when you shift the value instead of using the 2 bytes of data, but it's not a big issue if you don't need high resolution values.

However, I mainly wanted to point this out since you described "saw-like" data. The "saw-like' data is a counter and normally indicated you're looking at incomplete data.

Do you have any reference or guidelines about file format for Racechrono? If there's no much coding, may be worth to try it...
The rcz file format? No, but I haven't messed with racechrono as a data logger much since all the options have fairly slow polling. The app creator (aol of RaceChrono on forums), is really responsive on his forums by the way.

As for .dbc files, you can open them as text, but using a database editor like savvycan (picture I posted), makes the info much easier to digest. They are written in terms of bit position, not bytes, but it's not hard to convert the info into something racechono likes. I never found a good interface for logging CAN data with racechrono.

I watched Forscan traffic - it requests throttle/MAF/sparks timing explicitly on 0x78E, so it's possible to use the same approach.

I think you mean 0x7E8 or physical request/responses (7E0 -> 7E8), which racechrono considers OBDII headers I think. This data is extremely slow if you are looking at multiple PIDs. As for torque, what specifically are you looking for? Throttle position is essentially a torque request based on how the tables are tuned, engine state, TC, esc, etc. It sounds like all you're looking for is a 0x23 (read memory by address) value. There are quite a few different torque values though (desired torque, scheduled, etc indicated torque, engine brake torque, etc.) I can log it using hptuners and sniff the data if you need that info.

With all that being said, I meant a way to passively sniff things like spark, knock, stft, ltft, etc. I know how to pull all the data I need from either CAN IDs or OBD PIDs, but I haven't found a cheap solution for consolidating and viewing the data. I've never been able to get my MX+ to read CAN data in RaceChrono. I'm not sure if I just have the wrong config or because the bus network changed the way the DTC sees the CAN busses in the 2020 model.



Last thing, forscan is great for programming, services, etc., but it's horrible as a logger. It makes really inefficient requests and disconnects if somelike like TC is activated for some reason...

Message me and i'll send you a dbc file if you want to mess around with them. CSSelectronics has great info if you want to see the formatting and in depth info.
 
Yeah it will give a lower resolution result when you shift the value instead of using the 2 bytes of data, but it's not a big issue if you don't need high resolution values.

However, I mainly wanted to point this out since you described "saw-like" data. The "saw-like' data is a counter and normally indicated you're looking at incomplete data.


The rcz file format? No, but I haven't messed with racechrono as a data logger much since all the options have fairly slow polling. The app creator (aol of RaceChrono on forums), is really responsive on his forums by the way.

As for .dbc files, you can open them as text, but using a database editor like savvycan (picture I posted), makes the info much easier to digest. They are written in terms of bit position, not bytes, but it's not hard to convert the info into something racechono likes. I never found a good interface for logging CAN data with racechrono.



I think you mean 0x7E8 or physical request/responses (7E0 -> 7E8), which racechrono considers OBDII headers I think. This data is extremely slow if you are looking at multiple PIDs. As for torque, what specifically are you looking for? Throttle position is essentially a torque request based on how the tables are tuned, engine state, TC, esc, etc. It sounds like all you're looking for is a 0x23 (read memory by address) value. There are quite a few different torque values though (desired torque, scheduled, etc indicated torque, engine brake torque, etc.) I can log it using hptuners and sniff the data if you need that info.

With all that being said, I meant a way to passively sniff things like spark, knock, stft, ltft, etc. I know how to pull all the data I need from either CAN IDs or OBD PIDs, but I haven't found a cheap solution for consolidating and viewing the data. I've never been able to get my MX+ to read CAN data in RaceChrono. I'm not sure if I just have the wrong config or because the bus network changed the way the DTC sees the CAN busses in the 2020 model.



Last thing, forscan is great for programming, services, etc., but it's horrible as a logger. It makes really inefficient requests and disconnects if somelike like TC is activated for some reason...

Message me and i'll send you a dbc file if you want to mess around with them. CSSelectronics has great info if you want to see the formatting and in depth info.

Regarding 0x415 here is what I observe:
Screenshot 2023-11-04 at 14.54.37.png
So, byte0 and byte1 form 16bit number for speed. In code it looks like:
Code:
speed = (int(canMsgData[0])<<8 | int(canMsgData[1])) / 100
that's why I mentioned 8bits shift. The saw is on byte2 within range of 192-252 - it doesn't look like lower part of 16bit number.

Thanks for pointing to SavvyCAN, I didn't know about this tool. Would appreciate if you share your dbc file. And maybe there is a public database with these files for various cars? So far I found just this one: https://github.com/commaai/opendbc

Regarding torque, "0x23 (read memory by address) value" is something new to me, could you please explain it?
I tried to sniff this data through Forscan and got corresponding raw traffic on 0x7E8. Then searched for corresponding streams within HS1-CAN, found couple that almost fit but not exactly - only engine load fits perfectly, MAF and throttle have some discrepancy depending on driving conditions (full acceleration vs. cruising, idle). Here is an example:
Forscan traffic:
1699132497526.png
The most fitting HS1-CAN streams:
1699132566098.png
1699132598148.png
Regarding this part:
With all that being said, I meant a way to passively sniff things like spark, knock, stft, ltft, etc. I know how to pull all the data I need from either CAN IDs or OBD PIDs, but I haven't found a cheap solution for consolidating and viewing the data. I've never been able to get my MX+ to read CAN data in RaceChrono. I'm not sure if I just have the wrong config or because the bus network changed the way the DTC sees the CAN busses in the 2020 model.
are you looking for a device that displays sniffed data at runtime in the car, or just that part that sniffs the CAN data and transmits it to a USB/Bluetooth device?
I'm developing this thing:
IMG_0916.jpg
the idea is to use it on track. Technically there is option to display multiple values in rows:
1.jpeg
 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
are you looking for a device that displays sniffed data at runtime in the car, or just that part that sniffs the CAN data and transmits it to a USB/Bluetooth device?
What I meant was something that requires low post event data manipulation. Something like racechrono with full CAN-bus + OBDII logging synced to video + my racebox mini. Currently, I just use racechrono for video + lap timing (this is honestly all you really need). For data, I either log the CAN-bus data (sniffing, not requesting) using something like busmaster/savvycan, or I just log PCM data using HPTuners software (request based data). You can run them concurrently but you end up getting signal drops and noisy or truncated data. For just displaying the data real time, there is an app (RealDash) that works pretty well using wifi. I see around 2200 messages/sec on hscan1 for comparison to other request-based data. This is using a WiCAN-USB adapter spliced into the back of the gateway module.

I might end up getting a racecapture device since they aren't insanely priced and I think it can do all the stuff I want.

In regards to you only seeing 192-252, I think theres an issue because I see 0-255. I'll continue responding to this with more info in a bit.
 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
Thanks for pointing to SavvyCAN, I didn't know about this tool. Would appreciate if you share your dbc file. And maybe there is a public database with these files for various cars? So far I found just this one: https://github.com/commaai/opendbc

Yeah, comma ai has the dbc files i started with, but dbc files are not public so people reverse engineer them.


Regarding torque, "0x23 (read memory by address) value" is something new to me, could you please explain it?

0x23 or $23 requests are through the UDS protocol. I think the easiest way to differentiate $23 from the 0x22 (or $22) requests is one is looking at a voltage normally ($22) and one is looking at a memory address ($23).
 
Yeah, comma ai has the dbc files i started with, but dbc files are not public so people reverse engineer them.

I just started digging into this area with SavvyCAN, looks pretty handy. Especially the option to distinguish individual bits in the stream - it's something that is not easy to do looking at raw numbers. May I ask you to share your dbc file, if you are ok to let me publish my findings from it on my GIT? Also I would be glad to inspect your raw logs from CAN bus to see what's the difference comparing to my 2015 Mustang, also if you don't mind.

0x23 or $23 requests are through the UDS protocol. I think the easiest way to differentiate $23 from the 0x22 (or $22) requests is one is looking at a voltage normally ($22) and one is looking at a memory address ($23).
Nice to know. I'm too young for this area yet :)
 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
I just started digging into this area with SavvyCAN, looks pretty handy. Especially the option to distinguish individual bits in the stream - it's something that is not easy to do looking at raw numbers. May I ask you to share your dbc file, if you are ok to let me publish my findings from it on my GIT? Also I would be glad to inspect your raw logs from CAN bus to see what's the difference comparing to my 2015 Mustang, also if you don't mind.


Nice to know. I'm too young for this area yet :)

Load this in dbc file manager. This is what I’m currently messing with, there’s still a ton of incorrect values but I’ll also send you a log so can see what the data looks like. Tick interpret frames and overwrite frames. This file is sniffing HSCAN1.

 
23
4
Exp. Type
HPDE
Exp. Level
Under 3 Years
Lubbock
I just started digging into this area with SavvyCAN, looks pretty handy. Especially the option to distinguish individual bits in the stream - it's something that is not easy to do looking at raw numbers. May I ask you to share your dbc file, if you are ok to let me publish my findings from it on my GIT? Also I would be glad to inspect your raw logs from CAN bus to see what's the difference comparing to my 2015 Mustang, also if you don't mind.


Nice to know. I'm too young for this area yet :)

And yeah publish away, most of it isn’t my work. Like 95% of it is comma ai‘s opendbc project.

The UDS (also called ISO 14229) stuff isn’t that complicated but it does seem so when you see how much is going on with the network. $22 Requests and $23 requests are generally the same but $23 can store more bytes of info.

Also having a 2015 mustang should make it easier to use something like an MX+ obd Scanner to get in app data. The 2020 model changed the network so that there’s an interface between some of the HSCAN networks.
 

Load this in dbc file manager. This is what I’m currently messing with, there’s still a ton of incorrect values but I’ll also send you a log so can see what the data looks like. Tick interpret frames and overwrite frames. This file is sniffing HSCAN1.

Thanks once again! The DBC file is really helpful, especially the info of bits assignment and formulas of converting the byte stream value into a physical one.
 

TMO Supporting Vendors

Top