2017 Chevrolet Volt LT Firmware Modifications to allow Openpilot Operation - commaai/openpilot GitHub Wiki

Several people have successfully enabled Openpilot operation on 2017 LT Volts without stock Premier features. This section will cover the firmware modifications required to enable Openpilot. Hardware modifications are also required. Stock cruise control will be inoperative after these modifications, only cruise available will be Openpilot once it is booted. This write-up and associated files (DPS, GDS2 etc) can also be found in this PDF. Open in Adobe (deprecated) Browser.

Introduction

The Chevrolet Volt (2016-2018) is a popular vehicle to use with OpenPilot and the C2/C3. Out of the box, only the Premier optioned Volt with the Driver Convenience II package is supported. This model includes a radar behind the bow tie on the grille, LKAS, and Adaptive Cruise Control. The LT version is not officially supported, nor is the Premier version without radar Adaptive Cruise Control. But…. There is a way! Either way you have to have a radar which can easily be bought on eBay and wired to the OBDII port, as well as the radar transparent bow tie which is much harder to come by. I believe this is optional if you want to use the very Alpha E2E longitudinal model.

All of the main modules in the vehicle are the same between LT and Premier versions. This means that the only limitation is in software, i.e. which commands the ECM (Engine Control Module), BCM (Body Control Module), Brake Module, Power Steering Module, and Cluster are willing to accept/transmit between each other and OpenPilot. GM may change their software in the future, breaking the process. As always, do at your own risk. Worst case scenario can leave a vehicle module inoperative if done incorrectly. Firmware modification like this will result in DTC (Diagnostic Trouble Codes) that will be invisible to the user (no dash icons) but will be visible if you take the vehicle to the dealer. All codes reference lost communication with Premier modules that do not exist such as Park Assist and Blind Spot Monitoring and do not affect normal operation.

After programming, stock cruise control will cease to exist, you must always use Openpilot.

Required

  • GM TechLine Connect (included in when purchased against a VIN)
  • GM Developmental Programming System (DPS)
  • Windows 10 or 11 computer with at least 8GB of RAM and modern specs (see specifications list on GMs website)
  • VX Manager
  • VCX Nano GM OBDII Programmer (or equivalent product/official MDI from GM)
  • About 2-5 hours depending on computer speed and your proficiency with operating the systems
  • An internet connection during all programming tasks

Notes:

  • Car must be unplugged from wall charger
  • Car should be attached to a 12V trickle charger (I did this without, but the software recommends it as battery voltage fluctuations could cause adverse programming effects, i.e. bricking a module).
  • If using a laptop, ensure sufficient battery charge or keep it plugged in.
  • I have found most success programming with the car in maintenance mode (hold start button down with foot off brake for about 5 seconds). * If you have issues with this, try with vehicle fully on or off.
  • When completed with programming, use extreme caution when testing Openpilot for the first time, it may or may not work correctly (no longitudinal or no lateral control). Once you confirm everything works as expected, it’s just like a Premier Volt!
  • Throughout programming, various chimes/lights will turn on and off/relays will chatter, this is normal.

If you do not disable Anti-Virus and firewall you will have issues! VX Manager is highlighted as a virus for some reason. I installed on a fresh Windows install out of caution.

Software Preparation

  • Install VX Manager. Only install “PASSTHROUGH - J2534”. The GM packages will be handled by GM’s installation.
  • Install GM TechLine Connect
  • Install GM Developmental Programming System / Patches (User Guide for reference)

ACDelcoTDS

ACDelcoTDS is GM’s online portal to vehicle diagnostics and programming. A single VIN costs $45 for a year.

Sign into https://www.acdelcotds.com/subscriptions, or create an account if needed.

When purchasing a VIN through the system, you will need to find a VIN that has the software you desire. i.e. a Premier with Driver Confidence II package (make sure it has a flat plastic trim where the bow tie is on the grille). Also, ensure the VIN you select is the same year as your vehicle.


Optionally purchase another VIN that is the actual vehicle that you own, in case things don’t work you can flash the original firmware back to the car (or if you sell the car and wish to return to stock).


Once purchased you will see your active VINs under “My Subscriptions”. Click “View”, then select the Premier VIN. This will bring you to a page to download and install TechLine Connect if you have not already. If TechLine Connect is installed, you will see an option to start it. Before running/installing TechLine Connect, open VX Manager, your VCX Nano will beep to verify connection, if it does not, select reconnect on the main screen.


ACDelcoTDS Website.



VIN Subscriptions.



VXManager Reconnect if needed.


Actual Programming


Once TechLine connect is opened, make sure your Premier VIN is selected, then click “Select”.



A dialog box will pop up to select the interface with the vehicle, select “VXDIAG”.



Ensure Premier VIN is selected at top dropdown box. Click “Next”.



A listing of all the control modules from the Premier VIN is shown. From this point forward, this screen will be where you select the module you would like to program.




The system will give you an error at the selection of each module, letting you know the VIN selected does not match your VIN, always select “OVERRIDE”.


The following photos show the programming process as well as the ECU list. It will be the same process for each module, although the information displayed will vary.


ECU List Page 1.



ECU List Page 2.



ECU List Page 3.



ECU Programming Page 1.



ECU Programming Page 2.



ECU Programming Page 3.



ECU Programming Page 4.


Body Control Module Programming (K9)

Body control module programming is required to allow lateral/longitudinal operation of Openpilot. This module may not need to be programmed if you already have lateral control with Openpilot and are currently using a Pedal for longitudinal control.

  • Select “Body Control Module” under the ECU list in TechLine Connect.
  • “Override” VIN mismatch.
  • Click “Next”
  • Click “Next”
  • Click “Ok” for the warning on reprogramming with same calibration
  • Programming will finish properly. At the end you will probably get a warning on the dash to recalibrate the driver’s window. DONE!

Engine Control Module Programming (K20)

Engine control module programming is required to enable longitudinal operation of Openpilot

  • Select “Engine Control Module” under the ECU list in TechLine Connect
  • “Override” VIN mismatch
  • Click “Next”
  • Click “Next”
  • Click “Ok” for the warning on reprogramming with same calibration
  • Programming will NOT finish properly. Wait till it finishes trying and gives you a dialog box saying there was a failure. DONE!

Power Steering Control Module Programming (K43)

Power Steering Control Module programming is required to enable lateral operation of Openpilot. Not required for Volts that already have LKAS

  • Select “Power Steering Control Module” under the ECU list in TechLine Connect
  • “Override” VIN mismatch
  • Click “Next”
  • Click “Next”
  • Click “Ok” for the warning on reprogramming with same calibration
  • Programming will finish properly
  • DONE!

Electronic Brake Control Module Programming (K17)

Electronic Brake Control Module programming is required to enable longitudinal operation of Openpilot

  • Select “Electronic Brake Control Module” under the ECU list in TechLine Connect
  • “Override” VIN mismatch
  • Click “Next”
  • Click “Next”
  • Click “Ok” for the warning on reprogramming with same calibration
  • Programming will finish properly
  • DONE!

Brake Booster Control Module Programming (K177)

Brake Booster Control Module programming is required to enable longitudinal operation of Openpilot

  • Select “Brake Booster Control Module” under the ECU list in TechLine Connect
  • “Override” VIN mismatch
  • Click “Next”
  • Click “Next”
  • Click “Ok” for the warning on reprogramming with same calibration
  • Programming will finish properly
  • DONE!

Instrument Cluster Programming (P16)

Instrument Cluster programming is not required for Openpilot operation, although it does offer a more streamlined user experience.

Without programming:

  • Cruise Control icons will appear distorted
  • ACC icons on the cluster will be missing
  • “Following Distance” menu on the cluster will be missing






With programming:


Instrument Cluster programming is a bit more involved. If you flash with the Premier firmware, you will fix the above issues, but the cluster will also display errors for ECUs that your vehicle does not have (for an LT Volt you will receive “Service Park Assist” and “Service Blind Spot Monitor” errors EVERY TIME YOU START THE VEHICLE. It will also dash out the mileage after an undetermined amount of time due to a VIN MISMATCH. We need to tell the Instrument Cluster that we do not have these systems installed so we no longer receive these errors AND keep our original VIN. This is done using an XML/RPO Build File. A “recipe” per se for the cluster firmware.
 At the end of this document, I will document how these files are acquired. For your enjoyment I have attached this file, for a 2017 Volt, here. (unzip it). I have also attached an example XMLFile.txt here. All you need to do is replace YOUR_VIN with, well, your VIN.

NOTE: Using the following directions, you will temporarily receive a "Service Front Camera" error anytime Openpilot is disconnected or not fully booted. Go to the next section to see how to fix this issue if you find it to be annoying. Video showing "Service Front Camera" error, which is eventually eliminated by Openpilot (once it boots).


Copy “XMLFile.xml” to /DPS/Config.



Open “Developmental Programming System”. Select “Program” at the top of the window, then “Dev. Programming Tool”



Select “1 (33.3KBd)” from the “Diagnostic Pin” dropdown box. Select “ECU Configuration”.



Select “Select XML Config File”, choose the file you just copied to /DPS/Config. Select “Create Build Data File .TXT”



Ensure the VIN at the top is populated with YOUR VIN. Select options under “RPO Selections”, RPO guide is attached as a reference here.


For an LT Volt:

  • EF7 - United States (or change to your country accordingly)
  • KSG - This corrects cruise control icons
  • UE1 - Onstar
  • UE4 - This enables the following distance indicator/menu
  • UHX - This corrects ACC icons

Select “Write RPO Build Data”

Ensure “Build Data File” box has been populated with the file you just created.


Select “Execute”, do not interrupt process until it finishes or errors out.



To quickly verify correct execution, try to turn on cruise control on the steering wheel, you will see the new icons!

Explanation

In short, the firmware is a generic cake (could be chocolate, could be vanilla) lol. The XMLFile.xml is the recipe to make any generic cake minus the flavor. The XMLFile.txt file that we create tells the recipe XMLFile.xml to make a chocolate cake vs a vanilla cake. Make sense?

GMs intention is to make this process seamless, and for most users this is fine. But when we want to modify the firmware we have to do this manually. Timing is important for this, the XMLFile.xml is temporary while the firmware is being downloaded and is immediately deleted. We have to copy the file at JUST the right moment.


In Windows File Explorer, navigate to /USERNAME/sps/type4, if this folder does not exist, create and open it. Keep it visible alongside the TechLine Connect software.

Go through the process of programming the “Instrument Cluster” just like you would any of the other modules, get to the point where you select “Start Programming”

After clicking “Start Programming”, the program will have a spinning circle as it makes connection with the vehicle. As SOON as it gets to the next step of downloading the firmware, pull the VCX Nano out of the OBDII port (to prevent actually programming anything). AT THE SAME TIME there should be a new folder in the type4 folder. Either open it and drag the XMLFile.xml to the desktop, or drag the entire folder to the desktop. At this point TechLine Connect will report an error (because the precious files are gone). That’s fine. Exit TechLine Connect and use the XMLFile.xml in DPS as described earlier. Even better, open that file in notepad and you can see what each RPO code in the build file does.

Note: Not all ECUs have an XMLFile.xml, there seems to be no reason an ECU has it vs not. What’s important is the Instrument Cluster has this file and allows us to cherry pick the features we want and don’t want, allowing an LT Volt to have Premier ACC icons without additional system errors, while at the same time keeping YOUR VIN on the ECU, preventing a VIN mismatch error (dashed out mileage).

Service Front Camera Error Fix

One of the things that bothered me with this setup is the “Service Front Camera” error that temporarily pops up before Openpilot is fully booted. So I dove down the task of getting rid of it, and sure enough, it's possible! I have loaded the modified XMLFile.xml here.

Two RPO codes when applied to the IPC create this DTC/error. KSG: CRUISE CONTROL AUTOMATIC, ADAPTIVE WITH STOP/GO, and UHX: LANE ACTIVE SAFETY-KEEP ASSIST. This makes sense as the stock Premium Volt has a camera for both of these systems.

The file that will be edited for this is the XMLFile.xml

This file has several sections that are important. DPS looks at the XMLFile.txt on how to build the instruction set to the IPC. So everything is based solely off RPO codes.

At the very bottom of the file, there is a section that simply lists RPO codes, for example:


<RpoCodeItem>
   <OptionCodeID>OCKSG</OptionCodeID>
   <OptionCode>KSG</OptionCode>
   <Description>CRUISE CONTROL-AUTOMATIC, ADAPTIVE, WITH STOP/GO</Description>
</RpoCodeItem>"

Above this section are the RPO options themselves.

Then above that, there are DTCs that can be set! For example:

<Parameter ParamDefaultValue="00">
   <ParameterName>P_ENABLE_DTC_C23A_FTB_00</ParameterName>
   <StartByte>3</StartByte>
   <StartBit>4</StartBit>
   <BitLength>1</BitLength>
   <ConfData useConfData="true">
      <ConfigData Value="00" AutoGenExpression="(!KSG)">
         <Product>
            <RpoCodeRef IDREF="OCKSG" hasToBeAvailable="false" />
         </Product>
      </ConfigData>
      <ConfigData Value="01" AutoGenExpression="(KSG)">
         <Product>
            <RpoCodeRef IDREF="OCKSG" hasToBeAvailable="true" />
         </Product>
      </ConfigData>
   </ConfData>
   <ServiceSection IsServiceAccessAllowed="false">
      <Interpretation Text="Disable" Value="00" />
      <Interpretation Text="Enable" Value="01" />
   </ServiceSection>
</Parameter>

The first RPO code that will throw DTCs, as well as the "Service Front Camera" error, is KSG: CRUISE CONTROL AUTOMATIC, ADAPTIVE WITH STOP/GO. Pay attention to the above section. First, you can see that this block of code references setting a DTC if the RPO code of KSG is selected. For the ParamDefaultValue, it shows 00 meaning this DTC is set to DISABLED. But, if you have the KSG option, the DTC value is 01, meaning this DTC is set to ENABLED so if the IPC finds an issue with option KSG you will get an error on the display. Changing the 01 to 00 disables the DTC even with this RPO code selected! This will have to be completed on line 969. No more “Service Front Camera”, for Adaptive Cruise Control!!!

The second RPO code that will throw DTCs, as well as the “Service Front Camera” error, is the UHX: LANE ACTIVE SAFETY-KEEP ASSIST. Notice in the DTC list of XMLFile.xml, there is no DTC item matching up to the RPO code of UHX. BUT… notice that there are two different sections for UHX. One is P_LANE_KEEPER_ASSIST_INDICATOR_ENABLED and the other is P_OPTION_LANE_KEEPER_PRESENT. So on line 1595, we change the 01 to 00. This tells the IPC not to look for the system on the CANBUS, while the indicator is still enabled.

After editing the XMLFile.xml, load it into DPS as the instructions dictate, and flash the IPC. You will never receive “Service Front Camera” ever again. See final video here.

FINAL NOTES: Like I said earlier, do all this AT YOUR OWN RISK. It worked on mine, but differing models/years could be different. After programming, you may need to use GDS2 to remove all DTCs, or a code reader to clear out the check engine light. This is normal. Also needed is a window re-calibration (move driver’s window full up and full down to calibrate automatic operation). Last but not least, you may have to accomplish a parking brake re-calibration through GDS2, which basically walks you through setting the electronic parking brake while the system reads it’s position. Viewing all DTCs in GDS2 will let you know if you need to accomplish this. GDS2 will list “Parking Brake Relearn Required” under the full list of DTCs.

Troubleshooting

If you're getting a "Cruise Fault" and unable to enable openpilot control after confirming all firmware has flashed correctly, try recalibrating the brake pedal position sensor through SPS.

Lessons Learned

The below information was provided by "chblust" as feedback from following these instructions.

Over the past week @VirtuallyChris and I got openpilot working on my radarless 2017 volt LT. Special thanks to @kyle11111, @nworby ('18 radarless Volt), @brianbri6, and others for helping out with this. My process was a bit different from the wiki so here's some extra stuff I had to do. I plan on updating the wiki with these considerations soon.

  1. Getting GM techline connect to work required me to use the acdelcotds website each time I opened it. I had to download TLC through the website, then close it, and go back to the website to open it with the selected VIN. To get to this page I had to select "view" under my subscriptions and then "add vin". The "add vin" button changes to an actual VIN once you successfully program a module. Getting TLC to install successfully is a bit of a crap shoot and I had to cancel the install process when it hung up a couple times before I had a successful install. Additionally, sometimes TLC would just stop opening and I had to reinstall it. I just hope GM doesn't use the same engineers to write their ECU firmware 🙂

  2. The wiki states that the ECM will report a failed programming status but actually programs, and all other ECUs report a successful programming status. I found that for me the BCM was the only one that "failed programming". You can manually check the versions of the different programs/calibrations using the TLC tool before reprogramming. I programmed with the vehicle in maintenance mode.

  3. The PSCM wouldn't send the PSCM status CAN message for a bit. I'm not sure what fixed this because I changed multiple things at once, but it was likely either turning the car fully off then back on, running the PSCM "setup" routine using TLC, or clearing DTCs.

  4. The next issue encountered was a cruise fault caused by the ECM reporting a faulted "CruiseState" over CAN. This turned out to be solved by running the brake pedal position (BPP) sensor calibration routine for the BCM. In order to do this, I needed to use GDS2 since SPS can't do this. I have no idea why this is, but to run GDS2 you need to open TLC from your desktop instead of through the website and select "standalone mode". You then need to load a zip file referred to as a "deliverable". I used the 2022 "gm global" one found through this website: https://blog.obdii.shop/gds2-download-for-gm-mdi-gds2-software-free-download/. You load the zip, restart TLC, then click through the BCM options until you find the "recalibrate BPP released brake position" routine, or something of the like. This should clear the DTC in the BCM and subsequently the faulted CruiseState in the ECM.

In general Openpilot works pretty well and I'm excited to improve it over time! I'll probably end up getting a radar since the E2E based follow distance is basically infinite, but this branch seems to make it a bit better: https://github.com/commaai/openpilot/pull/27493

⚠️ **GitHub.com Fallback** ⚠️