Announcement

Collapse
No announcement yet.

CSL '0401' Program Binary Disassembly Notes

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Originally posted by SliM3 View Post

    Don't rely too heavily on that funktionsrahmen as it is not accurate!
    Yeah definitely - it's riddled with inaccuracies/additions that have been made in code after that version of the funktionsrahmen was written. Have found it useful though to explain some of the concepts / thinking behind various modules that you can then match up (or not) to what's in the code.


    Sent from my iPhone using Tapatalk
    2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats
    Build Thread:
    https://nam3forum.com/forums/forum/m...e46-m3-journal

    Comment


      Awesome work! Its nice to see more people diving into this. I have some IDA disassemblies of MSS54 from the CAN bus analysis, I dig them out and send them to you, maybe its of use for you.

      Would you be fine with me linking this thread or the Github page on MS4X.net?

      Comment


        Originally posted by sda2 View Post
        Awesome work! Its nice to see more people diving into this. I have some IDA disassemblies of MSS54 from the CAN bus analysis, I dig them out and send them to you, maybe its of use for you.

        Would you be fine with me linking this thread or the Github page on MS4X.net?
        That would be awesome thanks! The more we share the better! Yes please feel free to link to either or!


        Sent from my iPhone using Tapatalk
        2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats
        Build Thread:
        https://nam3forum.com/forums/forum/m...e46-m3-journal

        Comment


          I haven't posted any updates in a few days but have been making some progress.

          One of the key components of MpowerE36's work is the calculation of what he terms m_720_map, which is the calculated air mass per 720 degrees of crankshaft rotation. It's the main component of the calculation of RF from MAP.

          as he identifies the calculation of m_720_map looks like this:

          Code:
          m_720_map = m_720_1 - m_720_2 - m_720_3
          Now m_720_1 is calculated air mass based on the MAP sensor reading and nominal air pressure and temperature - that's the baseline if you will.

          m_720_2 is a compensation for pressure loss in the system (due to TETV (tank ventilation) and the like).

          m_720_3 Mpower_E36 has identified as "air mass correction per 720 degrees of crankshaft rotation" and referred to the table at 0xe42c - it looks like this:

          Click image for larger version

Name:	Screenshot 2025-03-14 at 8.52.59 AM.png
Views:	13
Size:	296.1 KB
ID:	297764

          Now the thing is, by default 0401 doesn't use this table. If we look at the segment task we see (in part):

          Click image for larger version

Name:	Screenshot 2025-03-14 at 8.54.08 AM.png
Views:	14
Size:	10.7 KB
ID:	297765

          k_rg_m_cfg's (my name) value is 1 in 0401:

          Click image for larger version

Name:	Screenshot 2025-03-14 at 8.55.03 AM.png
Views:	13
Size:	4.5 KB
ID:	297766

          So by default two functions are called. the second of these (what I've called rg_m_calc()) provides a calculated value for MpowerE36's m_720_3.

          And when I look through this function it is calculating a mass value based on things like intake and exhaust camshaft position, tabg (there are an entire separate set of tabg calculation functions solely for informing this function), etc.

          Now why would we need to know camshaft position and exhaust gas temperature? Because what m_720_3 is is the calculation of the mass of residual exhaust gas left in the cylinder (which varies, especially, based on cam overlap). Remember the DME intentionally recirculates some exhaust gas (particularly at certain RPM and loads) to reduce emissions and we can see this playing out in the table above (which isn't used by default, but gives us a representation of what the system is doing).

          Anyway - I have some more work to do to finish up documenting the interpretation of this function, but pleased to have figured this out and have a more concrete understanding of exactly what it is.
          2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats
          Build Thread:
          https://nam3forum.com/forums/forum/m...e46-m3-journal

          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:

            Click image for larger version

Name:	Screenshot 2025-03-14 at 6.15.12 PM.png
Views:	21
Size:	171.3 KB
ID:	297810

            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:

            Click image for larger version

Name:	Screenshot 2025-03-14 at 6.18.02 PM.png
Views:	21
Size:	41.4 KB
ID:	297811


            The calculated value p_egbp is then used in the calculation of rg_m.
            2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats
            Build Thread:
            https://nam3forum.com/forums/forum/m...e46-m3-journal

            Comment

            Working...
            X