Originally posted by liam821
View Post
Announcement
Collapse
No announcement yet.
CSL '0401' Program Binary Disassembly Notes
Collapse
X
-
You can use the MS43 plug-n-play harness adapter, which is what I'm doing - although you might need to move a few things around. I'm also using a MaxxECU, with an e92m3 DCT, but a turbo Honda k24 in an e46. I'm using the MS43 play-n-play harness, but I made a custom Honda k24 engine harness to BMW DME style x60003/x60005 plugs so everything is very factory.Originally posted by sda2 View PostHow do you hook up the Maxecu? splice it into the existing DME wiring, or is it capable of reading the values from can? How is throttle blip and ignition retard working?
Here is the wiring documentation: https://www.maxxecu.com/webhelp/wiri...u-bmw_m54.html
Leave a comment:
-
Yes, anything 0x7** is development stuff, yes. I was unaware of the 0x310-515. I only know 316,329,338 and 545. So MSS54 is indeed very special.
SliM3 I know the Maxx and Dodge firmware, but after driving a Dodge one, I have to say that BMW is way better for daily use, than Dodge.
How do you hook up the Maxecu? splice it into the existing DME wiring, or is it capable of reading the values from can? How is throttle blip and ignition retard working?
Leave a comment:
-
I haven't had a chance to get into the secondary CAN yet. But having a very quick look now.Originally posted by sda2 View PostAs I said earlier, awesome work! Did you go through the SMG CAN implementation by any chance? It would be awesome to ditch the SMG and install DCT or 8HP with a CanTCU, but for that the secondary CAN bus needs to be deciphered.
Afaik the MSS54 acts as a gateway between the gearbox and the chassis, so the can11h message "EGS1" on 0x43F is actually sent out by the DME, not the SMG control unit.
SMG CAN starts at something like 0x410 up to 0x412. I think olza also posted about this.
There are 11 outbound messages from the DME.
0x310
0x311
0x312
0x313
0x314
0x515
0x710
0x711
0x712
0x720
0x701
The 0x7xx messages I'm pretty certain will mirror the convention on the primary CAN and will be diagnostic messages from when BMW were developing and tuning. They seem to contain unrelated parameters that would be useful for tuning. Their sending is controlled via parameters in the partial ROM.
There are 3 inbound messages that are read as you've previously identified.
0x410
0x411
0x412
I'll get into this more when I get the chance , but that seems to be the high level.
Edit: Also yes - 0x43F is sent from the DME on the primary CAN.
- Likes 1
Leave a comment:
-
Very cool - is this an in-flight project you're working on?Originally posted by SliM3 View Post
You'll be better off running a MaxxEcu for 8HP control. Copy the optimal torque map from whatever OEM SW you want (I use CSL) and overwrite the MaxxEcu base tq map + increase values by 28-30%. Plus you can program CAN outputs for a “stock-like” gear position indicator to replace the SMG display that's currently in our clusters.
Sent from my iPhone using Tapatalk
- Likes 1
Leave a comment:
-
Ma man! Can't wait to see it!Originally posted by SliM3 View Post
You'll be better off running a MaxxEcu for 8HP control. Copy the optimal torque map from whatever OEM SW you want (I use CSL) and overwrite the MaxxEcu base tq map + increase values by 28-30%. Plus you can program CAN outputs for a “stock-like” gear position indicator to replace the SMG display that's currently in our clusters.


Sent from my iPhone using Tapatalk
Leave a comment:
-
You'll be better off running a MaxxEcu for 8HP control. Copy the optimal torque map from whatever OEM SW you want (I use CSL) and overwrite the MaxxEcu base tq map + increase values by 28-30%. Plus you can program CAN outputs for a “stock-like” gear position indicator to replace the SMG display that's currently in our clusters.Originally posted by sda2 View PostAs I said earlier, awesome work! Did you go through the SMG CAN implementation by any chance? It would be awesome to ditch the SMG and install DCT or 8HP with a CanTCU, but for that the secondary CAN bus needs to be deciphered.
Afaik the MSS54 acts as a gateway between the gearbox and the chassis, so the can11h message "EGS1" on 0x43F is actually sent out by the DME, not the SMG control unit.
SMG CAN starts at something like 0x410 up to 0x412. I think olza also posted about this.


Sent from my iPhone using TapatalkLast edited by SliM3; 08-06-2025, 06:02 AM.
- Likes 5
Leave a comment:
-
As I said earlier, awesome work! Did you go through the SMG CAN implementation by any chance? It would be awesome to ditch the SMG and install DCT or 8HP with a CanTCU, but for that the secondary CAN bus needs to be deciphered.
Afaik the MSS54 acts as a gateway between the gearbox and the chassis, so the can11h message "EGS1" on 0x43F is actually sent out by the DME, not the SMG control unit.
SMG CAN starts at something like 0x410 up to 0x412. I think olza also posted about this.
- Likes 2
Leave a comment:
-
Karter. Amazing work. Thanks for doing this. Hopefully now we can have an OE+ kind of tune for the community to use with our different OG mods like CSL intakes and SS exhaust systems.
Leave a comment:
-
That would quite possible explain then why the "NOISE_GANG" for the CSL is 4th gear, but for the Euro M3 it's 3rd. Maybe the extra power + reduced weight of the CSL was enough to cause the starting gear to be different.Originally posted by Tomba View PostDepended if you reach the engine speed limiter at the end of the test track or other conditions is in which gear you need to start.
Thanks for this - very interesting!!
Leave a comment:
-
Great work Karter, I have been reading this for a while and would like to have the skills to do this as well. Thanks for sharing all this.
For European markets there is a noise measurement around 50km/h and then full load. Similar function is in my 2010 S1000RR which closes the exhaust valve to reduce noise during this event.Originally posted by karter16 View PostOkay so this is very limited.
Essentially what it does is monitor for the condition where the car is in 4th gear and has been cruising between 44 and 54 km/h for more than 3 seconds. At that point it enters "noise" mode where the max requestable torque is limited. As soon a different gear is selected or the car drops below 44 km/h or goes about 70 km/h noise mode ends....
Depended if you reach the engine speed limiter at the end of the test track or other conditions is in which gear you need to start. I believe the Ferrari 360 Modena would reach the limiter in 2nd gear and therefore the test conditions were adjusted.
- Likes 2
Leave a comment:
-
Finally coming back to this:Originally posted by Bry5on View Post
Oh man that’s super interesting. Like a secret raw mode. Interested to hear what you find as you dig in more. This might be easier to set to 6 than setting every flap open engine speed for those that don’t have the flap installed. Thank you for all this work!
The code looks like this:
Setting k_ask_zustand_cfg to 0x06 will force the flap to open as soon as RPM goes above 1000 and it will stay open until RPM goes below 800. So effectively open all the time except at idle.
This seems on the face of it that it could be an easier way to set the flap to "always" be open. However looking at the code you'll note that setting k_ask_zustand_cfg to 0x06 also skips checks for KATH_ST, etc. which has the effect of opening the snorkel flap even during warm up. This in turn has the effect, because of the way the code is written, of not blending the kf_egas_wdk_kh table during warm up, rather the DME will pull straight from the kf_egas_wdk_ask (CSL flap) table.
This appears to be the only side effect. The AlphaN tables are fine because they are blended based on AVAN1_SOLL_FAKTOR as discussed previously, and the adder table is blended in based on flap status (e.g. it's added on top of the standard map or the KATH map depending on which one is active).
Given the effect of the egas_wdk tables I think it's probably best to continue with the approach of adjusting the flap open rpm tables rather than changing k_ask_zustand_cfg in order to avoid the undesirable side effect of the kf_egas_wdk_kh table being ignored during cold start/warm up.
- Likes 1
Leave a comment:
-
Legendary work my friendOriginally posted by karter16 View PostWell I hate to think how many hours I've spent on this in the last 9 months but this evening I figured out and named the last of the 138 CSL specific parameters.
The last one was the parameter that defines how long the sport button needs to be held down for to trigger displaying the oil level sensor readout on the dash. The function that does this is schalt_m_st_calc (Master CPU "switches" status byte). The function runs every 10ms therefore a hex value of 0x64 (decimal 100) means that by default the button needs to be held down for 1 second.
I might have names for all 138 parameters but the job doesn't finish here. I'm still in the middle of tidying up, refining and aligning names. Once that's done I then need to add/refine the descriptions of the parameters (Edit: this is the most important bit. Over the last 9 months I've got pretty good at understanding obscure German abbreviations for technical terms, but I need to make sure this ends up being something others can reference and use without the backstory), configure conversion factors, etc.
Nevertheless this is a pretty big milestone and I have to say I've managed to get an awful lot further than I was expecting when I embarked on this.
- Likes 1
Leave a comment:
-
Well I hate to think how many hours I've spent on this in the last 9 months but this evening I figured out and named the last of the 138 CSL specific parameters.
The last one was the parameter that defines how long the sport button needs to be held down for to trigger displaying the oil level sensor readout on the dash. The function that does this is schalt_m_st_calc (Master CPU "switches" status byte). The function runs every 10ms therefore a hex value of 0x64 (decimal 100) means that by default the button needs to be held down for 1 second.
I might have names for all 138 parameters but the job doesn't finish here. I'm still in the middle of tidying up, refining and aligning names. Once that's done I then need to add/refine the descriptions of the parameters (Edit: this is the most important bit. Over the last 9 months I've got pretty good at understanding obscure German abbreviations for technical terms, but I need to make sure this ends up being something others can reference and use without the backstory), configure conversion factors, etc.
Nevertheless this is a pretty big milestone and I have to say I've managed to get an awful lot further than I was expecting when I embarked on this.Last edited by karter16; 08-02-2025, 12:02 AM.
- Likes 11
Leave a comment:
-
Excellent work mate 👍Originally posted by karter16 View PostI've now figured out 128 of the 138 parameters specific to the CSL. You'll see that my naming conventions aren't entirely consistent, but once I've figured out the last 10 and have a complete view I can then align the naming accordingly.Last edited by ac427; 07-29-2025, 10:52 AM.
Leave a comment:

Leave a comment: