Eliminating Phantom Knock

Through Modification of the E931 ECU Code


To "order" a chip with this feature, contact information is below (click here).


Before examples of modified code are given, it is important that one understands both the nature of the code changes and the nature of the phantom knock which they are fighting.

Phantom knock is the occurrence of a random knock sum (generally the maximum value that can be read by the ECU, 43), even when there is no true detonation.  This generally occurs at very light load conditions, when the actual risk of engine damage, as well as the actual knock propensity, it very low.

When this occurs, there are two main side effects which can be very detrimental to power, and drivability in general; the timing retard that results directly from the knock sum, and the additional timing retard from that point on that will occur due to the "octane" value dropping rapidly.  With a knock sum of 43, the ECU will retard approximately 15 degrees of timing, which can be compounded by the loss of timing at all points though a lower octane value.

Mitsubishi included code in the stock ECU that had the knock retard feature ignored below a certain throttle threshold (18%).  The main problem with this is twofold:  that throttle value is not high enough, and ignoring the knock sum does not work due to the slow decay of the knock sum.  When knock is detected, the ECU obviously pulls timing.  However, when the audible (to the knock sensor) detonation event goes away, the knock sum is not instantly zeroed out.  Instead, the knock sum drops (decays) slowly, in order to prevent the oscillation between knock and knock retard.  This means that if the knock sum pegs at 43, even if you ignore it at light throttle, the knock will likely still be there when you get to a higher throttle point or go into boost.  For this reason, simply raising the factory knock retard threshold will only serve to slightly improve the condition. Something must be done to eliminate knock entirely when the risk is low enough.

If the ECU would zero out the knock sum, instead of simply ignoring it, the condition would be much improved.  If the knock sum has been determined to be a non-threat, there is no point to having a knock sum at all.

The following code segment is an extension of the simple octane reset and skip code that is mentioned on the DSM EPROM editing page here:


Here is the extended version of the code, utilizing a section that zeros out the knock sum below a certain airflow per rev threshold


5B9D: 86 FF         LDAA $00FF     ; Load 255d (max) to A

5B9F: 97 52         STAA L0052      ; Store 255d (FFh) to octane (mem address 52)

5BA1: 96 E1         LDAA L00E1    ; Load airflow per rev to accA

5BA3: 81 8C        CMPA $0082     ; Compare to 8Ch (130d), which is approximately 0 psi

5BA5: 23 03         BLS 5BAA         ; If E1 is greater than 130, do nothing; jump out

5BA7: 7E DB F3   JMP DBF3        ; Jump to end of octane code area

5BAA: 86 00         LDAA $0000     ; Load 00h (zero) to accA

5BAC: 97 8B         STAA L008B     ; Store 00h (zero) to knock sum address

5BAE: 7E DB F3   JMP DBF3          ; Jump to end of octane code area


The value of 130d (82h) was chosen after datalogging, and finding a point that correlated to slightly less than atmospheric pressure in the intake manifold.


If you feel that you still want to retain the "octane" feature, then you can use the code below.  This code will allow you to reset the knock sum to zero while under low load, but still retains the octane feature under boost.


5B9D: BD CE D0                   JSP 4ED0               ; Jump to subroutine at 4ED0

5BA0: 01                                NOP                        ; No op (this byte moved to 4EDE)


4ED0: 96 E1                           LDAA L00E1        ; Load airflow per rev value to acc A

4ED2: 81 8C                           CMPA $0082         ; compare to 82h (130d), about 0 psi

4ED4: 22 04                            BHI 4EDA             ; If airflow per rev is greater than 82, skip knock set

4ED6: 86 00                            LDAA $0000         ; Load 00h (zero) to accA

4ED8: 97 8B                           STAA L008B        ; Store zero to knock sum address

4EDA: 96 D3                         LDAA L00D3        ; Load L00D3 (from octane code)

4EDC: 81 20                           CMPA $0020         ; compare to 20h

4EDE: 39                                 RTS                        ; Return to octane code area.



If you do not have the hardware that is necessary to modify your ECU code, or you do not feel comfortable doing so, e-mail me and I can send you a chip with these modifications, or if you wish to keep your current chip I can add this code to it.  I can be e-mailed at ktarry(at)comcast(dot)net.