Welcome to the Tuning My Saab 9-3 SC WikiEdit
On this Wiki you will find a log of the events and actions I am taking to tune my Saab 9-3 2.0t SportCombi. To tune Saab cars you use T8Suite, t7Suite and Trionic CAN Flasher that are found over at www.txsuite.org
What, why and howEdit
I have owned my Saab 9-3 since 2007, when I bought it new. It's a Jet Black Saab 9-3 SportCombi 2.0t BioPower which delivers 175hp when running on gasoline and 200hp when running on ethanol.
Even though it is one of my worst car deals ever, I bought it new just before the Saab bankruptcy where it lost most of its value over nigh, I have been quite satisfied with this car.
Lately I have started to want something else. Wanting more. Already last year I was planning to take it to Nordic Tuning for either a Stage 1 or Stage 2 update, but it never materialized. Even though I think it's time for me for a new car, since it has lost so much value I am instead planning to keep it. It only has 9800km on the meter, so there is plenty of mileage left.
A few weeks back I was having lunch with a friend of mine and he told me about his latest project. He had taken over a open source project which software is used to tune Saab's. His name is Mattias Claesson and he usually hangs around at the http://www.trionictuning.com/ forum. The software he is currently maintaining and I am about to learn how to use us the T8 Suite and the TrionicCANFlasher.
This wiki will be my log. This is where I will share my learnings for others to follow. I do this because I want to share, I do this because I believe in Open Source and this will be my way to contribute back to the community. I sure hope not to break things on the way :-)
There are plenty of options to select from when it comes to reading and writing software to your Saab. What I have been able to read is that the two most reliable tools are the CAN USB from Lawicel or the Combi Adapter from johnc. These tools seems a bit pricey, but it seems to be what you need when the shit hits the fan.
Then there is the cheap option. The chinese ELM 327 based OBD tools. I personally decided to start cheap and bought one from Teknikmagasinet. Or, in fact, Santa Claus decided to give me one this Christmas.
I decided to take this risk assuming that when Murphy visits, Mattias is likely to have the tools needed.
Car Specifications Edit
In order not to screw things up, I think it's quite important to know the hardware. I.e. the car. There are so many variables to consider and for a noob like myself, a lot to learn.
Make and Model Edit
Saab 9-3 Vector 2.0t BioPower (M6), model year -08, aka. 2008 facelift, Jet Black
After some reading, I have figured out that my engine is a GM Ecotec LK9, more precise the B207L (L is the 2.0t variant).
This engine uses Mitsubishi TD04-11TK turbocharger with peak boost pressure 0.70 bar.
With a 6-gear manual transmission, I have concluded it to be a GM F40.
Engine Management System Edit
The car uses the Trionic 8 Engine Management System, which primary unit is the Engine Control Module; the ECM. What I have been able to grasp, the ECU has model number 55565020.
Basic Understanding Edit
A short writeup on torque/airmass control can be found here.
Setting things up Edit
Phase I - Read the software from the car Edit
Phase I is all about to read out the current software from the car, usually referred to as Stock.bin. In order to do so I will have to install drivers for the ELM 327 and the TrionicCANFlasher on a laptop, find my OBC connector, put the ignition to "Off" and execute. I understand this will take approximately 20 minutes.
The first step of Phase I, to install ELM 327 driver was quite easy. I simply inserted the dongle into an USB port and Windows Update simply installed it. It appears I have FTDI driver version 184.108.40.206 from 2014-08-26 installed. Let's see if this works. I tend to remember references to Prolific drivers or so.
The second step of Phase I is to install TrionicCANFlasher which was quite straight forward. After having started the application, I recommend clicking on the view documentation link. This revealed a quite important step, the third step.
The third step of Phase I is to configure the ELM 327 COM port. In particular, the latency. Start the device manager, find the serial port (mine was COM7) under Ports. Right click and select settings. Select tab port settings and click Advanced... button. Here you find latency. Set it to 2 ms.
The fourth step is to start TrionicCANFlasher and configure it. I selected Trionic 8, ELM327 v.13 or higher, COM7 and 230400 as Com speed. According to the manual, this is optimal for EML 327 devices. In fact, higher speeds (1M, 2M) did not work.
The first thing I did was to perform Get ECU info. This revealed a lot of interesting information about the car and the ECU.
VIN Number: YS3FF56S081111984
Software version: FD0F_C_FMEP_30_FIEF_81I
Basemodel partnr: 55565020
Serial number: 863232AC0D91WK9J
Build date: 2007-04-26 15:41:04
2014-12-27 12:02:46.9498 - Opening connection 2014-12-27 12:02:46.9948 - Open called in Trionic8 2014-12-27 12:02:50.6730 - Open failed in Trionic8 2014-12-27 12:03:08.8170 - ELM327 FTDI setting for COM7 LatencyTimer 2ms. 2014-12-27 12:03:18.1215 - Opening connection 2014-12-27 12:03:18.1735 - Open called in Trionic8 2014-12-27 12:03:21.8828 - Open failed in Trionic8 2014-12-27 12:03:40.0688 - ELM327 FTDI setting for COM7 LatencyTimer 2ms. 2014-12-27 12:03:44.0530 - Opening connection 2014-12-27 12:03:44.0800 - Open called in Trionic8 2014-12-27 12:03:47.5552 - Connected on com: COM7 with baudrate: 235294 2014-12-27 12:03:48.4823 - VINNumber : YS3FF56S081111984 2014-12-27 12:03:48.5373 - Calibration set : P_30_FIEF_ 2014-12-27 12:03:48.6013 - Codefile version: FD0F 2014-12-27 12:03:48.6683 - ECU description : P6.8 2014-12-27 12:03:48.7363 - ECU hardware : Trionic 8 2014-12-27 12:03:48.8363 - ECU sw number : � 2014-12-27 12:03:48.8953 - Programming date: ???? 2014-12-27 12:03:48.9753 - Build date : 2007-04-26 15:41:04 2014-12-27 12:03:49.0583 - Serial number : 863232AC0D91WK9J 2014-12-27 12:03:49.1443 - Software version: FD0F_C_FMEP_30_FIEF_81I 2014-12-27 12:03:49.2313 - 0F identifier : FD0F_C_FMEP_XX_XXX_XXX.tmp 2014-12-27 12:03:49.3003 - SW identifier 1 : 55567292 2014-12-27 12:03:49.3743 - SW identifier 2 : 12799173 2014-12-27 12:03:49.4503 - SW identifier 3 : 55563553 2014-12-27 12:03:49.5243 - SW identifier 4 : 55565454 2014-12-27 12:03:49.6003 - SW identifier 5 : 55565453 2014-12-27 12:03:49.6743 - SW identifier 6 : 55565021 2014-12-27 12:03:49.7623 - Hardware type : ECM 2014-12-27 12:03:49.8944 - 75 identifier : 78 09 2014-12-27 12:03:49.9744 - Engine type : 81l 2014-12-27 12:03:50.0554 - Supplier ID : GMPT 0100 2014-12-27 12:03:50.1174 - Speed limiter : 270 km/h 2014-12-27 12:03:50.1804 - Oil quality : 59,17 % 2014-12-27 12:03:50.2434 - SAAB partnumber : 55566963 2014-12-27 12:03:50.3064 - Diagnostic ID : 0x01 0x84 2014-12-27 12:03:50.3674 - End model partnr: 55567294 2014-12-27 12:03:50.4294 - Basemodel partnr: 55565020 2014-12-27 12:03:50.8784 - Connection closed
Let's look at the software version as per the guide by Mattias.
FD0F_C_FMEP_30_FIEF_81I <<==>> <SW version label>_<variant>_<programmer id>_<calibration version>_<calibrator id>_<engine variant code>
- F = T8
- D = MY??
- 0F = Release version
- C = Closed file, all calibration is in ROM
- FMEP = Official release
- 30 = Calibration version
- FIEF = Calibration id
- 81I = Engine variant code
I notice that I seem to have an old release version, 0F. Looking at MackanBasefiles, I notice that he is using release version 0M and calibration version 14.
The next step was to download the software using Read ECU. The process took around 14 minutes and when I was done I had a file that I had named saab_stock.bin. To be sure, I created a MD5 of the file and saved both on safe locations. And, in order to follow best practice, I renamed the file to B207L_Biopower_55565020_FD0F_C_FMEP_30_FIEF_81I.bin.
Phase II - Tune the software Edit
Phase II will be to load it into the T8 Suite and if I'm lucky, the community already has something they call symbol names for my file which will allow me to poke around in my car's software.
According to my friend Mattias, I should aim to increase the torque limiters - whatever they are. Apparently the stock software has limiters defined that needs to be removed :-)
The tuning starts Edit
The file is now loaded in T8 Suite which found symbols for it as it started. When comparing this file with other files in the http://www.trionictuning.com forum, I see I miss a lot of symbols. However, there is a symbol file available here that allows me to read more (essential) parameters.
I got the recommendation to use this FD0I bin file as it is supposed to be for my variant, but there are some smaller differences between them. The software version in my stock.bin is: FD0F_C_FMEP_30_FIEF_81I (last character is captial i) and the software version in the FD0I.bin is: FD0I_C_FMEP_33_FIEF_81l (last character is lowercase L). This indicates minor changes, according to this post; the differences are around improvements in coldstart and gearbox values.
I have also been considering to use FD0M version, as provided in this post. But then I needed to make sure that my Cruise Control still worked. For this, I need to read out the GearCal.Ratio and GearCal.Range parameters from my FD0F file, divide the values by 1.088 and insert them in the FD0M file. While poking in this, I found a symbol file for my FD0F file in this post. I read the values from my FD0F file and compared them with the FD0I file:
My stock bin GearCal.Ratio and GearCal.Range is: 2.73, 3.26, 4.04, 5.23, 7.87, 14.54 resp. 0.16, 0.25, 0.40, 0.60, 1.20, 3.00 The FD0I bin GearCal.Ratio is: 2.51, 3.00, 3.72, 4.84, 7.23, 13.36 resp. 0.22, 0.26, 0.40, 0.60, 1.20, 3.00
In a post related to this topic, the poster was planning to use GearCal.Ratio 2.51, 2.99, 3.71, 4.81, 7.23 and 13.36 and GearCal.Range 0.20, 0.26, 0.40, 0.60, 1.20, 3.00 with the FD0M binary.
So I will do the following variants:
- Create a ST1 from my own cars stock bin, FD0F, based on Tuning Packages (Mackans ST1+) in this post
- Create a ST1 from the FD0I binary, once again based on Tuning Packages (Mackans ST1+) in this post
- Create a ST1 from Mackans unlimited 400nm FD0M file, found here, once again based on Tuning Packages (Mackans ST1+) in this post
- In parallel, Mackan himself has proposed to create a ST1 for my car
With all this, I have all possibilities to power up my car....
Stay tuned for more information [pun intended].
FD0F ST1 Tuning - Attempt #1 Edit
FD0F ST1 Tuning - Attempt #2
On this page, you find my second attempt. This is based on Mackans Rev007 and Rev001 Tuning Packages, attempting to compare and understand what and why. Edit
FD0F ST1 Tuning - Attempt #3
Based on Mackans Rev007, but slightly modified to my liking as described in the torque/airmass analysis - I had my ST1. Time to go to Phase III.
Phase III Edit
So, with a newly tuned binary it was time to download it to the car. The first attempt was just to bring the laptop (on battery) to the car (on) battery and perform Flash ECU:
2015-01-11 14:40:45.6561 - ELM327 FTDI setting for COM7 LatencyTimer 2ms. 2015-01-11 14:50:10.6240 - Opening connection 2015-01-11 14:50:10.6603 - Open called in Trionic8 2015-01-11 14:50:14.1570 - Connected on com: COM7 with baudrate: 235294 2015-01-11 14:50:16.0151 - Update FLASH content 2015-01-11 14:50:16.0831 - Starting session 2015-01-11 14:50:16.1311 - Telling ECU to clear CANbus 2015-01-11 14:50:17.0891 - Requesting security access 2015-01-11 14:50:17.1431 - Got seed value from ECU 2015-01-11 14:50:17.1791 - Security access : Key (BE27) calculated from seed (93E0) 2015-01-11 14:50:17.2311 - Security access granted 2015-01-11 14:50:17.3161 - Uploading bootloader 2015-01-11 14:50:30.7069 - Starting bootloader 2015-01-11 14:50:31.9510 - Erasing FLASH 2015-01-11 14:50:32.0590 - Erasing FLASH. 2015-01-11 14:51:07.5730 - Erase completed 2015-01-11 14:51:07.6220 - Programming FLASH 2015-01-11 14:51:08.8191 - Got incorrect response 0000000000000000 2015-01-11 14:51:08.8531 - FLASH upload failed 2015-01-11 14:51:08.8991 - Session ended 2015-01-11 14:51:08.9311 - Operation done 2015-01-11 14:51:08.9821 - Total duration: 0 minutes 52 seconds 2015-01-11 14:51:09.2829 - Connection terminated
FAILURE!!! Flash upload failed
After the initial panic, i decided to perform Recover ECU with the original bin. Again, Flash Upload Failed.
2015-01-11 14:51:09.2829 - Connection terminated 2015-01-11 14:51:35.9883 - Opening connection 2015-01-11 14:51:36.0370 - Open called in Trionic8 2015-01-11 14:51:39.5237 - Connected on com: COM7 with baudrate: 235294 2015-01-11 14:51:41.3798 - Recovering ECU 2015-01-11 14:51:42.4779 - Recovery needed... 2015-01-11 14:51:45.2130 - Starting session 2015-01-11 14:51:45.4481 - Telling ECU to clear CANbus 2015-01-11 14:51:45.6881 - Recovery needed phase 1 2015-01-11 14:51:46.1041 - Recovery needed phase 2 2015-01-11 14:51:46.8311 - Requesting security access... 2015-01-11 14:51:46.8691 - Requesting security access 2015-01-11 14:51:46.9081 - Got seed value from ECU 2015-01-11 14:51:46.9411 - Security access : Key (2DD4) calculated from seed (898E) 2015-01-11 14:51:46.9821 - Security access granted 2015-01-11 14:51:47.0151 - Security access granted, uploading bootloader 2015-01-11 14:52:03.0691 - Starting bootloader 2015-01-11 14:52:04.1141 - Erasing FLASH 2015-01-11 14:52:04.2211 - Erasing FLASH. 2015-01-11 14:52:39.7562 - Erase completed 2015-01-11 14:52:39.7922 - Programming FLASH 2015-01-11 14:52:40.9962 - Recovery failed 2015-01-11 14:52:41.0332 - Operation failed 2015-01-11 14:52:41.0692 - Total duration: 0 minutes 59 seconds 2015-01-11 14:52:41.3730 - Connection terminated
At this point I started to break a sweat and called Mattias. He gave me two tips:
- Connect a battery charger, it might be so that there is not enough juice in the battery to perform the flash operation
- Flash with key in lock position, may be less things on the bus
So, off we go again. With charger connected to battery and key in lock position (after gaving had it in on position first) I tried recovery again.
This time it looked better. It started flashing! But....after 59% it stuck. Nothing happened. Nothing blinking on the ELM. Dead. I'm not sure why this happened, but at this point I had started to have low power in the laptop and while flashing, I opened the door which possibly starts communicating on the ODBII bus.
After this; the ECU seemed dead. No connection. So, unplugged ELM both on PC and car. Stopped the program and connected everything again. Key removed and re-insterted, On-off-on-off position; and Read ECU. Worked!!
So, with car and laptop in charger i started recovery again:
2015-01-11 15:27:33.5290 - Opening connection 2015-01-11 15:27:33.5602 - Open called in Trionic8 2015-01-11 15:27:37.0259 - Connected on com: COM7 with baudrate: 235294 2015-01-11 15:27:38.8850 - Recovering ECU 2015-01-11 15:27:39.9431 - Recovery needed... 2015-01-11 15:27:42.6762 - Starting session 2015-01-11 15:27:42.9082 - Telling ECU to clear CANbus 2015-01-11 15:27:43.1483 - Recovery needed phase 1 2015-01-11 15:27:43.5633 - Recovery needed phase 2 2015-01-11 15:27:44.2843 - Requesting security access... 2015-01-11 15:27:44.3053 - Requesting security access 2015-01-11 15:27:44.3253 - Got seed value from ECU 2015-01-11 15:27:44.3403 - Security access : Key (2DD4) calculated from seed (898E) 2015-01-11 15:27:44.3713 - Security access granted 2015-01-11 15:27:44.3863 - Security access granted, uploading bootloader 2015-01-11 15:28:00.1942 - Starting bootloader 2015-01-11 15:28:01.2353 - Erasing FLASH 2015-01-11 15:28:01.3343 - Erasing FLASH. 2015-01-11 15:28:36.8223 - Erase completed 2015-01-11 15:28:36.8433 - Programming FLASH 2015-01-11 15:42:14.2341 - Recovery completed 2015-01-11 15:42:14.2551 - Session ended 2015-01-11 15:42:14.2721 - Operation done 2015-01-11 15:42:14.2861 - Total duration: 14 minutes 35 seconds
Unplugged charger to battery and started car. What a relief.
So all good; let's go ahead and flash ECU.
- Cars battery in charger - CHECK
- Laptop in charger - CHECK
- Get ECU information - CHECK
- Flash ECU:
2015-01-11 15:45:28.4933 - Opening connection 2015-01-11 15:45:28.5258 - Open called in Trionic8 2015-01-11 15:45:31.9957 - Connected on com: COM7 with baudrate: 235294 2015-01-11 15:45:33.8528 - Update FLASH content 2015-01-11 15:45:33.8868 - Starting session 2015-01-11 15:45:33.9248 - Telling ECU to clear CANbus 2015-01-11 15:45:34.9049 - Requesting security access 2015-01-11 15:45:34.9209 - Got seed value from ECU 2015-01-11 15:45:34.9389 - Security access : Key (2DD4) calculated from seed (898E) 2015-01-11 15:45:34.9849 - Security access granted 2015-01-11 15:45:35.0499 - Uploading bootloader 2015-01-11 15:45:48.2217 - Starting bootloader 2015-01-11 15:45:49.4497 - Erasing FLASH 2015-01-11 15:45:49.5517 - Erasing FLASH. 2015-01-11 15:46:25.0268 - Erase completed 2015-01-11 15:46:25.0748 - Programming FLASH 2015-01-11 15:55:27.XXXX - Flash upload completed 2015-01-11 15:55:27.XXXX - Session ended 2015-01-11 15:55:27.XXXX - Operation done 2015-01-11 15:55:27.XXXX - Total duration: 9 minutes 53 seconds
All things disconnected and then a test drive. The car is quite improved!
Phase IV - Change injectors Edit
So, I've decided to go beyond ST1 and ordered new injectors.Should be possible to take me 240hp on ethanol with these injectors and beyond with a Aero turbo.
Coil Resistance: 12 Ohms (This high-impedance injector will work with all factory ECM/PCM injector drivers)
Spray Pattern: Wide Split Cone, (6 orifice)
Electrical Connector: USCAR (New-style EV6 / Oval / LS2)
Fitted with Viton upper and lower o-rings.
Static Flow Rate @ 43.5PSI (300kPa): 51.72 lb/hr = 6.52g/s = 544cc/min
The Software Edit
These new injectors will require some initial tunings of the software. The InjCorrCal.InjectorConst and InjCorrCal.BattCorrTab needs to be updated. Fortunately, mackan has already these in his car so the initial change should be rather straight forward.
InjCorrCal.InjectorConst should be 387, original is 261. Measured in g/min which means 6.52g/s * 60 = 391.20; then tune by mackan to make it perfect.
InjCorrCal.BattCorrTab changes as per table below:
The Hardware Edit
The first step is to remove the fuel pressure, this is simply done by starting the car and then remove the fuel-pump's fuse and let the car run until it dies.
Then we remove the plastic lid to expose the things we need:
Next is to remove the aluminum lid to expose the ignition coils; only to remove the sockets to them:
The we unplug the cooling temperature sensor:
And the throttle body:
Next is the CDM:
I also removed the oxygen sensor and the exhaust gas temperature sensor; of which one I accidentally broke. Not too bad, still ok.
Now I could move all the cable so I can remove the fuel distribution rail and change the injectors.
This step is a bit tricky. You grab the rail and slowly wiggle it and all four injectors should nicely follow. When all injectors are out, remove them one by one by pulling them from the rail while opening up the metal clip, then unplugging them from their sockets. A good practice is to cover the holes so dust does not enter the engine.
Here they are, the new and the old, where I have moved the metallic clip to the new injectors:
That's about it; now do it all backwards to mount things again.
The car runs much smoother and uses less fuel. Idle is very nice compared to before. Next is to make use of the new capabilities of theses injectors.
Phase V - Upgrading the Turbo Edit
The B207L comes with a Mitsubishi TD04-11TK Turbo. A small but simple upgrade is to take a Turbo from a 207R (Aero), the Mitsubishi TD04-14T. In fact, they are starting to be really cheap on ebay.
The cool thing is that you actually only need to replace half the turbo as the turbine housing is the same in the two models, only the Compressor Housing differs. Below how it looks when the Compressor Housing has been removed.
T8Suite version 0.0.25.0 added a tuning pack in the Tuning Wizard that will hike all necessary maps to make a B207E/L behave like a B207R (Aero). This is further described by the tuning pack author in this thread.
Finding and adding symbols Edit
In order for me to get real-time logging to work in the T8 Suite, I had to complement the symbol file with the symbols used for real-time logging. This is quite a hard task to do where you compare the assembler of two different binaries.
I compared my FD0F file with the FD0I file which has support for the real-time symbols. The sybols needed for real-time logging are:
ActualIn.U_Battery ActualIn.n_Engine AirMassMast.m_Request ActualIn.T_Engine ActualIn.T_AirInlet ECMStat.P_Engine ECMStat.ST_ActiveAirDem Exhaust.T_Calc FCut.CutStatus IgnMastProt.fi_Offset In.p_AirInlet In.v_Vehicle Lambda.Status MAF.m_AirInlet Out.PWM_BoostCntrl Out.fi_Ignition Out.X_AccPos Out.M_EngTrqAct
In T8 Suite, you first have to create the .asm file. Right-click on the list of symbols and select "Show disassembly". This will open the assembly source and create a .asm file in the same directory as where you have your .bin file.
I did this with both the FD0F and FD0I file, and then I opened both in Notepad++ and started to compare the code. This is hard work, but it can bd dmade easier by looking for already known symbols in both files. Then you can find points in the code that matches, and from there you go.
Hardware considerations Edit
There seems to be a common understanding that for a decent ST1+, you need improved injectors. In particular Siemens Deka 875cc seems to be a popular choice.
Saab 9-3 SportCombi