Before I start talking about what coding I did to the 2016 BMW M2, let me first say coding a modern car is a source of massive debate. I do not take coding lightly as there is potential for serious issues. With that said, I personally feel modern cars have (in some ways) become too smart. They restrict us beyond what is needed and in a quest to be smarter they begin to take away some of the primary characteristics of the car's spirit and purpose. This is why I decided to code my M2 as part of this build, but I certainly do not suggest someone else coding their car.....that is up to you and you alone.
Ok, with that out of the way let's talk about what coding is, why I coded, what I coded, and who I used. For those that don't know much about coding modern cars the concept is rather simple. The master computer in the car is hooked up to many sensors and modules. The computer is run by code. The sensors and modules feed information into the computer and the computer code decides what the car can and can not do. Manufactures of cars don't want to write special code for each model and version of car they make. So they write as few different versions of their code as they can and then simply have options in the code to handle the different models and versions. This is cost effective for the car manufacture but it also opens the door for hackers to manipulate the code to get your car to do things the manufacture didn't intent when you bought the car.
An example would be BMW's brake force lighting. Some BMWs will flash the brake lights under heavy braking while other BMWs will simply make the brake lights brighter. That decision is run by a code variable. If you can find that variable in the code you can "enable" brake force lighting or "disable" it. In the case of the M2 there is no setting to change this for the typical owner. But if you change the code slightly all of a sudden your M2 can have brake force lighting which was reserved for the M4 and M3 in certain countries.
As a street car there is no strong reason to code outside of wanting to "trick your car out". But I quickly learned that if you are planning on taking a modern car to the track coding might be safer and needed. The first few times I took my stock M2 on the track I noticed a few things that were beyond annoyances and bordered on major concerns. The first was the nanny systems. While BMW gives you some control over the nanny systems by allowing you to select Comfort, Sport, or Sport+ all of those settings are still too aggressive for track driving. For the street they are likely the way to go, but for the track they kill the power upon the exit of the turns and generally hold you back from feeling the car and having complete control over the car. You can turn off the system almost entirely but for some people this is too extreme. I have found Porsche gives the driver far more options on fine tuning the nanny systems. But rather than simply living with it I can do something about it with the code.
The second thing I found when tracking my M2 is that the tire pressure monitoring system (TPMS) causes all sorts of issues on the track. Again, this is a great system for the street but when on the track a few things happen. If you are like 99.99% of all track drivers you play with your tire pressure before and after each track session to optimize the pressure and grip as the tires go from cold to hot. If you fall into this category then the TPMS will drive you nuts. If you drop the pressure in the paddock so that the pressure can increase 8-10 lbs as they heat up you are likely to trigger TPMS as you start the session. Not only will the chime and lights and display message distract you, but when TPMS is triggered it can automatically change your nanny system setting from off or Sport+ or Sport and drop you back down to Comfort. This not only kills the car's performance but it is highly distracting and frankly can cause issues for you and the other drivers when on track at speed doing hard braking. Another consideration is that if you have multiple sets of tires some might have TPMS sensors and some might not. This means when you switch to a set that does not have the sensor you will immediately trigger the TPMS. But now you are stuck as you can't turn off the TPMS. And even if all your tire sets have TPMS sensors, each time you change tires you will need to reset the TPMS in your car. All of this adds up to a pain in the ass on track days. But thankfully there is a code for that.
If you were to upgrade the seats of an M2 to put in proper racing seats and racing harnesses (say 4, 5, or 6 point) you will trigger the seat belt reminder chime and light. This again is very distracting to the driver to have a chime and light and display message while you are trying to drive at speed on the track. It is also a bit counterintuitive to have a warning light when you are in a certified racing seat that is far safer than the stock seat, with a 6 point harness attached to a half cage, and wearing a HANS device and helmet. So don't plug your ears and put black tape over the dash light...code it out.
Back to my example with brake force lighting....wouldn't that be a nice safety feature when on the track versus your standard brake lights? For advanced drivers who are pushing the car by doing late braking into turns which usually means getting close to other cars on the track it seems obvious that enhanced braking features would be beneficial. Many purpose built race cars and race organizations require enhanced brake lighting. Whether it is for hard braking, coasting, or for the rain many motorsport organizations and teams have decided to shift to enhanced brake lights to catch the attention of other drivers. So why settle for normal brake lighting when on the track in your M2?
All of these were performance or safety specific issues I ran into. But I also found other changes I wanted that fell more in the bucket of convenience. Like when the side mirrors fold and unfold, when the radio turns off, and the constant legal disclaimer reminders that seem to turn driving into an "accept these terms in order to have fun" experience. Also the M2 has a nice feature in the exhaust system where there is a value that the ECU controls to either open up the exhaust or restrict the exhaust. This doesn't impact the performance in a material way, but it does change the sound. I wanted to manually control that valve without having to buy BMW's M Performance exhaust as I prefer the sound of Dinan's exhaust.
My Code Changes
There are dozens of code changes you can make and most fall into the convenience bucket. If you want to see a full list of options check out the vendor's sites mentioned below. I decided to limit my changes to the following:
enable Euro MDM (this is the nanny setting used in Europe versus the US which tends to be a bit less restrictive)
enable brake force lighting (flash the brake lights under heavy braking)
disable TPMS (tire pressure monitor system)
disable driver and passenger seat belt chimes, lights, and reminders
driver controlled exhaust valve (open, closed, let the ECU decide)
disable legal disclaimers
fold mirrors when locking
unfold mirrors when unlocking
turn off radio and nav after turning off car and opening door (BMW's standard setting is that you have to hit the power button twice to turn off the radio/nav otherwise it remains on for some time)
Who I Used
There are lots of companies and services that do this kind of work. After some research I decided to go with BimmerCode because I liked the idea that I could make the modifications myself through an OBD II kit and my iPhone app. They don't support all the changes I wanted but they did support most plus I can use the kit and app on other cars as needed. I also used CodeMyCar which is more expensive and requires them to remotely connect into your car through your laptop and a cable so they can do the coding work for you. The advantage is that they can code more things and their service allows for unlimited code changes over time. CodeMyCar also seems to be able to go beyond simple code changes and actually install tunes to some degree. I used CodeMyCar for the Euro MDM code and to disable the TPMS as those codes were not supported by BimmerCode. I also used Macht Schnell which handles codes a bit differently. They sell modules (a small electronic control box) you install into the car that then manipulates how the car operates in certain ways. What's nice about this method is that they can use existing buttons and switches in your car to activate the code change. For instance their TPMS code change is triggered by lifting up on the driver's side window switch for 5+ seconds.
So far I am very satisfied with my code changes and I have not had any issues with warning lights or odd behavior. I will do more track testing later this month at Sonoma with NASA so if anything comes up I will update this posting. One question that has come up is what this will do to your warranty or when you go into the dealer. Based on my research the code changes are reversible, they are largely undetected unless someone was to audit your car's computer code which is extremely rare, and frankly since I am tracking the car and doing extensive mods my warranty is shot anyway :) The way I look at it is that in older cars we used jumpers and other tricks to accomplish the same thing as recoding. So as long as you do your research, pick the right solutions, don't do too much, and understand the risks.....code away.