This page is available as a standalone html document also, that could be stored on your PC and viewed without being connected to the Internet. For downloading this page, please click here.
Mono is the (Novell sponsored) open source implementation of Microsoft's .NET platform and a runtime environment similar to Java. When using Mono, source code is assembled into intermediate instructions running inside a virtual machine provided by the Mono application. As the assembled code is platform independent the same "assembly" (which is Mono speak for an executable program) can run one different machines and operating systems such as Windows, Linux or MacOS. Clever helper programs make the assembly look like a native program, that can be started with a double-click as usual, but the user interface will in many cases have a bit different look and feel.
Before installing the EcmSpy software the 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 instruction provided with the download. When installing the EcmSpy software after the Mono Runtime Environment all required adjustment will take place by the setup program, so that the assembly will be fully integrated into the hosting operating system. Regarding Windows this is mainly achieved by extending the user environment, so that the PATH variable contains the directory where the Mono executables and libraries are installed. The operating system will then find them automatically.
EcmSpy for Mono knows two operating states: one is offline (not connected to the ECM), the other is online (connected to the ECM and EERPOM data fetched). Viewing live data, retrieving or clearing diagnostic codes, clearing the AFV and running tests is possible only in online mode, when your computer is connected to the ECM, all other actions are performed offline, so when you tick a checkbox or change a map value, this happens only in your computer's memory and changes are made only to the copy of the EEPROM hold in there. You must then burn the EEPROM to the ECM to transfer the changed data and activate the new setup. EEPROM data can also be read from or written to files stored on the computer's hard disk or whatever mass storage is connected to it. All actions that need direct access to the ECM are disabled while in offline mode. To connect to the ECM plug in the cable into the computer and the diagnostig plug of the ECM and click the "Connect" button in the leftmost position of the menu bar.
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.
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 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. After the welcome panel you will get a menu to select the Mono version that shall run the EcmSpy assembly if more than one Mono version is installed. If no Mono runtime at all was found on your computer, you will get an informational screen which will tell you about the requirements to successfully run EcmSpy for Mono.
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.
If no Mono environment was found on your computer, instructions how to manually adjust the PATH variable will be shown next. Otherwise the installation is now completed, so click the "Finish" button to close the installer window.
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" - connects to the ECM |
![]() | "Execute" - starts polling live data from the ECM |
![]() | "Stop" - stops polling live data from the ECM |
![]() | "Log" - toggles logging live data to file |
![]() | "Info" - no action yet |
![]() | "Register" - exports your public key to a file (required for registration) |
![]() | "Quit" - quit this application |
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, covered by the connection dialog. Select the port you are using for the connector cable and the ECM installed in your bike. Click the &quo;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, yo can press the "Connect" button to connect the EcmSpy software to the ECM.

Click image for an unscaled view
Once connected to the ECM and the "Execute" menu button is pushed, the now empty text fields will then show a selection of live data, polled continously from the ECM.

Click image for an unscaled view
The "Stop" button will now be sensitive and the pane will be expanded that the tabs get covered. This is to prevent from changing to other tab pages while the polling is active. The overview pane is the only window that allows for continous polling. A working connection to the ECM is also reflected in the status bar at the bottom of the window. The ECM type is printed and the green checkmark next to it will be lit. 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
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. To perform a TPS reset for DDFI-3 equipped bike 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 response 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 pints 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 subwindows 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 or lean condition and the midpoint voltage, which represents the target of the closed loop action (midpoint voltage is not availabe for DDFI-3). The right pane is divided into three tabs for configuration of the closed loop and calibration mode areas and the (yet very experimental) wideband O2 sensor setup. The two boundary tables build an area, where the closed loop or calibration feature will be active. The results of these to areas (EGO correction in closed loop, AFV in calibration mode) can be limited to not exceed specific values, in case a defective sensor might signal wrong data. 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.
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.

Click image for an unscaled view

Click image for an unscaled view
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. To "unhilight" a cell, click into the header row or into some free space around the data grid.
Some changes do not get reflected immediately (e.g. boundary changes), in that case click into any cell to start editing and confirm the unchange 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 until the application is quit. EcmSpy for Mono accepts .epr and .xpr files for EEPROM data and .msq files for map data. Text files for EEPROM data are not supported.
EcmRead for Mono is a little helper, whose only task is to fetch EEPROM data from any DDFI-ECM (even those not currently supported by EcmSpy for Mono) and save these to file or, vice versa, read a data file and write that content to the ECM's storage. It can run without EcmSpy for Mono installed, but requires a Mono runtime environment. It's usefull in all situations, where an offline access to the EEPROM data is sufficient, for example when using Mark Mansur's excellent TunerPro software as an offline editor for EEPROM contents.

Click image for an unscaled view
The user interface is almost self explaining: select the interface, which the cable is connected to, and the type of ECM that will be accessed. Then klick the "Fetch" or "Burn" button, depending on what you want to do.

Click image for an unscaled view
Data fetched from the ECM will be stored to file, whose name starts with the ECM typ followed by a timestamp, and which will have a ".xpr"extension. By selecting such a file when sending data to the ECM, the file content will be transmitted and written into the ECM's storage. The message box above the buttons will show messages for all read and write activities, and, more important, show errors that might have occured. Recoverable errors, such as checksum errors or transmission timeouts, will stop the whole proccess if they appeared more than five times.
Logfile Conversion is the second helper wich is part of the EcmSpy for Mono application. EcmSpy for Mono and EcmSpy for Palm store logfiles in a binary format, which is not useable for logfile viewing programs as Phil Tobin's very helpfull MegaLog Viewer application. With the help of this conversion program binary data can be written to a text file, which could then be used as an input file for logfile viewers. It's always recommended to store the binary files for backup, as they can not be rebuilt from the text files, but vice versa it's always possible. The logfile conversion needs a working EcmSpy for Mono installed, as it's accessing the databases that come with EcmSpy for Mono.

Click image for an unscaled view
After starting the program push the "Select File ..." button and choose a file to be converted. After conversion is completed, a message box will show the path and name of the text file created. The output file has the same name and the same path as the input file, just it's extension changed from ".bin" to ".msl".

Click image for an unscaled view