I Tinkered With My BMW 128i’s Computer Coding and Didn’t Break It
I learned to pair a laptop to my car so I could alter how the car works.
A few months back, I wrote about how I downloaded an app and bought the appropriate Bluetooth OBD2 dongle to do custom coding to my BMW 128i. This was uncharted territory for me in automobile ownership. Up until purchasing the 1er, all I was familiar with was the uncustomizable econobox life. But this level of coding was only the tip of the iceberg of what's possible with a modern computing device and access to a modern BMW's DME (which is the brand's word for ECU). With the right dealer-service-department-level software, you can configure so much more.
After searching Google, I downloaded the appropriate programs to clear fault codes via laptop, run diagnostics, and recode a whole mess of features, most notably turning off certain nannies that can impact on-track performance. Most of this is unreachable via app-based coding, which is why I've dubbed this "deep coding." Here's how I, a simpleton with a short temper for technology, learned that it's not that hard at all to do.
Disclaimer: This is a summary of my experience, not a step-by-step how-to. If you're interested in doing your own deep coding, I highly recommend reading through all of the hyperlinked resources before attempting. Your mileage may vary, I'm a schlub, not a tech support professional, approach at your own risk, the wrong line of edited code can do a lot of damage, and so on.
At First It Was a Non-Starter
Perusing around E8X and E9X BMW forums, I happened upon this website that sells all the software you need loaded onto a convenient SSD hard drive. Just pop it into a compatible computer, and voila, hook up a cord and go nuts. Next, I sourced the cord from Amazon after reading up on this blog about annoying electronic BMW nannies, purchased a cheap Windows-compatible laptop on eBay, and mixed it all together. Finally, to ensure the battery didn't die while coding, which could be catastrophic for the DME, I bought a battery tender.
When I hooked everything up and did a quick dry run, I learned that the computer and cord weren't talking to each other. So, I did everything necessary to have the right hardware driver, did some troubleshooting with Google, and tried once more. Again, nothing.
After fiddling around for a good amount of time, I found this easy guide by YouTuber Evan Goyuk and realized that there is a far easier plan of attack. I mentioned that I'm a simpleton when it comes to this kind of stuff, so I decided to ditch my method with the cheap computer, cable, and hard drive full of software. I wasn't out much money, and surely I could flip it all on Craigslist to make some coin back.
I switched to my newer laptop, followed Goyuk's method of downloading all the necessary software from Google Docs and installing it correctly, bought the cable he recommends, and finally set the cable up properly in Windows Device Manager. After some frustration with the previous method, this new one made the computer, cable, and DME all finally talk to each other.
We're in Business
It was a cheer-worthy experience seeing my computer's screen say that the battery and ignition were on. This meant that the connection was made and that I could get to work. I first started looking around in INPA, which is a program for reading and clearing fault codes. A lot of it is in German—I actually have a degree in Bavarian Motor Works' native tongue but don't really use it anymore, so it was fun to decipher what different selections and messages meant.
The thing about this version of INPA is it doesn't list E82 as an available chassis code. That's OK, as the forums say everything a person needs would be under E87, which is the European 1 Series hatchback of the same vintage as my 128i. I was able to check for fault codes, clear any (none were there), read up on the different computer hardware that my 1 Series possesses, test certain functions, and more.
I can do most of this via two apps on my phone, but it's cool to have the option via laptop-based dealer software. Per Goyuk's directions and other instructables on YouTube, INPA is plenty useful just as a method to ensure you've got a solid connection between the DME and your computer.
Hack the Planet
With a sick '90s film soundtrack queued up, it was time to crack my knuckles and hack—er, code deeper. I read several different resources for doing all this, and while all the steps I took mirrored their guidance, I still came up with a sort of best-of to code exactly what I wanted to do.
The method for pulling a big mess of code is pretty simple: open up NCS Expert, select the appropriate profile (I used Revtor's NCS Expert Profile), have it read the appropriate ECU, follow all the steps, and have it read and create a trace file. I downloaded a trace file of the DSC ECU because I wanted to get rid of some lame track-unfriendly nannies. It then saves to a folder where the trace file can be accessed to alter either in NCS Dummy or directly in WordPad.
Forgive my ignorance, but it's wild that doing crucial automotive-computer-altering coding can be done in good ol' fashioned WordPad. Honest question: Are there other forms of programming that can be done from the comfort of this modest piece of OG software?
Up next, I edited the trace file directly in WordPad. This involved scrolling through and changing the text on certain listed functions. I initially found the stuff I intended to turn off here, however they're written differently in the E82—this thread gave me the appropriate names for Engine Power Reduction to Prevent Brake Disc Overheating, Brake Fading Compensation (unnecessary for good pads and fluid), and Ready Alert Brake. Disabling them was easy: change "wert_01" on each of them to "wert_00."
128i track enthusiasts seem to all agree that these either inhibit performance or give the 128i awkward pedal feel on track, so out the window (or, Windows 11) they go. Before coding them out, I didn't have any major issue with how the brake pedal felt, so it'll be interesting to see what it feels like now. I'll code out the electronic differential when I eventually upgrade to a real helical limited-slip differential.
Up next, I simply saved-as and changed the name of the file and its type, followed more steps for coding it all back into the DME, and Bob's your uncle—coding was successful. I have yet to take the 1er for a spirited test drive or rip some laps on my favorite local tracks, but I sure am excited to do so. This should all ensure I've got maximum performance available at all times. Well, besides the inevitable heat soak.
I got such a strong feeling of accomplishment after doing all this and not destroying the DME in the process. Or, somehow accidentally changing a setting and having the BMW Professional stereo only play cheesy German pop music of yore and not be able to turn it off. You never know.
This deep form of coding is a bit menacing, but don’t let it intimidate you. I am proof that as long as you do your research, learn how to use the various programs, read carefully, and follow the steps, it's really not that bad. I'm absolutely terrible with technology, and although I probably took longer to figure it out than a golden retriever would've, now that I've done it, I'm confident in being able to make more changes or translate this knowledge into another future car, like an E90 M3, F87 M2, or others. I think the only downside is that I'm now more motivated than ever to buy a real limited-slip differential and code out the blasphemous e-diff, which my wallet certainly isn't excited for.
It's fun stuff like this that keeps us enthusiasts motivated to keep wrenching, learn new methods and technologies, keep doing that extra bit of reading to up our DIY competencies, save some scratch, and blabber about it with our friends in our collective love of tuning.