Professional Documents
Culture Documents
Board index ‹ General Tuning Assistance - Cars, Motorcycles, Trucks ‹ Reverse Engineering
Edc15 multimap
Search this topic… 227 posts
1
2
3
4
5
…
10
nihalot
Newbie
Edc15 multimap
Wed May 31, 2017 6:41 pm
Hope this helps anyone, although there doesnt seem to be much interest in this ECU...
1st step is to find how the CANBUS is handled. There is a buffer in RAM in which the messages are stored before they
are transmitted.
On edc15, finding the buffer is easy. Example: Search for sequence of bytes: 0x280 or 0x288 or any other CAN id used
by the ecu...
Now that you've found the CAN buffer, refer to the FR CAN section.
MEM_EXT:0000C747 ; ROM:0009475Ew
MEM_EXT:0000C748 ; ROM:00094788w
MEM_EXT:0000C749 ; ROM:00094790w
https://www.ecuconnections.com/forum/viewtopic.php?f=211&t=51373 1/11
10/11/2021 13:42 Edc15 multimap - ECU Connections
MEM_EXT:0000C74A byte_C74A: ds 1 ; DATA XREF: ROM:00094696w
MEM_EXT:0000C74B ; ROM:000948CAw
To use the rpm gauge for showing the present map(or any other parameter like boost, SOI,etc), you'll have to modify
the subroutine writing to bytes 3 and 4 of the CAN id 0x280.
r4 contains the actual RPM. We will modify this vaue to whatever we want; to show the map selected in our case.
I inserted my call at 94784, to my routine. Its upto you to decide where to insert this call, but make sure you dont
change the original logic.
Find the code which writes to this bit, and you will find B_kuppl
As seen in above code, 0xC94B contains the status of the clutch pedal. But this is not the global variable. I suppose,
this is a temporary RAM address to which the clutch switch status is copied when this subroutine starts(so that as long
as the subroutine is still being executed, any change in the clutch status will not be updated. Otherwise, it's possible
that at the start of the subroutine the status of the clutch is different from that when the subroutine ends, resulting in
unpredictable behaviour)
Repeat this for other variables you want to use(cruise control status is on id 0x388/0x38A and brake pedals on 0x288)
Each datablock is referred using DPP0, DPP1 and DPP2. DPP3 is used for CAN.
datablock 1:
DPP0- 0x34
https://www.ecuconnections.com/forum/viewtopic.php?f=211&t=51373 2/11
10/11/2021 13:42 Edc15 multimap - ECU Connections
DPP1- 0x35
DPP2- 0x36
datablock 2:
DPP0- 0x38
DPP1- 0x39
DPP2- 0x3A
datablock 3:
DPP0- 0x3C
DPP1- 0x3D
DPP2- 0x3E
This is the code I use for switching between maps and displaying boost on RPM gauge.
$include (reg167.inc)
NAME MINIMON
ASSUME DPP3:system
; Stack-Memory
I suggest writing your own code, as mine can be a bit difficult to follow
- check if cruice control cancel button is pressed. If yes, store 1 in a free ram byte ( lots of free ram in this ECU,
0xC820-0xC82F is free on all the edc15's I've worked on, enough for our small subroutine) and exit the subroutine
This is done to "debounce" the button press (as long as the button is pressed, no change will take place)
- check if the "debounce" ram byte is 1, if yes, set it to 0 and switch maps( by changing the DPP's)
- To display the map selected understand how the rpm is displayed on the instrument cluster.
Lets say you want the rpm needle to show 2000rpm. There is a factor of 4.
So the transmitted CAN message for rpm is 2000*4= 8000 which corresponds to 0x1F40 in hex
All we need to do is replace the value in r4 with the value you want to display.
- Setup a counter for displaying the selected map. This is necessary because replacing r4 with the desired value once is
not enough. The main loop takes around 40ms to execute. So after 40ms r4 will get overwritten by RPM and the needle
will not show the value you wanted it to show. Look at my code for a better understanding...
Compile using Uvision or a compiler of your choice. Load the output hex file into Winols, search where your code
begins, and copy it to a free space in your flash.
Then insert a call to your new function. I chose to insert my call at 0x94784(0x14784 in WinOLS)
I will be posting a part 2 showing how you can save the selected datablock over ignition cycles.
www.tangentmotorsport.com
https://www.ecuconnections.com/forum/viewtopic.php?f=211&t=51373 3/11