Originally posted by ac427
View Post
Announcement
Collapse
No announcement yet.
CSL '0401' Program Binary Disassembly Notes
Collapse
X
-
Yep less responsive part throttle and more jerkiness. Exactly the same effect as disconnecting (electrically) the MAP sensor and going for a drive.
- Likes 1
-
What difference did you notice with k_rf_cfg to 0x02, poor part throttle performance?Originally posted by karter16 View PostToday I finally got round to trying setting k_rf_cfg to 0x02 (from 0x12) to take the MAP sensor out of the final RF calculation path.
The result is that the car behaves and drives in the same way as if the MAP sensor is physically disconnected. The car runs in AlphaN + TABG adjustment mode.
I didn't personally have any doubt that this would be the case (although I know others did), but good to prove this. I think I mentioned previously that it seems like this would be good practice to take the MAP sensor out of the RF calculation path when doing the VE tuning process. I can't think of an objective way to measure this though. If anyone has any ideas I'm all ears!
- Likes 1
Leave a comment:
-
Today I finally got round to trying setting k_rf_cfg to 0x02 (from 0x12) to take the MAP sensor out of the final RF calculation path.
The result is that the car behaves and drives in the same way as if the MAP sensor is physically disconnected. The car runs in AlphaN + TABG adjustment mode.
I didn't personally have any doubt that this would be the case (although I know others did), but good to prove this. I think I mentioned previously that it seems like this would be good practice to take the MAP sensor out of the RF calculation path when doing the VE tuning process. I can't think of an objective way to measure this though. If anyone has any ideas I'm all ears!
- Likes 2
Leave a comment:
-
Continuing on with the MAP sensor work. I'll write this up properly and put it in the MAP sensor wiki, but for now here's the disassembled code listing. This is the function that takes the raw MAP sensor AD values from the ring buffer and calculates MAP pressure and manifold vacuum pressure.
It really would be very nice to have the actual parameter/variable names, but you'll have to suffer through my made up names (identified as all lowercase) :-)
Key things of note:
- The code loops through the ring buffer every time it runs and pulls and averages a number of valid samples (by default it's actually only 1 valid value that it samples).
- It then takes the raw value and offsets it and scales it according to the MAP scaler and offset parameters that have been known for some time.
- Manifold vacuum pressure is calculated as P_UMG (ambient pressure from the on-DME pressure sensor) minus MAP pressure.
- The function runs in both the segment task and the 10ms task.
- Likes 4
Leave a comment:
-
This one is interesting. This (function at 0x00011e3c) is a debug function that runs in the background task. It tracks the time in milliseconds since the function last run and captures the longest time in DB_TBGND_MAX and the average in DB_TBGND_AV. This would have been useful during development as the BMW engineers were adding to the codebase to monitor the system and make sure that the CPU was getting to the background task regularly enough.
- Likes 3
Leave a comment:
-
0x00ffeb36 is the 32 bit telegram from the MFL to the DME with the cruise control buttons status. This variable in turn is populated from the TPU config RAM (0x00ffff08) which is a shared RAM section between the DME and the TPU to allow transfer of data. The TPU facilitates the one-wire serial interface to the MFL.
Section 8.3.2 in 3.05 EGAS Safety Concept in the funktionsrahmen describes how this works and it seems that this is pretty much how it's implemented in the code as well. The safety concept code is really interesting to dig into and seems in general to be pretty close to how it's documented in the funktionsrahmen.
- Likes 2
Leave a comment:
-
0x00ffe508 and 0x00ffe50a appear to be "total count of interrupts" and "number of interrupt service routines currently in progress" (note it is possible for this to be greater than 1 as a higher priority interrupt will "interrupt" a lower priority ISR) respectively.
I've named these "sys_interrupt_counter" and "sys_active_interrupts".
edit: renamed to sys_isr_count to mirror BMW's naming of CAN_ISR_COUNTLast edited by karter16; 03-29-2025, 10:32 PM.
- Likes 2
Leave a comment:
-
If anyone has any info about these 4 curves it would be super useful to know. From the code I I've worked through so far I *think* that 0xe708 and 0xe732 respectively are possibly representing molar mass of the residual gas mix based on camshaft position, but not overly confident about that yet.
Leave a comment:
-
These are all of the parameters from the master binary which we currently don't have the actual names for. For anyone who's wondering the addresses below are as the prog binary references them, so the actual addresses in the partial would be the value below minus 0x80000. e.g. 00088826 would be 0x8826.00088826 00089840 00089a4c 0008a6c5 0008a97a 0008a97c 0008a97e 0008a9a2 0008a9a3 0008a9a4 0008a9a6 0008a9a8 0008a9aa 0008c354 0008c35a 0008c35c 0008c376 0008c378 0008c37a 0008c37b 0008c37c 0008c37e 0008c380 0008c382 0008c384 0008c3db 0008c558 0008c55a 0008c55c 0008c56c 0008c56e 0008c582 0008c59e 0008c5ba 0008c5e6 0008c682 0008d000 0008d002 0008d201 0008d202 0008d204 0008d205 0008d220 0008d222 0008d2ee 0008d2f0 0008d2f2 0008d2f4 0008d2f6 0008d2f8 0008d2fa 0008d2fc 0008d716 0008db30 0008df4a 0008dfac 0008e056 0008e088 0008e08a 0008e08c 0008e08d 0008e08e 0008e25c 0008e5e4 0008e5e8 0008e5ea 0008e5ec 0008e5ed 0008e5ee 0008e5f0 0008e5f2 0008e5fa 0008e5fc 0008e5fe 0008e600 0008e602 0008e604 0008e61e 0008e638 0008e69a 0008e69c 0008e69e 0008e6a0 0008e6a2 0008e6a4 0008e6c6 0008e6ce 0008e6d0 0008e6d2 0008e6d4 0008e6d6 0008e708 0008e732 0008e764 0008e7ae 0008e8fe 0008e918 0008e91a
And these are all the parameters from the slave binary which we currently don't have actual names for. I've included all the SMG parameters (0008a8xx to 0008aexx) which are missing actual names as well. Not sure if anyone has those, but thought I'd include them for completeness. To convert the below addresses to the offset in the partial it's what's below minus 0x88000. e.g. 0008808a would be 0x008a.0008808a 0008903f 0008a1da 0008a1dc 0008a1de 0008a1df 0008a1e0 0008a1e2 0008a1e4 0008a1fa 0008a1fc 0008a1fe 0008a200 0008a202 0008a204 0008a206 0008a228 0008a24a 0008a24c 0008a24e 0008a251 0008a252 0008a253 0008a254 0008a255 0008a256 0008a258 0008a259 0008a25a 0008a25c 0008a25e 0008a260 0008a262 0008a263 0008a264 0008a265 0008a80e 0008a811 0008a814 0008a816 0008a817 0008a818 0008a819 0008a81a 0008a81b 0008a81c 0008a81e 0008a821 0008a824 0008a826 0008a82a 0008a82c 0008a830 0008a832 0008a838 0008a83c 0008a83d 0008a840 0008a842 0008a844 0008a846 0008a848 0008a84a 0008a84c 0008a850 0008a852 0008a853 0008a856 0008a85a 0008a85e 0008a860 0008a862 0008a865 0008a866 0008a867 0008a883 0008a88a 0008a88c 0008a88d 0008a896 0008a898 0008a89c 0008a89d 0008a8a2 0008a8b8 0008a8ba 0008a8c4 0008a8d4 0008a8e2 0008a918 0008a96e 0008a9a0 0008a9aa 0008a9b4 0008a9be 0008a9cc 0008a9da 0008aa30 0008aa44 0008aa52 0008aad2 0008aadc 0008aae4 0008aeb4 0008e706 0008e707
Leave a comment:
-
ppm008 really appreciate your help - any chance I could list out all the parameter addresses I'm working on and see if you've got details for any others? I've come up with names for a bunch but if it's possible to confirm the actual names that would be even more ideal. (don't want to bug you too much though so feel free to say no!)
Leave a comment:
-
Amazing - thank you so so much!Originally posted by ppm008 View Post8a980 KL_TANM_PT1_INIT
8e5f4 K_RF_DIAG_F_KATH
8e5f6 K_RF_DIAG_F_VAN
8e5f8 K_RF_DIAG_SCHWELLE
8e848 KF_RF_KORR_DRREL
8e6c8 K_RG_R
8e6ca K_RG_V_HUB
8e6cc K_RG_ZYLANZ_BANK
Sent from my iPhone using Tapatalk
Leave a comment:
-
8a980 KL_TANM_PT1_INIT
8e5f4 K_RF_DIAG_F_KATH
8e5f6 K_RF_DIAG_F_VAN
8e5f8 K_RF_DIAG_SCHWELLE
8e848 KF_RF_KORR_DRREL
8e6c8 K_RG_R
8e6ca K_RG_V_HUB
8e6cc K_RG_ZYLANZ_BANK
- Likes 2
Leave a comment:
-
Great work as always mate.Originally posted by karter16 View PostI'm continuing to make good progress. I've now understood and named about 70 of the 112-odd CSL specific parameters. The names are of course my best guess as to what they would logically be named based on what I can figure out from BMW's naming convention. Unless anyone who has access to the actual names of these parameters is willing to share then my made-up names will have to do :-)
There's about 40 more parameters which I'm still working through to establish their purpose and what they should be called, but I'm very pleased with how it's going. I'm categorizing as I go (as can be seen in the screenshot below), which shows the modules which contain changes for 0401.
- Likes 1
Leave a comment:
-
I'm continuing to make good progress. I've now understood and named about 70 of the 112-odd CSL specific parameters. The names are of course my best guess as to what they would logically be named based on what I can figure out from BMW's naming convention. Unless anyone who has access to the actual names of these parameters is willing to share then my made-up names will have to do :-)
There's about 40 more parameters which I'm still working through to establish their purpose and what they should be called, but I'm very pleased with how it's going. I'm categorizing as I go (as can be seen in the screenshot below), which shows the modules which contain changes for 0401.
- Likes 4
Leave a comment:
-
I've renamed the function "calculate_pressure_from_air_mass()" in my previous post to "p_egbp_calc()" given, as I've been working through everything, I've identified that this function is looking up a value for exhaust gas back pressure.
This is the function with parameter and variable names that make sense:
The function looks up a curve which provides an estimated value of exhaust gas back pressure based on current ML (air mass flow).
This value is relative (e.g. it's just the back pressure component). so this is then added to P_UMG_FILTER (ambient air pressure) to get an absolute exhaust gas back pressure measurement.
This value is filtered through a PT1 filter and then checked for max/min values for plausibility, before returning.
Here's what the parameters look like:
The calculated value p_egbp is then used in the calculation of rg_m.
- Likes 2
Leave a comment:

Leave a comment: