Wie so ziemlich alle Elektrofahrzeuge erzeugt auch mein neuer Opel Corsa-e ein künstliches Geräusch mit einem Lautsprecher, dem Acoustic Vehilce Alerting System (AVAS). Dieses Fahrgeräusch ist Teil der Zulassung und Anforderungen daran sind in der ECE R138 festgehalten. Mir gefiel dieses Geräusch nicht, ich wollte es durch eines ersetzen, welches eher elektrisch klingt, wie etwa ein Frequenzumrichter einer U-Bahn.

Natürlich hatte ich den Hersteller des AVAS-Moduls dazu kontaktiert, leider gab es auf meine Anfrage dort keinerlei Reaktion.

Direkt vorab: Ich habe keinen Weg gefunden, das AVAS-Geräusch über den CAN-Bus zu ändern. Über den OBD2-Stecker geht das nicht. Das AVAS-Modul muss ausgebaut und geöffnet werden, der Speicher auf der Platine kann mit einem geeigneten Programmiergerät überschrieben werden.

AVAS-Soundmodul

Mein Corsa-e verwendet ein AVAS-Modul des Herstellers FIAMM vom Typ A004BR, die Teilenummer 9839315880 ist auch auf dem Modul aufgedruckt. Das Modul befindet sich vorne unten im Motorraum.

Das ganze ist ein Lautsprecher mit augenscheinlich wasserfester Membran in einem spritzwassergeschützten Gehäuse.

Über die Teilenummer findet man weitere Fahrzeuge, die das Modul verbaut haben, das sind unter anderem:

  • Peugeot: 208 II, e-208, 2008 II, e-2008, 3008 II (Hybrid), 408, 5008 II
  • Opel: Mokka B, Mokka-e, Corsa F, Combo EV, Grandland X
  • Citroën: C4, e-C4, C4 SpaceTourer
  • Toyota ProAce Electric

Das hier beschriebene müsste sich also auch auf diese Fahrzeuge anwenden lassen, wenn dort auch das A004BR verbaut ist.

Einstellmöglichkeiten über CAN

Über die Fahrzeugdiagnose über den CAN-Bus lassen sich am Steuergerät selbst nur drei Parameter ändern:

  • Auswahl zwischen 6 Tönen
  • Lautstärke beim Vorwärtsfahren
  • Lautstärke beim Rückwärtsfahren

Die Einstellungen sind, vermutlich wegen der Relevanz der Fahrzeugzulassung, nur mit SecureAccess änderbar, das funktioniert über ein mittlerweile entschlüsseltes Seed-Key-Verfahren.

Beim Ändern der Sound-Auswahl fällt auf, dass nur Sound 1 und 2 funktionieren, bei Sound 3 bis 6 ist das Modul still. Ein „Sound 0“ oder „No Sound“ ist auswählbar, wird aber vom Steuergerät abgelehnt.

Reverse-Engineering

Es gibt wenige Unterlagen über das AVAS-Modul selbst, unter anderem findet man die Information, dass das Gerät WAV-Dateien abspielt und es auch eine Software gäbe, mit der man das Geräusch anpassen kann. Mehr Informationen konnte ich nicht finden, der Hersteller selbst hat wie eingangs erwähnt auch nicht auf meine Frage reagiert. Also habe ich mir ein Ersatzteil vom Schrottplatz besorgt.

Das Gehäuse lässt sich relativ selbsterklärend öffnen. Im Inneren befindet sich eine Platine und ein Lautsprecher. Es gibt 6 Anschlüsse (H1 bis H6) auf der Platine, von denen nur 4 für den Stecker verwendet werden.

Pin-NrKabelfarbe AutoBedeutung
1 – H1Weiß+12 V
2 – H2GelbCAN Low
3 – H3WeißCAN High
4 – H4RotGround

Auf der Platine befinden sich unter anderem folgende Bauteile:

  • NXP S32K142 ARM Cortex Mikrocontroller
  • ISSI IS25LP016 SPI NOR-flash-Speicher (2 MB)
  • Burr-Brown/TI PCM5100A Stereo Digital-Analog-Konverter

Da der S32K142 nur 256 KB Flash-Speicher hat, war es naheliegend, dass die Audio-Daten auf dem externen 2-MB-Speicher liegen.

J3 ist vermutlich ein Cortex-Debug-Anschluss, der nicht verlötet ist.

Flash-Speicher

Der IS25LP016 kann mit einem geeigneten Programmiergerät mit passendem 3,3-V-Pegel gelesen und geschrieben werden, z.B. mit einem modifizierten CH341A. An dieser Stelle hatte ich Glück: Mit dem passenden SOIC8-Test-Clip funktioniert es ohne löten und ohne zusätzliche Spannungsquelle. Vom Testclip muss man ein paar Ecken abschneiden, da zwei Bauteile sonst im Weg stehen.

Es zeigt sich: Auf dem Flash-Speicher liegen 6 WAV-Dateien, alle identisch. Zum Austausch der WAV-Dateien ist Kenntnis über den genauen Aufbau des Speichers und das Format der Daten nötig. Es sind nicht einfach nur WAV-Dateien, die auf einem Dateisystem abgelegt werden.

Die 6 Audiodaten liegen jeweils als 128-kB-Blöcke im Speicher, der erste Block beginnt bei 0x000000, der zweite bei 0x020000, der dritte bei 0x040000 und so weiter. Der Rest zwischen 0x0C0000 bis 0x200000 ist durchgängig mit 0xFF beschrieben.

Aufbau eines Audioblocks

  • 0x000000-0x000003: Anzahl der nun folgenden Audio-Bytes als vorzeichenlose 32-Bit-Ganzzahl (z.B. 00 01 BF E4 = 114660 Byte Audiodaten folgen)
  • 0x000004-0x01FFFB: Audiodaten, Rest mit 0xFF gefüllt
  • 0x01FFFC-0x01FFFF: Prüfsumme (z. B. 82 05 35 D6)

Die Audiodaten sind in folgendem Format gespeichert: Stereo Signed 16-bit PCM Big-Endian. Das AVAS spielt den Ton abhängig von der gefahrenen Geschwindigkeit schneller, eine Sample-Rate von 11025 Hz entspricht etwa dem Ton bei 5 km/h.

Prüfsumme

Die Prüfsumme wird aus dem gesamten Block zwischen 0x000000 bis 0x01FFFB gebildet, inklusive der Längenangabe und dem mit 0xFF gefüllten Bereich nach den Audiodaten. Der Trick ist, dass die Byte-Reihenfolge jeder 4-Byte-Gruppe vor Berechnung der Prüfsumme gedreht wird: Beispielsweise wird aus 0xC3A81F09 dann 0x091FA8C3. Daraus wird die CRC32-Prüfsumme berechnet und als Big-Endian in die 4 Bytes im Speicher geschrieben. Die Prüfsumme muss stimmen, andernfalls bleibt das Gerät stumm (ohne Fehler im Fehlerspeicher).

Die Prüfsumme wurde durch Ausprobieren von etwa 67.000 möglichen Varianten gefunden, dank moderner LLM-Tools lassen sich solche Analysen mit sehr wenig Zeitaufwand schnell umsetzen.

Sound austauschen

Mein Ziel war, den Sound der New-York-Subway zu nutzen (inspiriert von der Tram aus dem Videospiel Dead Space), um das jetzt zu erreichen, habe ich mir ein paar wenige Tools per Claude Code bauen lassen. Theoretisch könnten die Sound-Samples auf dem AVAS-Modul auch etwas länger sein, ich habe mich aber darauf beschränkt, die neuen Dateien auch exakt 2.6 Sekunden lang zu generieren.

Alle Tools liegen hier auf Github zum Download bereit. Mit den Erkenntnissen hier und dem Quelltext kann man sich problemlos auch etwas eigenes bauen.

Synthesizer

Man benötigt ein Audio-Sample, welches sich perfekt wiederholen lässt, hierzu habe ich einen Synthesizer erstellt. Dabei wird die bereitgestellte Audio-Datei in ihre Frequenzbestandteile und ein Rauschen zerlegt und versucht, daraus eine dauerhafte Charakteristik mit perfekter Wiederholbarkeit zu generieren.

Der Synthesizer erzeugt eine WAV-Datei direkt passend im Speicherformat für das AVAS.

Die Anforderungen, die in der R138 definiert sind (bestimmte Drittel-Oktav-Bänder müssen einen vorgeschriebenen Pegel haben) lassen sich damit grob anzeigen, das ersetzt zwar keine Fahrgeräuschmessung, aber man bekommt einen Eindruck, ob der Ton überhaupt geeignet ist oder nicht.

Beim Original-Ton sind die hörbaren Töne im Spektrum deutlich zu erkennen, ein erheblicher Teil kommt jedoch vom Rauschen. Da die Übertragungsfunktion vom Lautsprecher nicht bekannt ist, würde ich das aber dennoch als Spielerei bezeichnen.

Flash-Datei erstellen und entpacken

Mit zwei Python-Skripten kann der Inhalt einer flash-Datei in 6 einzelne WAV-Dateien entpackt werden, aus den 6 Dateien lässt sich wieder eine neue Datei packen. Die Datei wird in der CLI ausgeführt, flashBinExtract.py erwartet eine Datei flash.bin und flashBinGenerate.py erzeugt eine Datei flash-new.bin im Verzeichnis des jeweiligen Skriptes.

AvasCanUtil: Testen und konfigurieren

Mit einem CANable an USB direkt am AVAS-Modul mit 12-V-Versorgung kann man mit diesem Tool die Fahrt simulieren und den Ton anhören, ebenfalls können Lautstärke und Tonauswahl über die Kodierung angepasst werden. Das Programm ist nicht zur Nutzung direkt am Fahrzeug vorgesehen sondern nur zu Testzwecken am ausgebauten Modul mit einem CANable.

Ich hatte mir zum Test Jumper-Kabel auf die Platine gelötet und kann so die Stromversorgung und CAN-Leitungen zum Testen einfach anstecken.

Fazit

Effektiv kann man also mit den bereitgestellten Tools mit einem Programmer und SOIC8-Test-Clip zwei Töne einspielen und über den CAN-Bus zwischen den beiden Tönen umschalten. Am Auto selbst lässt sich das Umschalten nur über ein passendes Diagnosegerät mit Codierfunktion bewerkstelligen, da wird es auch noch etwas passendes geben.

Bitte macht keinen Unsinn mit dieser Information. Es ist vielleicht ganz witzig, wenn das Auto durch die Gegend schreit, die Fahrzeuge sind ohne das künstliche Geräusch jedoch so leise, dass man sie als Fußgänger tatsächlich nicht bemerken kann.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert