You know, this week I was going to talk to you about how BMW have completely lost the plot. How the Bugs Bunny teeth of the new G80 M3 were the least of its problems.

(photo thankfully belongs to bmw)

The car overheats despite the “added cooling”, the side design is possibly worse than the front… It pales in comparison to the F80. There was also a metaphor about strong men, good times, weak men and bad times, but that would not be any fun and it would end up like the second Star Wars trilogy. My only hope is that Boba Fett could redeem Disney's "improvements".

Which, to be fair to George Lucas, is not the worst of the three Star Wars trilogies. I am not that full of myself to bore you with made up intergalactic politics for hours and offer nothing but Jar Jar, Midi-Chlorians and what not in return. All of this will be a completely separate tantrum about the under utilization of Obi Wan, Qui Gon, Padme, and Darth Maul. Instead I am not going to, because I know wasting the internet is a crime. I am going to tell you about Abrites and the cool stuff we developed in the past few years, most of which was done completely from scratch and is now competing with companies doing the same for the past 3 decades…

I have always been fascinated with BMW and their technology, all the cool things they have debuted and the way they were. The focus this week, I believe could be on the coding and programming of BMWs. This is one of my favorite topics because many people (your customers) are looking for retrofitting and coding changes. But this is just the tip of the iceberg.

So coding, Vehicle Order and Programming in all their forms is taken care of by one of the most versatile special functions – BN012. Why do I say that? Well, if you read the previous two parts of this BMW blog, you will see many of the options BN012 helps with. Here, however, we will explore more of the standalone features of BN012. We need to define all three of these parameters and have a detailed description of what they mean. Let’s get started.


This is a term used to define the ability to “unlock” features which are already available for a certain car, to enable them for the user of the vehicle. These features are frequently sought after by the owners of the vehicles, for example they can be functions of the I-Drive system like the Sports Displays, Lap timers and other features. These are usually available in the M models and often times they are requested by people who want to see them. Coding is done by module but it is not limited to these, shall we say, secondary features. For example, coding will allow you to enable or disable the seat scales when they inevitably brake and the customer prefers a cheaper solution than replacing the seat or scales… Again, this is not everything because coding goes much deeper. It is sometimes required for module exchange and we have an awesome feature where you can save the coding of one module to a file and then write it to the replacement module without having to go through all the menus and changing hundreds of values. We often provide “Fast coding” for most modules where we have the option to change something (Seat scales for example) in just a single click. This takes care of the most common customer requests you may come across. Of course it may get a lot more complex because every single module has coding and we can change every single parameter, but this requires a lot of reading on your part. Coding is tightly related to the Vehicle Order of the car, mostly relating to retrofitting modules.

Reset to default is an extremely helpful feature which Abrites also provides under the coding menu for each module in one simple click. This is a very, very complex operation which restores the coding of each module back to its original state which can be used not only when you make a mistake while coding but is extremely helpful when programming keys. It makes life much easier and allows us to be absolutely perfect when working on module replacement too. Like I said, the operation without this button is extremely hard, it depends on the Vehicle Order and the integration level (I- Level) which is the collective version number of all programmed ECUs for each car.
Vehicle Order (VO).

This term refers to a complicated alpha numeric string which defines the exact way the car left the factory. It defines the exact specification, model year, what region the car was designated for and what options it had installed from factory. BMW call that the Fahrzeugbestellung, or “FA” for short. The VO can be modified to suit our needs. For example, adding higher levels of Hi- Fi to a car must go through Vehicle Order modification but this has to work together with the coding to allow the full functionality. Before we move to the Programming option, I want to take a moment to give you an example because all I said may not immediately translate into practice. So, here it goes:
We have a BMW 3 Series, F30, 335i built in 2014. This car has been imported from Texas in the USA to Basel in Switzerland. The car is equipped with a standard Hi-Fi, it has the M sport optional package, sports seats but no heating and that is all we have. The new owner is an enthusiast who wants to modify the car to their liking.

1. We change the Vehicle Order from hot climate to cold climate which allows us to install heated seats and steering. We physically install those and then change the coding of the car to tell it that it now has these features, we press the button and hey presto, it is now warm. We also install blinds behind the kidney grills for better heating and we change the heater, so as to take note of that. We then change the coding of the electric water pump, which allows us faster warm up and more comfort for the user. In the case of the N55 engine, we have this option because the water pump is electric and fully programmable, albeit not long lasting.

2. Step two is the addition of the M-performance package. In the case of the 335i F30 there were three Brembo 4 piston caliper options for the front:
- 340 mm rotors with non-painted calipers;
- 340 mm with painted calipers (blue), as is the case with the M sport we have;
- 370mm rotors in at least 4 colors.

Naturally, the customer wanted to move from the plain 340 mm with a dull, raw aluminum finish to a red 370mm set. We then coded the VO to have the M-performance option and installed them. The coding here was done again because we needed to tell the brake pump it now had to shift a bit more fluid and calibration was done to the braking bias to retain the functionality of the DSC. The customer proceeded to install the EU specific bumpers and add-ons together with the all important sticker set (which alone added at least 25 bhp to the car) and plastic engine cover. The M-performance suspension was added then and it was time to move to the luxuries.

3. We needed to move from standard Hi-Fi to the Harmon Kardon option and a large screen NBT – Lots of coding and VO changes we had the HK audio installed together with a full NBT I drive system and a 360 camera system.
This took some time but the end result was worth it and the customer was happy:




There was a lot more done mostly regarding what we call “seamless integration” of all these modifications to make everything feel absolutely Factory. Needless to say, the customer was over the moon and we did all that with AVDI and the coding. Oh, I nearly forgot. We got the latest navigation maps installed and enabled Apple CarPlay.


So by now you are starting to get into grips with the Coding in BMW, so we should also mention the Ability for programming. Programming refers to more drastic changes to the vehicle and it is sometimes also called “Flashing”, which means that the Software inside a module is changed completely to a different version. This poses a lot more danger and we must be completely sure of what we are doing every time we use this option. Abrites has its own database of flash files and once you enter the programming menu, you will be suggested an option for each module. This is often used by tuners, but not only. In the case of another 335i – this time an E92 we applied flash files to the DME and EGS to complete what is known as Alpina-ing your 335. The Alpina B3 E9x is almost exactly the same hardware as any old 335i. The difference is that the ZF 6HP and N54 engine have different programming in them (different flashes), so for this car we went from 306 bhp to 360 and 400 to 500 Nm in a couple of hours.

Disclaimer: DO YOUR OWN RESEARCH! Do not get trigger happy, destroy a car and blame me!

Of course, programming is used for updates, BMW usually “flash” the whole car any time it goes in for an oil change and even they get it wrong sometimes. In fact, CAS3 to CAS3+ happens just like that. Other features include the ability to program single modules, to update or change the programming to just one module to newer or older versions, which is something first seen in Abrites diagnostics for BMW.
We have to mention that all coding is available through the BN012 and supports most E and F series models and modules inside them. G series are the next focus of our team.
I believe this pretty much concludes what I wanted to discuss with you. In version 33.4 we will provide a new development on the service functions within BMWs, as until now we had them but they were not quite perfect. Hey, we don’t always get it right, but we do all we can to provide you with the best tool we could.
There was something else I wanted to tell you… Oh, yes! HAN SHOT FIRST!