BMW E93 Code 9402 — Rollover Controller

Virgil
3 min readDec 31, 2020

After a battery failure, I got a Code 9402 from the ACSM (Advanced Crash Safety Module). Unfortunately, this code cannot be reset with either a normal code reader/eraser, nor with BMW specific tools like ISTA/Tool32.

The culprit is the ROC (ROllover Controller) module. In my case, this was a Helbako 9180627–01:

ROC module

Unfortunately, fixing this is not trivial and the information on the Internet is spotty at best.

Since this has been an interesting journey, I decided to write about it so others can avoid paying BMW crazy amounts of money for something that should be part of a recall in the first place.

First, find and remove the module. It’s on the driver side, behind the rear bench (remember, this is an E93 — convertible).

A good video (of bad quality) can be found here.

This is how it should look like after all is removed:

At this point you have three options:

  • Buy a new one from BMW
  • Buy an used one (of the same type) off eBay for about $200
  • If you are like me, try to fix it.

So, onwards… The error is stored in the EEPROM of this module and needs to be reset. This is the culprit, an ST95080 8Kbit EEPROM

ST95080

At this point, the only two things left to do are to find a way to program it, and to find what you need to write back to the chip.

You can use an EEPROM reader/writer like carprog (about $50 on aliexpress), which seems to be able to do in-circuit programming (no soldering required), or you could desolder it, read it, write the correct code back and re-solder it.

Since the carprog box would take more than a month to reach me from China (in COVID-19 days), and since the chip’s interface is SPI, I decided that an Arduino should be able to do the job. Unfortunately, SPI programming examples for Arduino are scarce — do NOT follow this, as AT25HP512 has a page based write. There is even an interesting tutorial here for a similar chip, but I could not make it work. So, I wrote my own using the two examples above. Some inventive soldering later

we’re ready to program it. Find on github the Arduino source and schematic. Not my best piece of code, but it works.

Once you have the 8Kbit (1KB) binary file, you can ask the nice guys at Digital Kaos for a clearing, or you can figure it out on your own (write some FF in all the right places).

Solder it back aaaaaaand … airbag light gone, no more code 9402!

Hope this helps someone, it’s been a fun and interesting weekend project!

--

--