Notices
ECU Flash

9653xxxx cold start ignition maps: need clarification

Thread Tools
 
Search this Thread
 
Old Dec 11, 2009, 09:48 AM
  #1  
Evolved Member
Thread Starter
iTrader: (2)
 
l2r99gst's Avatar
 
Join Date: Mar 2004
Location: CA
Posts: 3,499
Likes: 0
Received 4 Likes on 4 Posts
9653xxxx cold start ignition maps: need clarification

With E85 tuning and better cold starts, as well as the 2k idle issue that others have been having (which seems to be solved now), I saw a lot of mention of the cold start ignition maps.

However, there seems to be two of them...one seems to be known and used by everyone and one seems to be unknown by most (I think it is even labeled as unknown in a few references).

I'm hoping that someone can shed some light on these two maps and their control maps and sort out exactly what they are doing, if they both are indeed some sort of cold start ignition retard.

Here are the maps that I have defined and what they look like. First up are the better known maps:

Low coolant temp timing trim:

The control for the above map (the 50's are set to 100 in stock form):


The lesser known map, from what I have gathered:

ColdStart Ignition:

ColdStart Ingition control map:


The definitions for the above 4 maps, so that you can compare to your XML to see exactly what maps I am referring to (in case they are named differently in your XML):

Code:
<table name="Low Coolant Temp Timing Trim Map" address="3ff5">
		<table name="Engine Load" address="6910"/>
		<table name="RPM" address="68de"/>
</table>

<table name="Percent Low Temp Timing Trim vs Coolant Temp" address="41dc">
		<table name="Engine Temp" address="78a2"/>
</table>

<table name="ColdStart Ignition" category="Timing" address="61c9" type="3D" level="1" swapxy="true" scaling="Timing">
		<table name="Load" address="6910" type="X Axis" elements="19" scaling="Load"/>
		<table name="RPM" address="68de" type="Y Axis" elements="20" scaling="RPM"/>
</table>

<table name="ColdStart Ignition Control" category="Timing" address="61b6" type="2D" level="2" scaling="uint8">
		<table name="Engine Temp" address="6a36" type="X Axis" elements="8" scaling="Temp"/>
</table>

So, if anyone that has looked at the dissaembly around these tables can clear things up for me, that would be great (logic, mrfred, etc). It's just that I see mention of both tables here and there. I think the first two are well understood, but I think the second two aren't.

The only reason I am asking about this now is because the temps are finally cold enough for me to fine tune my E85 starting. It was below 0 here over night the other day and I had trouble starting my E85. So, I wanted to get all of the tuning done at once (both IPW and ignition). So, I wanted to be sure if I had to adjust both of these tables or not.


Thanks,
Eric
Attached Thumbnails 9653xxxx cold start ignition maps: need clarification-lowcoolanttimingtrim.jpg   9653xxxx cold start ignition maps: need clarification-coldstartign.jpg  
Attached Images   

Last edited by l2r99gst; Dec 11, 2009 at 09:50 AM.
Old Dec 11, 2009, 01:09 PM
  #2  
Evolved Member
iTrader: (1)
 
ziad's Avatar
 
Join Date: Apr 2007
Location: Melbourne
Posts: 529
Likes: 0
Received 1 Like on 1 Post
is the 2k cold start issue fixed... hmm i will have to search i think.

for cold start the only maps needing to be changed were the IPW tables i thought.
Old Dec 11, 2009, 01:21 PM
  #3  
Evolved Member
Thread Starter
iTrader: (2)
 
l2r99gst's Avatar
 
Join Date: Mar 2004
Location: CA
Posts: 3,499
Likes: 0
Received 4 Likes on 4 Posts
Yep, 2k idle is fixed...via several methods it appears. It's in the poor cold idle thread.

As far as cold starts, yes it should mainly be the IPW tables, but E85 seems to need much more timing when cold as well. I think this is the reason for the car falling on it's face when trying to drive away cold.

I'm not sure if there are actual timing maps for while the starter is cranking, as the maps above seem to be after the car has started. But either way, I want to know more about the maps and any other cold start ignition maps.


Eric
Old Dec 29, 2009, 08:09 PM
  #4  
Evolved Member
iTrader: (22)
 
Appauldd's Avatar
 
Join Date: Nov 2003
Location: Northern KY near Cincy
Posts: 2,408
Likes: 0
Received 6 Likes on 6 Posts
From what I have determined with these tables.....

The first one you posted (in my opinion) is a fuel table, not a timing table. Change the scaling to AFR and you will see what I mean. I know others "varified" it is a timing table....It just does not look right to me.

The percentage control table seems to have an effect on both the other tables. Reducing the value does reduce the timing pull on the engine when cold. I never varified the AFR.

The last cold table you have I have not found a solution for it. I recommend just leaving it as it is.

I do recommend that the -5s in the 1000 rpm on the "unknown" table be raised to 0. This greatly helped my car idle when cold since my idle is set to 1000 rpm any how.

You have a couple options to disable these alltogether. Simply change the percentage table to all 0 OR zero out the first table you posted and then make the "unknown" table match your current tuned timing table.

Both methods (from what I have tested) will disable any cold "issues" but the car will take a bit longer to warm up.

As far as I have tested disabeling these tables will also cure the 2k rev.

Paul
Old Dec 30, 2009, 12:02 AM
  #5  
Evolved Member
iTrader: (8)
 
03whitegsr's Avatar
 
Join Date: Nov 2006
Location: Utah
Posts: 4,001
Received 14 Likes on 12 Posts
FWIW, the sub-routine (sub_18468) where the second table is located is part of another sub-routine (sub_1820c). Right before sub_18468 is called, another sub-routine (sub_18236) for calculating EGR ignition trim and ECT mapped Ignition (first table) is carried out.

The end results of sub_1820c is also associated with the mapped timing advance MUT33.

I would bet they are both related to ignition advance.

MUT1E seems to be a control for another unknown table. I wouldn't be surprised if MUT1E is if the car is in idle control or not as it's the first conditional and the following branch establishes if the car is near the target idle RPM. If the ECU takes this branch, it goes through a bunch of conditionals, but it eventually gets to a table I haven't seen mentioned.

Code:
	<table name="Unknown Ign Trim (warmup)" category="Unverified" address="61A8" type="2D" level="1" scaling="uint8">
		<table name="Engine Temp" address="6A36" type="Y Axis" elements="8" scaling="Temp"/>
	</table>
This table looks like an additional control table.

I would guess the difference between the two tables may be related to either cruise conditions, closed throttle conditions, or idle conditions. It definitely doesn't appear to be active in all warmup conditions like the first table does.

Last edited by 03whitegsr; Dec 30, 2009 at 12:05 AM.
Old Dec 30, 2009, 01:34 AM
  #6  
Evolved Member
 
merlin.oz's Avatar
 
Join Date: Jun 2008
Location: Sydney
Posts: 824
Likes: 0
Received 23 Likes on 19 Posts
The Cold Start Ignition 3D map look very similar to the 3D map I found the other day on AUDM rom 88580013, at 65b5.
I would be interested to find out more on this one too.

Have a look to see if there is another 3D map at or near 6379 on your rom.
If its there, try setting it up as per an ignition map for a look.
Old Dec 30, 2009, 06:14 AM
  #7  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Paul, you've said repeatedly that you think that table "looks like" a fuel table. You're right, it sort-of looks like one, but it's not; the treatment of this table in the ECU is definitely as a timing offset or mask, with zero at 0x80 rather than it being a raw (but signed) value as is typical.

The flow of control here is "look up the cold-start timing table value", "look up the EGR-enabled advance value", then "look up the high-octane ignition map #1 value". It's all part of the same ignition calculation routine. I just haven't had time to look at the calculation when it's retrieved that value. If anyone else is interested, it looks like the looked-up value is stored in R2, then used again at loc_18328 (added to the value retrieved from the high-octane map, ie. R13, then run through sub_F0C with R5 = 0x80 as an argument; i haven't stepped through all the pre-0x1000 routines yet, so I don't know what this one does off the top of my head). Sorry, I'm out of time right now to look into this any further, but that should give someone with a bit of motivation something to dig into.
Old Dec 30, 2009, 07:55 AM
  #8  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Ok, I lied. I have a bit of time this morning.

sub_F0C (for word values) and sub_F12 (long) appear to do nothing but subtract r4 from r5 (in this case, we've added the value from the high-octane lookup and the cold-start timing map into a value in r4, and r5 is 0x80), and return the result, or return zero if the result is negative. So, it's just normalizing the values from the cold-start timing table into something a little more timing-esque.

So, to summarize what's happening (someone feel free to jump in here and tell me if they see something obviously wrong):

The call chain we care about is the main loop -> sub_17248 -> sub_17FEA -> sub_1820C -> sub_18236, which is where I started looking at this. This routine basically looks up the low-octane ignition (R1), low-coolant-temp timing trim (table 3ff5, stored in R2) and high-octane ignition (R13), applying EGR-enabled advance trims to both low- and high-octane results if necessary. The post-EGR word-width result (if applicable) is stored in 0xFFFF8BBC (for low-octane) and 0xFFFF8BBE (for high-octane).

Next, any necessary interpolation between the high- and low-octane tables is performed, and the word-width result is stored in 0xFFFF8BC4.

It adds that value to the low-coolant-temp timing trim value, subtracts 0x80 (normalizes it), and stores the result in 0xFFFF8BC0.

It then pulls 0xFFFF8BC4 (the value looked up before matching against the low-temp trim table) back into R0 and returns (back to sub_1820C, which hands that value off to sub_18468 as R4, there appears to be quite a bit going on in that routine, so I'm ignoring it for now).

Anyone interested could log any of those addresses if they wanted to see how things actually interact under the hood. Particularly interesting would probably be actual timing and coolant temp vs. 0xFFFF8BC0 and 0xFFFF8BC4, so you could see the effects on timing directly.

Having not looked any further than this yet, I'll note now that the only other places 0xFFFF8BC0 appears to be used is in concert with the warm-up/ignition timing table at 61C9, and it's control table at 61B6, and in loc_1899A (which I haven't looked into at all yet).

So no, Paul, it is not a fuel map.

Last edited by logic; Dec 30, 2009 at 07:57 AM.
Old Dec 30, 2009, 07:59 AM
  #9  
Evolved Member
 
acamus's Avatar
 
Join Date: Mar 2008
Location: Lattitude 48.38°, Longitude 17.58°, Altitude 146m = Slovakia, for common dude
Posts: 730
Likes: 0
Received 2 Likes on 2 Posts
It is definitely ignition trim map, it is used in the that next subroutine where interpolation between value taken from ignition look-up(Load) and ignition look-up(CT) is done. The table in concern is simply offset-ted at 0x80 to have a trim possible at both sides of 0 equally spaced.

Last edited by acamus; Dec 30, 2009 at 09:31 AM.
Old Dec 30, 2009, 09:38 AM
  #10  
Evolved Member
 
hediki12's Avatar
 
Join Date: May 2009
Location: mnt vernon ny
Posts: 522
Likes: 0
Received 2 Likes on 2 Posts
Originally Posted by Appauldd
From what I have determined with these tables.....

The first one you posted (in my opinion) is a fuel table, not a timing table. Change the scaling to AFR and you will see what I mean. I know others "varified" it is a timing table....It just does not look right to me.


Paul
i did what you said and it makes since it does seem like a afr map. the hole of negative timing translates to lean numbers which would make sense because it heats up the engine.
Old Dec 30, 2009, 09:46 AM
  #11  
Evolved Member
iTrader: (8)
 
03whitegsr's Avatar
 
Join Date: Nov 2006
Location: Utah
Posts: 4,001
Received 14 Likes on 12 Posts
It's not fuel, it is ignition.

It may or may not be helpful to this thread.
Logging MUT1E, it looks to be decel related. From my short drive, it seems to take on one of three values (32, 44, 160).

Last edited by 03whitegsr; Dec 30, 2009 at 09:49 AM.
Old Dec 30, 2009, 10:01 AM
  #12  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
I'm convinced that scalings in EcuFlash have made us all collectively dumber.
Old Dec 30, 2009, 10:27 AM
  #13  
Evolved Member
 
acamus's Avatar
 
Join Date: Mar 2008
Location: Lattitude 48.38°, Longitude 17.58°, Altitude 146m = Slovakia, for common dude
Posts: 730
Likes: 0
Received 2 Likes on 2 Posts
Originally Posted by 03whitegsr
It's not fuel, it is ignition.

It may or may not be helpful to this thread.
Logging MUT1E, it looks to be decel related. From my short drive, it seems to take on one of three values (32, 44, 160).
MUT_1E is a bit array

--------------------------------------------
Bit position definitions (15-0, L-R)
--------------------------------------------
0: Coolant Temperature
1: Manifold Absolute Pressure
2: Unknown
3: Unknown
4: Is Immobilizer confirmed
5: Unknown
6: Unknown
7: Unknown
8: Unknown
9: Unknown
10: Unknown
11: Unknown
12: Unknown
13: Unknown
14: Unknown
15: Is in idle
Old Dec 30, 2009, 11:16 AM
  #14  
Evolved Member
iTrader: (8)
 
03whitegsr's Avatar
 
Join Date: Nov 2006
Location: Utah
Posts: 4,001
Received 14 Likes on 12 Posts
Makes sense as it seems to be go/nogo type of relationship, thus changing a bit or two makes sense with it only hitting certain numbers.

I'm curious though, as you have bit.4 listed as the immobilizer, yet my car doesn't have that bit set to 1 and I have the immobilizer active.

Anyway, with regards to part of sub_18468 (where the unknown table is located) bit.7 seems to be related to decel. I'll have to check the sub tonight, but it seemed like the sub made a check to see if it was less than 0xA0 (160).

Off the top of my head though, I think the sub can reach the second table regardless of this bit though as the branches rejoin and then rebranch and then through additional conditionals make it over to the unknown 3D table.
Old Dec 30, 2009, 12:56 PM
  #15  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
It looks like calling it MUT_1E is might be kind of a misnomer, it's actually a two-byte bit array, no?

Also, bit 0x2 seems to control whether lookups are performed on the table at 0x6071. (It's a 14x8 table, axes are RPM@66F2 and load@7ADC, not sure at first glance what the table contents represent; airflow, fuel?)

There is a ton of stuff controlled by bits 0x1 and 0x10...


Quick Reply: 9653xxxx cold start ignition maps: need clarification



All times are GMT -7. The time now is 05:30 PM.