From rusEfi
Jump to navigation Jump to search

See also

Troubleshooting trigger input

Troubleshooting hardware with rusEfi console

Use triggerinfo command (go to Messages tab, your can either type or use a button from the panel on the right) to confirm input pin(s). Also use triggerinfo command to see how many trigger events were registered by the firmware ("trigger#1 event counters up=x/down=y").

Use reset_trigger to reset counters if needed.


If using an unknown sensor, confirm the sensor signal. In case of Hall type sensor inside distributor, provide power to the sensor and read the output. Typical sensor would be switching from GND to floating.

Next step would be testing the ECU board itself:

test #1: GND input channels 11 and 12, tell me what you read on W211 and W212

test #2: float input channels 11 and 12, tell me what you read on W211 and W212

Troubleshooting synchronization rusEfi console

Type enable trigger_details in rusEfi console to enable verbose synchronization logging. Post from 'Messages" output on the forum.

"print sync details to console" in TS enables the same output but the output still goes only to rusEfi console.

Troubleshooting with TunenStudio

Enable Trigger Counters


Channel #1 counter would be "debug i1" gauge and channel #2 is "debug i2". These values should go up if you are cranking and that confirms that the events are being registered by rusEfi firmware.


Supported trigger types

To change your trigger settings, open TunerStudio, Engine->Trigger Configuration

Dev note: unit_tests executable produces triggers.txt file - gen_trigger_images.bat reads triggers.txt and produces these .png files. TODO: automate this further?

Universal skipped wheel

A basic wheel - assumes equally spaced teeth with a number of missing teeth. Tuner studio allows up to 500 teeth with 500 missing - functional limits are not tested.

One tooth




Dodge Neon 1995


Dodge Neon 1995 only crankshaft sensor


Dodge Ram


Dodge Neon 2003

Chrysler NGC 4 cylinder


Dodge Stratus

Chrysler NGC 6 cylinder


Ford Aspire


GM 7x


Mazda Protege SOHC


Mazda Miata NA


Mazda Miata NB


Mazda Protege 1993 DOHC





360 slot trigger not ready yet, no test vehicles :(


Universal 36/1


Universal True 60/2

If you also have a CAM sensor somewhere see


1 + 60/2

Please use this one only if your CAM sensor position matches this picture exactly. For a CAM which does not match this picture exactly, see above for universal 60/2 with cam input.


VW 60/2

VW special understanding of 60/2 with a wide tooth instead of of just missing tooth.

See also


Toyota 2JZ

3/34 version


1/12 version


GM LS 24 tooth


Subaru 7+6 tooth


Jeep 18-2-2-2


Honda 1+24


Honda 4+24


Honda 1+4+24


Honda CBR600


Unknown trigger type


TODO: implement a feature so that trigger could be defined via TunerStudio

If your have an unknown or an unsupported trigger shape, once you've confirmed that trigger events are getting into the software (see "troubleshooting" sections) you need to crank your engine while rusEfi console is connected with Engine Sniffer tab active.

With long enough cranking you should get a visual log of your trigger signal, that would give you some idea of what kind of trigger shape you have. Save an image and post it on a forum. It's recommended to remove spark plugs while investigating trigger shape to make your cranking more even.

Once preliminary shape of a new trigger is added into rusEfi firmware based on the Engine Sniffer image, second step is getting a more precise recording of the shape with exact angles. This is done with spark plugs removed and Sensor Sniffer mode set to TRIGGER. With long enough cranking a chart of trigger shape would appear on the Sensor Sniffer tab and the console log file (see out/ folder next to rusefi console binaries) would contain the angles. Please post this log file on the forum for the developers to encode the new trigger shape into the software.

How this works

Trigger decoding cycle starts at 'synchronization point' - that's the trigger fall or rise event which satisfies the 'synchronization gap' condition. Since trigger synchronization point usually has nothing to do with top dead center #1 (TDC), we have have 'globalTriggerAngleOffset' parameter - that's the offset between synchronization point and TDC.

For example, 'set global_trigger_offset_angle 0', TDC is set to synchronization point, the green vertical line is TDC mark:


Now the real TDC, 'set global_trigger_offset_angle 175' command:


Note the different location of the green TDC line. Also note how all Injector #1 pulse has moved (injector #3 is the lowest signal on these pictures) - that's because ignition and injection are scheduled based on TDC point.

While running ignition is controlled by ignition timing map, you can also offset the whole ignition timing map using 'set ignition_offset' command. Ignition dwell is controlled by dwell time curve.

Injection could be offset using 'set injection_offset X' command.

While cranking, you can set angle-based ignition instead of timing map & dwell based ignition. In angle-based mode, dwell is defined in crankshaft angle duration and timing is constant. set cranking_charge_angle and set_cranking_timing_angle.

See 'trigger decoding' in

Trigger Simulation

rusEfi has a feature of trigger signal emulation on Trigger Simulator Pins. All channels of trigger input would be simulated on corresponding channels of Trigger Simlator.

At the moment rusEfi has no means for VVT/camInput simulation.

Q & A

Q: what is globalTriggerAngleOffset configuration parameter?

A: On engine sniffer tab in rusEfi console, there is a signal front with "0" next to it. That's the trigger synchronization event on the primary trigger line. The trigger synchronization always happens at one of the rise of fall of the primary trigger. globalTriggerAngleOffset is the angle distance between synchronization point and cylinder #1 top dead center. TDC#1 is the green line by the way.

Sync point highlighed.png

Q: how do I confirm that ECU knows the correct top dead center #1 (TDC) location?

A: Disable injection. Set whole timing map to 0 or to 10, whatever is easier to confirm with a timing gun. Set whole IAT timing correction to zero so that it does not correct your timing. Crank the engine (injection disabled) and confirm that timing advance on the console/TS gauge matches what the timing light is giving you. If there is an offset adjust globalTriggerAngleOffset accordingly. It's a good idea to confirm that the output LED for the corresponding channel is blinking and bench-test spark if possible.

Q: what are ignitionOffset & injectionOffset configuration parameters?

A: there are one of the ways of offsetting the whole timing map or define the injection angle. Both should stay zero under normal circumstances.

Q: where does camshaft signal go and where does crankshaft go?

A: it depends, but a rule of thumb is that IF you have BOTH camshaft position sensor and crankshaft position sensor, camshaft is always trigger#1 input and then crankshaft is trigger#2. This case we use trigger#1 (cam) to know which cylinder is which, and trigger#2 (crank) to know precise angle position.

Here is a picture with a one-teeth cam sensor and a 60/2 crank:


Q: what does total errors mean in triggerinfo output?

A: this is total count of how many times we detected unexpected number of teeth per trigger cycle since ECU reboot. isError means that we had issues with 4 of the last 6 cycles. We also turn triggerErrorPin on in case of trigger error - you can put an LED to see trigger error. total errors also could be displayed as TS gauge.

Q: Sync is not reliable, how do I see more details?

A: try enable trigger_details command in console or "print sync details to console" option in TS. This would produce some helpful messages with synchronization progress details.

Q: I have a 60/2 crank wheel and I would like to use a cam sensor for fully sequential mode. Should I use "4-stroke with Cam sensor"?

A: You can only use "4-stroke with Cam sensor" if your composite trigger shape is known to rusEfi. If you are adding a cam to 60/2, rusEfi probably does not know this combination with all the angles precisely. The way to add sequential to a skipped-tooth crank wheel is via cam input mode, same as used for VVT (see also This case your known crank shape is used for shaft position lookup and your cam is only used for phase lookup - exact cam sensor angular position is less important.

See also