Mono is the open source implementation of Microsoft's .NET platform and a runtime environment similar to Java. When using Mono, the mono application (called "assembly") is running inside a virtual machine. As the assembly code is platform independent, it can run on different machines and operating systems such as Windows, Linux or MacOS. They can be started with a double-click on the desktop icon as usual, but the user interface will in many cases have a bit different look and feel.
Before running the EcmSpy for Mono software, a Mono Runtime Environment has to be installed on the computer. The Mono installer can be downloaded from the Mono download area. Please follow the installation instructions provided with the download.
MODIFYING YOUR ECM WILL INVALIDATE WARRANTY, COULD DAMAGE YOUR ENGINE AND IS PERFORMED ENTIRELY AT YOUR OWN RISK! IN THE U.S.A., CANADA AND EUROPE, FEDERAL LAW MAKES IT ILLEGAL FOR ANYONE TO TAMPER WITH, DISCONNECT, REMOVE OR OTHERWISE RENDER INOPERATIVE ANY AUTOMOTIVE EMISSIONS RELATED CONTROL DEVICE. IN GENERAL, THE ENTIRE FUEL SYSTEM AND ALL ITS INDIVIDUAL COMPONENTS (INCLUDING THE EFI ECM) ARE CONSIDERED 'EMISSIONS RELATED CONTROL DEVICES'. THE PENALTIES FOR TAMPERING CAN BE SUBSTANTIAL.
If you modify your ECM, you may be legally obliged to notify your insurance company. It may also be illegal in some countries to ride on the road with a modified ECM. It should also be stated that modifying your ECM will certainly void your manufacturer's warranty! All numbers shown in lists, tables and maps are purely fictious and MUST NOT be applied to any existing bike.
If EcmSpy for Mono is to be installed on a Microsoft Windows system, start the installation procedure by double-clicking the installer application. The installation procedure is quite similar to every other done on a Windows system. If no suitable Mono runtime was found on your computer, you will get an informational screen and the installation will stop then.
Next the license agreement will be displayed. Please read the license agreement carefully before proceeding. You must accept the terms of this agreement before continuing with the installation. Click the "Next" button to continue.
The following panels will ask for the destination path for the EcmSpy software (default path is "C:\Program Files\EcmSpy_Mono") and the name of the Start Menu folder ("EcmSpy for Mono"). Change the default entries if you want and confirm by clicking the "Next" button.
Now the setup program copies all the required files to the destination folder. After the copying is done the PATH variable will be adjusted, if it didn't contain the Mono path already. A message box will inform you about that. You will have to log off and on again after the installation is finished to activate this new setup. No restart will be required.
You will find a new directory in your "My Files" folder, named "ecmspy" containing three subfolders:
Please note when upgrading from version 1.0 to version 1.1: The installer will copy all files found in the old folders (commonly: "C:\Program Files\EcmSpy_Mono\...") to the newly created folders in your personal area. Please check that all files you want to work with found their way into the new folders and copy missing files manually.
Please log off and on now if the path had been adjusted during installation. You will find a new shortcut on the desktop, double-click it to start the EcmSpy for Mono program. On slow computers the startup will take up to 15 seconds while the Mono runtime engine is started, which is then executing the EcmSpy assembly. You will notice a lot of harddisk activity during startup, please be patient and do not double-click the shortcut again.
If you plan to connect your computer to the ECM, you have to get a connection lead and probably install some drivers to make the cable work and set up a virtual COM port to talk to. Please follow the installations guide provided with the driver software in that case.
Linux? What the heck is Linux?
The menu bar contains several buttons (from left to right):
|
"Connect" - connect to the ECM |
|
"Execute" - start polling live data from the ECM |
![]() |
"Log" - toggles logging live data to file |
![]() |
"Info" - show application version and license agreement |
![]() |
"Register" - creates the public key file (required for activation) |
![]() |
"Quit" - quit application |
The status bar displays some short messages (in it's left half) and indicates a few operating modes by showing or hiding an icon:
![]() |
"Connected" (connected to the ECM) |
![]() |
"Executing" (polling live data) |
![]() |
"Logging" (writing live data to file) |
|
"Error" (the ECM signals a trouble code) |
![]() |
"Read Log" (reading log data from a log file) |
Some buttons possibly look different than shown above in your operating system, but the order stays equal.
The overview pane will always be shown when the EcmSpy assembly is started. No entries contain any data, as the application is not connected to an ECM yet.
Die Übersicht wird nach jedem Programmstart gezeigt. Das Programm ist noch nicht mit einem ECM verbunden, deswegen sind die Felder mit den Laufzeitdaten leer.
Click image for an unscaled view
After clicking the "Connect" button, the connection dialog pops up. Select the port you are using for the connector cable and choose the ECM type installed in your bike. Click the "OK" button if you want to connect to the ECM and automatically fetch the EEPROM data now, otherwise click the "Cancel" button to close the port selection dialog and remain unconnected. If you change your mind, you can always push the "Connect" button to connect to the ECM later.
If no EEPROM copy has loaded into the application yet (e.g. from a file), it will automatically fetched from the ECM as soon as the connection is established and the ECM type is supported by the application. A moving bar will keep you updated on the progress of reading data from the ECM:
Once connected to the ECM and the "Execute" menu button is pushed, the now empty text fields will then show live data, polled continously from the ECM.
Click image for an unscaled view
A second click on the "Execute" button toggles the button and stop polling. Even when polling is active you can change to other tabs (System, Diagnostics, ...), but it's not possible to start another action that requires a communication with the ECM (e.g. clear trouble codes). In this case, you will have to stop polling live data first. If a trouble code is set while polling is active, the warning sign will be switched on also. Time to stop polling and to proceed to the diagnostic pane then.
The diagnostics window will accept input only when connected to an ECM, otherwise no button will respond to mouseclicks. You can fetch the trouble codes from the ECM (current errors as well as stored errors), run diagnostic tests on several devices, perform a TPS reset and reset the AFV to 100% in case it has run amok and prevents the engine from starting. Depending on the ECM type and the actual setup only the rear AFV (the one available with DDFI and DDFI-2) or front and rear AFV (DDFI-3 only) will be set to a new value. The new AFV will be written to the ECM immediately and will also stored in the active copy of the EEPROM that got fetched when connecting to the ECM.
Click image for an unscaled view
If you recorded a log file, this can be used to (basically) check the O2 sensor. It's very important to cover the closed loop area as good as possible. The engine and O2 sensor must have reached their operating temperature, therefore the distance ridden should not be less then 25 mls or 40 km, and the duration not less then 30 minutes
O2 sensors are subjects to wear, and their responsiveness as well as the variation in voltage drops. On this pane, a narrowband O2 sensor's data will be read from a log file and statistically evaluated. This feature is highly experimental, therefore the results should be read with some care. Also, when reading the log file, additional maps are filled with data.
![]() |
|
Click image for an unscaled view
All device tests suitable for a special ECM type are described in the Service Manual. Select a test from the list and click the "Run Test" button. Unless the engine is running or the selected device is not available, a popup will appear while the test is running. The ECM does not send a test result, so it's your task to check if the tested device is working as expected.
To perform a TPS reset (DDFI and DDFI-2 only), follow the instructions and push the "Reset" button. The TPS voltage signaled to the ECM with a fully closed butterfly will then be stored in the EEPROM. The entry "TPS Zero Voltg." shows the value stored in the EEPROM, not the actual TPS voltage. This can be looked up at the overview tab.
To perform a TPS reset for DDFI-3 equipped bikes please follow the instructions in the service manual.
The system window is divided into three panes, which show the general configuration, the error mask configuration and some system information (readonly).
Click image for an unscaled view
The general configuration is devided into system, noise abatement and airbox pressure sensor configuration. Each tab offers a number of checkboxes, that can be marked (switched on) or unmarked (switched off) to enable or disable a specific feature or setup. The various settings are explained in the following lists:
![]() |
|
![]() |
|
![]() |
|
![]() |
|
The error mask configuration controls which errors will make a trouble code set and the CEL lit. The error mask configuration is split into several sections, each covering a part of the potential sensor, actor or ECM errors. Trouble codes not supported by the ECM (e.g. front O2 sensor, MAP sensor) will be deactivated and not respond to mouse clicks.
The system information pane shows some detailed data describing the ECM. Not all data is available for all ECM types.
All RPM and engine temperature limits as well as cooling fan switching points are configured in the limits window. Like the system configurion window this one is divided into three panes also. The RPM and temperature limits panes are divided into several subpanes as theses configurations are quite substantial, especially the RPM limits.
Click image for an unscaled view
When the engine hits a RPM or temperature limit, one of three different limits - depending on their "severity" - might apply:
![]() |
![]() |
Limits can apply directly when they are hit, and are called fixed limits then, or they get applied after a countdown had been running before, then they are called delayed limits. Limits and timers have a trigger value where they are activated and a reset value, where they are released.
|
|
RPM limits are different for high and low speed conditions (they differ dependent on the gear, the bike is in) and DDFI-3 type ECMs also apply a cold engine RPM limit.
![]() |
![]() |
Temperature limits consist of the limits themselfs (the temperatures, that will trigger a limit) and conditions, that control how and when limits may get tightened or relased. The conditions also control when the CEL starts and stops signaling an overheating condition.
The third and rightmost panel controls the cooling fan action, either with the engine switched off ("Key-Off") or on ("Key-On
![]() |
|
The fuel correction setups are bundled in the corrections window, which is devided into several panes also. The left panes contain those tables, which keep data for corrections regarding to engine temperature. The most common table will probably be the warmup enrichment table, accompanied by the front cylinder correction and the idle correction, which is similar to the warmup correction, but active in idle only.
Click image for an unscaled view
The right pane shows tabs for other corrections that are not temperature dependent or needed more than only one table.
![]() |
|
![]() |
|
![]() |
|
The O2 setup window contains all O2 sensor related setups, sensor data as well as closed loop and calibration mode area definitions.
Click image for an unscaled view
The left pane shows the O2 sensor's hardware setup, voltages which signal a rich, lean or error condition. The activation or deactivation of the O2 sensor will also be configured here.
![]() |
|
The right pane is divided into several tabs for configuration of the closed loop and calibration mode areas,the wideband O2 sensor setup and a (experimental) O2 sensor analysis area.
For ECM types that support the simultaneous operation of separate rear and front O2 sensors (DDFI-3 only), the closed loop operation can be limited to use the rear cylinder's sensor only, or switched off completely. Bikes that have two O2 sensors installed, will by default run an independend closed loop for the rear and the front cylinder.
![]() |
|
![]() |
|
EcmSpy for Mono supports up to two wideband O2 sensors, logged simultaneously with ECM live data. To enable wideband logging, select the manufacturer from the upper and the serial port, the wideband sensor is connected to, from the lower list. Currently Innovate and PLX are the only manufacturers supported. Next toggle the "Activate" button to start reading wideband data. As soon as live data aquisition is switched on and logging to file active also, wideband O2 sensor data will be added to the text (.msl extension) log file.
The AMC (active muffler control) setup is available on this page. The valve in the silencer is opened and closed depending on engine speed and (optionally) load. The AMC setup supports three switching points.
Click image for an unscaled view
The actuator is triggered by passing a RPM switchpoint, but the action can be suspended if a load condition has been set and is not fulfilled. In that case the valve position won't change. If the control voltage polarity is reversed, the switching point results are reversed too, instead of opening the valve it will now be closed. This allows two different control pattern. The default is to close the exhaust valve at idle or middle speed and open it at low or high engine speed.
The maps and the EEPROM pages are very similar, therefore get both covered in one section. The largest area in these windows is the data area, where the map or the EEPROM data will be shown, with editing buttons at the bottom. Data can be loaded from and saved to a file, and EEPROM data can also be fetched from or burnt into the ECM.
If a log file providing EGO correction, AFV or lambda data has been read and the fuel maps have not been touched until then, saving fuel maps to file will also save the additional averaged data from the log file. These map files could later be added to the "My Maps" area to set up your own map repository.
Click image for an unscaled view
Unskalierte Darstellung durch Klick auf das Bild
As more than one fuel map or spark advance table is stored within the EEPROM data, a pull-down menu lets you choose a map. Fuel maps and timing tables can be adjusted in three different kinds, selectable from the pull-down menu at the lower left:
To edit a cell, point to and click it. You will see the cell highlighted and it's value is shown in the spin-button entry at the bottom. This entry always shows values in decimal, EEPROM data got a text field at the left showing the value in hexadecimal also. By clicking the up and down spinbuttons or by typing a new number the entry can be changed. There are also some editing buttons available, to aid in adjusting the cell. The new value get's written back to his cell by clicking the "=" button right aside the entry or by hitting return. To "unhilight" a cell, click into the header row or into some free space around the data grid.
Sometimes changes do not get reflected immediately (e.g. boundary changes), in that case click into any cell to start editing and confirm the unchanged value by pushing the "=" button, this forces a map redraw with the current values.
To load or save a map or EEPROM data, push the apropriate button. A file selector appears and let's you choose a file. The last used directory will be stored and used again the next time you want to open or save a file. EcmSpy for Mono accepts .epr and .xpr files for EEPROM data and .msq files for map data. Text files (.txt) for EEPROM data are not supported.
After an EEPROM copy has been loaded into EcmSpy for Mono (either fetched from the ECM or read from a file), theses maps are filled with data from the EERPOM copy:
If a log file has been read (see also O2 Sensor Analysis), additional maps will get filled with data (if available):
Average Correction Front, Average Correction Rear
Unskalierte Darstellung durch Klick auf das Bild
This map shows the average EGO correction. EGO correction, read from the log file, will only be taken into account if the engine runs in closed loop, therefore values will be limited to the closed loop area of the fuel map (and one cell outside). The EGO correction value, as stored in the log file, will be averaged that way, that cells "nearby" get it added with a higher weight than "distant" cells. If the runtime data do not provide EGO correction for the front cylinder, the values from the rear cylinder are copied to the front cylinder's map.
Average AFV Front, Average AFV Rear
Unskalierte Darstellung durch Klick auf das Bild
This map shows the average AFV, as calculated when the engine is running in calibration mode. Therefore values in this map will be limited to the calibration area (and one cell outside) of the fuel map. The average AFV is calculated and weighted the same way as the average EGO correction. If the runtime data do not provide AFV data for the front cylinder, the values from the rear cylinder are copied to the front cylinder's map.
Hits Front, Hits Rear
Unskalierte Darstellung durch Klick auf das Bild
The distribution of readings from the log file across the fuel map. If a operating point lies between several cells, each cell touched will get one unweighted hit added.
Average Lambda 1, Average Lambda 2
Unskalierte Darstellung durch Klick auf das Bild
An average wideband O2 sensor lambda value, if wideband O2 data was available when writing the log file (see also Wideband O2 Sensors). These values are taken into account only, if the engine is not in acceleration or deceleration mode. When adding lambda values, the same weighting as for EGO correction is applied. If the runtime data do not provide data for two O2 sensors, the values from the first O2 sensor are copied to the second O2 sensor's map. If two O2 sensor are connected, it is assumed that sensor 1 monitors the front, and sensor 2 the rear cylinder.
"My Maps"
The EcmSpy application is now accompanied by the "My Maps" area, accessible via web and available to all users that activated their copy of EcmSpy for Mono. This allows you to upload, store and compare your maps, sorted into adjustment runs and versions. Click the "My Maps" entry in the EcmSpy website's menu to enter this area. The idea behind is to provide a tool to display changes between maps in an easy way and support the procedure as suggested in the Tuning Guide Version 2. If available, optional maps as the EGO correction or lambda values, will be displayed too.