Announcement

Collapse
No announcement yet.

SAP and Cat heating sequence delete

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

    SAP and Cat heating sequence delete

    Hey guys,
    Does anyone know where to find the offset/values to disable the cat heating sequence?
    I found this related to SAP delete on m3forum.net using Wayback Machine

    I'm now looking to know how to delete the cat heating sequence, as my car starts and runs rough since I removed the cats for the first 5-10 seconds, then quiets down.

    This howto will explain the relatively simple procedure of disabling the secondary air pump and its associated DTCs.

    The first thing to understand is where to find the configuration values for these variables within your DME. To do this, you MUST know what version your DME is. Please see this thread about how to make that determination.

    The next step is to set both K_SLS_UB_MIN and K_SLS_UB_MAX to the same voltage values, sufficiently high that they're never reached in any normal circumstance. These values are sequential; thus, the offset given is the start of K_SLS_UB_MIN. Another bit that can be set is the K_SLS_OBD. Typically, it is set to 1, which reports the condition via OBD. Setting this to 0 will instruct it to remain quiet.
    211321000502 MSS52 0x74B4 0x74B8 9.0 V 16.0 V
    211321000901 MSS52 0x74B4 0x74B8 10.0 V 15.0 V
    211321001301 MSS52 0x74C4 0x74C8 10.0 V 15.0 V
    211321001401 MSS52 0x74C4 0x74C8 10.0 V 15.0 V
    211321001501 MSS52 0x74C4 0x74C8 10.0 V 15.0 V
    211321001601 MSS52 0x74C4 0x74C8 10.0 V 15.0 V
    211321001701 MSS52 0x74C4 0x74C8 10.0 V 15.0 V
    211322000701 MSS54 0x7506 0x750A 9.0 V 16.0 V
    211322000901 MSS54 0x75C6 0x75CA 9.5 V 17.0 V
    211322001101 MSS54 0x75E6 0x75EA 7.0 V 17.0 V
    211322001301 MSS54 0x75C4 0x75C8 7.0 V 17.0 V
    211322001501 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211322001701 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211322002101 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211322002401 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211322002601 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211322002801 MSS54 0x75D4 0x75D8 9.5 V 17.0 V
    211323001601 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323001801 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323001901 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323002001 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323002301 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323002501 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211323002701 MSS54HP 0xC100 0xC104 9.5 V 17.0 V
    211325000301 MSS54HP {csl} 0xC100 0xC104 9.5 V 17.0 V
    211325000401 MSS54HP {csl} 0xC100 0xC104 9.5 V 17.0 V
    Typically, the following code will be seen (E46 M3), the byte in BLUE represents the K_SLS_OBD switch, and the bytes in RED represent the K_SLS_UB_MIN and K_SLS_UB_MAX values respectively:

    01 FF 04 B0 5F AA

    Typically, the following code will be seen (E39 M5) with the same colour designations:

    01 FF 04 B0 64 96

    To get the voltage value, convert the hexadecimal value to decimal, then divide it by ten, thus, for all commonly found values:


    0x5A = 90 / 10 = 9.0 V
    0x5F = 95 / 10 = 9.5 V
    0x64 = 100 / 10 = 10.0 V
    0x96 = 150 / 10 = 15.0 V
    0xA0 = 160 / 10 = 16.0 V
    0xAA = 170 / 10 = 17.0 V


    To prevent the SAP from starting, simply set these values to a sufficiently-high number. 18.5 V is a popular suggestion from SliM3 and has been confirmed, thus:

    18.5 * 10 = 185 = 0xB9

    So, rewrite the string with the following two bytes changed:

    01 FF 04 B0 B9 B9

    If you plan to fully disconnect your Secondary Air Pump, you'll also need to delete DTC 0xAA. Please see this thread for information regarding DTC suppression.

    In addition to the modification of the K_SLS_UB_MIN and K_SLS_UB_MAX values, the K_SLS_OBD value can also be easily disabled. This is performed by further modifying the string as follows by changing the '01' to '00':

    00 FF 04 B0 B9 B9

    For reference, the block-off plate part number is 11121438086, its accompanying gasket is 11727514860.​​

    #2
    I've a couple of questions related to my post above
    1. Does the change from 01 FF 04 B0 5F AA​ --- to ---> 00 FF 04 B0 B9 B9​ suggested affects the cat heating sequence or does it just prevent the SAP from starting (or is it the same thing?). I read somewhere else that cat heating sequence is not just the SAP but also retarded timing, causing fuel to heat up the cats. Is that true?
    2. What does the voltages K_SLS_UB_MIN/MAX represent physically and why is 18.5 a good value?
    3. The text says that the first byte is to enable/disable obd reporting, what's that? is that any useful?

    Comment


      #3
      Cat heating is a separate mechanism. If you want to disable cat heating I believe the easiest way is to zero out the second column in KL_KATH_T_AKTIV

      Click image for larger version

Name:	Screenshot 2026-07-03 at 11.24.08 AM.png
Views:	128
Size:	17.1 KB
ID:	360218

      This table is used to calculate the duration of the cat heating period, setting it to 0 means it never starts.

      K_SLS_UB_MIN/MAX: UB is supply voltage (from the battery/alternator). Essentially if it's outside of allowed bounds then the SLS system will not operate. By setting the minimum value excessively high it ensures that the SLS system never operates.

      2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
      Build Thread | Community Patch | MSS54 DS2 Tool

      Comment


        #4
        nice, thanks! Do you know anything about cat protection? My car has no cats, as it's a track car I'm setting up. Is it worth disabling? I heard of k_ti_f_kats_max​, but the fact that is has "max" in the name and that typically cat protection involves fuel and ignition makes me think that setting this to 1.0 as suggested in https://nam3forum.com/forums/forum/s...cat-protection may be an incomplete solution.

        I'm also not sure if it's needed, or if in normal track conditions I may never reach the threshold temperature to get into protection mode.

        Comment


          #5
          Originally posted by karter16 View Post
          Cat heating is a separate mechanism. If you want to disable cat heating I believe the easiest way is to zero out the second column in KL_KATH_T_AKTIV

          Click image for larger version

Name:	Screenshot 2026-07-03 at 11.24.08 AM.png
Views:	128
Size:	17.1 KB
ID:	360218

          This table is used to calculate the duration of the cat heating period, setting it to 0 means it never starts.

          K_SLS_UB_MIN/MAX: UB is supply voltage (from the battery/alternator). Essentially if it's outside of allowed bounds then the SLS system will not operate. By setting the minimum value excessively high it ensures that the SLS system never operates.
          Is there also a third component to the cold start routine?

          Is it timing or fuel enrichment?

          Comment


            #6
            Originally posted by ac427 View Post
            Is there also a third component to the cold start routine?

            Is it timing or fuel enrichment?
            There's quite a few components to the cold start routine as a whole. Timing, Fuelling, Secondary air pump, cat heating, VANOS, Lambda control, Torque manager (mostly torque reserve), filling, electronic throttle. Possibly others, but those are the ones I can think of off the top of my head.
            2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
            Build Thread | Community Patch | MSS54 DS2 Tool

            Comment


              #7
              Originally posted by E46m3zcp View Post
              nice, thanks! Do you know anything about cat protection? My car has no cats, as it's a track car I'm setting up. Is it worth disabling? I heard of k_ti_f_kats_max​, but the fact that is has "max" in the name and that typically cat protection involves fuel and ignition makes me think that setting this to 1.0 as suggested in https://nam3forum.com/forums/forum/s...cat-protection may be an incomplete solution.

              I'm also not sure if it's needed, or if in normal track conditions I may never reach the threshold temperature to get into protection mode.
              heinzboehmer's explanation in that post is correct. ti_f_kats_1/2 are multiplicative factors for overall fuelling. setting k_ti_f_kats_max to 1.0 means that these factors are always limited to exactly 1.0 and therefore have no effect on overall fuelling.

              Re timing, as far as I can tell there is no ignition intervention as part of cat protection (This is incorrect, see post #12). It appears the approach taken is to simply dump more fuel to cool the catalyst.

              If you set k_ti_f_kats_max to 1.0 I don't believe there's any additional benefit messing with the threshold temp.
              Last edited by karter16; Yesterday, 12:17 PM. Reason: edited to note that information about ignition control is incorrect - see post #12
              2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
              Build Thread | Community Patch | MSS54 DS2 Tool

              Comment


                #8
                Ok, just to make it obvious, can we confirm what cat protection actually is? My mental model: it's something completely separate from cat heating on startup. It kicks off if the egt goes above a certain threshold to avoid damage to the cats due to high tempertatures. It protects the cats by adjusting the mixture by a multiplicative factor set to 1.35 from factory. What the factor exactly means in term of air fuel mixture is unknown but as of any such factor, setting it to 1.0 cancels its effect.

                Note: what I mean by "we don't know" is that we don't really know what it multiplies/divides. A 35% variation in AFR is very unlikely. Disassembly of the binary might tell us.
                Last edited by E46m3zcp; 07-13-2026, 03:39 AM.

                Comment


                  #9
                  Following thread to stay educated

                  Comment


                    #10
                    Originally posted by E46m3zcp View Post
                    Ok, just to make it obvious, can we confirm what cat protection actually is? My mental model: it's something completely separate from cat heating on startup. It kicks off if the egt goes above a certain threshold to avoid damage to the cats due to high tempertatures. It protects the cats by adjusting the mixture by a multiplicative factor set to 1.35 from factory. What the factor exactly means in term of air fuel mixture is unknown but as of any such factor, setting it to 1.0 cancels its effect.

                    Note: what I mean by "we don't know" is that we don't really know what it multiplies/divides. A 35% variation in AFR is very unlikely. Disassembly of the binary might tell us.
                    Correct. It is entirely separate from cat heating mechanism and is to avoid damage at high temps as you state. It is a multiplicative factor applied to injection time.

                    Click image for larger version

Name:	Screenshot 2026-07-14 at 8.42.07 PM.png
Views:	35
Size:	20.1 KB
ID:	361030
                    TI_F_KATS1/2 is the multiplicative factor for cat protection.

                    It in turn is an input factor into calculating injection time which is a composite of TI_VORST (pre-injection time), TI_F_ADAPT1/2 (adaption factor) and TI_F_KATS1/2 (cat protection factor).

                    Click image for larger version

Name:	Screenshot 2026-07-14 at 8.44.08 PM.png
Views:	33
Size:	17.3 KB
ID:	361031
                    That value is then used to calculate injection time for each cylinder. K_TI_F_KATS_MAX therefore limits a maximum increase of injection time by 35% for the purpose of cat protection.
                    2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
                    Build Thread | Community Patch | MSS54 DS2 Tool

                    Comment


                      #11
                      Another option would be to completely turn-off cat protection by disabling the integral controller which will also prevent any ignition offsets as well as fuel enrichment. You can also disable the whole EGT config if you want to do without the sensor.

                      I-Control Disable
                      - Set KL_TI_KATS_RF_SCHW_N (Fuel Injection_CAT PROTECT INTEGRAL CONTROLLER) rf values above the normal operating thresholds (1.6-2.0 rf)
                      and/or
                      - Set K_TI_KATS_TABG_EIN (Fuel Injection_CATALYST PROTECTION - EGT ENABLED) EGT value to max (I did 1200* C)

                      EGT Config Disable
                      - Set K_TABG_CFG (EGT_CONFIGURATION) value to '1' (0=with sensor/1=without sensor)

                      Comment


                        #12
                        Okay - I've had a chance to look into this a bit more fully (disassembly of ti_kats() below).

                        Key things to note.
                        • Ignition IS part of cat protection as you suspected E46m3zcp. It can be seen at lines 22 thru 36 where TI_F_KATS_STEUER1/2 are calculated. This value represents the fuelling adjustment factor as a result of ignition being retarded for cat protection.
                        • TI_F_KATS1/2 is the overall cat protection factor, factoring in both ignition retardation and fuelling increase for cat cooling (protection).

                        What this means.
                        • The correct way to disable cat protection as a whole is to set K_TI_F_KATS_MAX to 1.0. as this is applied to the resultant TI_F_KATS1/2 overall factors.
                        • Disabling the integral controller doesn't disable the ignition-related portion of cat protection.

                        Click image for larger version

Name:	Screenshot 2026-07-16 at 8.07.50 AM.png
Views:	3
Size:	150.3 KB
ID:	361283
                        Click image for larger version

Name:	Screenshot 2026-07-16 at 8.08.03 AM.png
Views:	3
Size:	173.6 KB
ID:	361282
                        2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
                        Build Thread | Community Patch | MSS54 DS2 Tool

                        Comment


                          #13
                          Originally posted by SliM3 View Post
                          You can also disable the whole EGT config if you want to do without the sensor.
                          I'd just note that for anyone running the CSL software (0401) they should not remove the EGT sensor or disable it as it is an input to the air-fuel mix (rf_korr) calculation (Only for the CSL, not for normal M3 software).
                          2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
                          Build Thread | Community Patch | MSS54 DS2 Tool

                          Comment


                            #14
                            What you have pointed out above in your disassembly is the feedforward function that is enabled when ignition is retarded due to knock control (kr_dtz_sum[bank 1/2]) and knock adaptation (ka_dtz_sum[bank 1/2]) not cat protection. Knock is a clear indication that EGT is on the rise and the resulting feedforward factor is essentially a request for additional fuel enrichment from the cat protection routine. So in a nutshell, instead of the DME waiting for the EGT sensor (100ms loop) to detect temp rise it uses ignition retard as the early warning signal and the offsets for calculating a positive or negative threshold & ultimately the feedforward factor: Knock detected > Timing retarded > EGT expected to rise > Add a small amount of enrichment immediately > catalyst temperature under control.

                            Comment


                              #15
                              Originally posted by SliM3 View Post
                              What you have pointed out above in your disassembly is the feedforward function that is enabled when ignition is retarded due to knock control (kr_dtz_sum[bank 1/2]) and knock adaptation (ka_dtz_sum[bank 1/2]) not cat protection. Knock is a clear indication that EGT is on the rise and the resulting feedforward factor is essentially a request for additional fuel enrichment from the cat protection routine. So in a nutshell, instead of the DME waiting for the EGT sensor (100ms loop) to detect temp rise it uses ignition retard as the early warning signal and the offsets for calculating a positive or negative threshold & ultimately the feedforward factor: Knock detected > Timing retarded > EGT expected to rise > Add a small amount of enrichment immediately > catalyst temperature under control.
                              Yes I'm aware of that, the point though is that it IS part of cat protection (part of this function). The knock control is used as a feedforward input as you say. TI_TZ_OFFSET_KATS (lookup from RF in partial throttle mode and from N in full throttle mode) is the factor that is used to determine how much additional fuelling is needed. kr_dtz_sum and ka_dtz_sum are just inputs to the calculation of the total amount of cat protection enrichment required, which is delivered via the two mechanisms as you say (feedforward + integral controller).
                              2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
                              Build Thread | Community Patch | MSS54 DS2 Tool

                              Comment

                              Working...
                              X