Audiosignale ganz digital

I2S-Chips am Raspberry Pi

29. Juli 2022, 9:00 Uhr | Von Klaus Dembowski
Kopfhörer
© AdobeStock

Der Raspberry Pi bietet verschiedene Schnittstellen für den Anschluss von Peripherie, beliebt sind insbesondere der GPIO Port sowie SPI und I2C. Auch für One-Wire und I2S sind zahlreiche Bauelemente verfügbar. Ging es in der D&E 4/21 um One-Wire, steht in dem Beitrag die I2S-Schnittstelle im Fokus

Im Beitrag in der Design&Elektronik 4/21 wurde die One-Wire-Schnittstelle des Raspberry Pi behandelt. Dieser Beitrag beschäftigt sich mit einer weiteren Schnittstelle: I2S steht für »Inter Integrated Sound« und stellt eine vereinfachte Version des I2C-Bussystems (Inter Integrated Circuit Bus) dar. Beide Systeme wurden ursprünglich in den achtziger Jahren von Philips Semiconductor für die Unterhaltungselektronik (HiFi-, TV-Technik) entwickelt, um entsprechende Chips geräteintern mit wenigen Leitungen und ohne Einbußen in der Signalqualität koppeln zu können.

I2S ist ausschließlich für die Datenübertragung von Pulse Code Modulation (PCM)-Signalen zwischen zwei Audioeinheiten bestimmt, wobei eine der Einheiten die Funktion des I2S-Controllers innehat, was beispielsweise von einem Raspberry Pi übernommen werden kann. PCM ist das klassische digitale Format, in welches ein analoges Signal mit Abtasten und Quantisieren umgesetzt wird.

Anbieter zum Thema

zu Matchmaker+
Bauelemente mit I2S-Interface
Tabelle 1: Bauelemente mit I2S-Interface.
© K. Dembowski

Im PCM-Datenstrom werden bei I2S zwei Audiokanäle übertragen. I2S arbeitet unidirektional, und das Übertragen von Daten findet über zwei Leitungen (CLK, Data) statt, weshalb es sich dabei – im Gegensatz zu I2C – nicht um ein Bussystem, sondern lediglich um eine 1:1-Schnittstelle handelt. Ein Adressieren zum Selektieren einzelner I2S-Chips gibt es demnach nicht. Gleichwohl verfügen einige Typen (z.B. ES9018, siehe Tabelle 1), wie die komplexeren Audiobausteine, für das Konfigurieren zusätzlich über eine I2C-Bus-Schnittstelle. Bei den einfacheren Typen gibt es für das Konfigurieren stattdessen spezielle Pins, zum Beispiel Mode oder Function, die entsprechend mit Vcc oder GND zu verbinden sind.

Typisches I2S-Timing
Bild 1: Typisches I2S-Timing, bei dem 24 Bit für jeden Kanal mit dem MSB zuerst übertragen werden.
© Klaus Dembowski

Der I2S-Controller liefert den Takt und kennzeichnet mit dem Select/Frame-
Signal, das man ebenfalls als »Word Select« oder »Word Strobe« (WS) bezeichnet, den gültigen Datenrahmen mit der Unterscheidung zwischen dem rechten und dem linken Audiokanal. Typisch ist eine Datenlänge von 24-32 bit,
wobei das MSB zuerst gesendet wird (Bild 1).

I2S-Chips kommen in großen Stückzahlen in Blu-Ray- und CD/DVD-Playern sowie für Verstärker, Mischpulte und TV-Geräte zum Einsatz, weshalb sie trotz ihrer Komplexität und sehr guten Daten bezüglich Frequenzgang, Signalrauschabstand, Auflösung und Sampling-Raten verhältnismäßig preiswert sind. Sie eignen sich deshalb nicht nur für die Audiosignalverarbeitung (Effekte, Filter, Raumsimulation, Sprachsynthese, Studiotechnik), sondern ebenso für die Messwerterfassung und -ausgabe, also für das Messen (Voltmeter) und die Ausgabe (Generator) von unterschiedlichen Wechselspannungssignalen, die allerdings im Abtastspektrum der Audiofrequenzen liegen müssen.

PCM1820
Bild 2: Der PCM1820 ist ein einfacher Stereo-ADC mit I2C-Schnittstelle, an den direkt zwei analoge Mikrofone anschließbar sind.
© K. Dembowski nach TI datasheet

Die größte Auswahl an I2S-Bausteinen gibt es bei Analog Digital Convertern (ADC), insbesondere von der Firma Texas Instruments (Bild 2), wobei die Bausteine ursprünglich von der Firma Burr-Brown entwickelt wurden. Analog Devices hat einige Converter im Programm, die ein Bitstream-Signal, das in der Pulse Density Modulation (PDM) vorliegt, in ein PCM-Signal und somit für I2S umsetzen. Bei der Pulsdichtemodulation (PDM) ist der Pulsabstand der beiden möglichen Logikpegel variabel und die Dichte der logischen Pegel ist von der anliegenden Signalamplitude abhängig. Das PDM-Formatist bei Mikrofonen mit digitalem Ausgang gebräuchlich.

MEMS-Mikrofon
Bild 3: Prinzip und Aufbau eines MEMS-Mikrofons.
© Knowles

Besonders interessant sind MEMS-Mikrofone, die alle Komponenten von der Membran, über ein Filter und den A/D-Wandler bis hin zum I2S-Interface enthalten und bereits ab ca. ein Euro pro Stück erhältlich sind. Hiermit lassen sich beispielsweise Systeme für die vorausschauende Anlagenwartung, bei der die Maschinen nicht mit verschiedenen Sensoren, sondern mit Mikrofonen für die Zustandsüberwachung ausgestattet werden, relativ einfach aufbauen (Bild 3). Ein später folgender Artikel wird dieses Thema (Acoustic Predictive Maintenance) näher behandeln.

Pin Raspberry Pi GPIO-Leiste Pin Mikrofon Funktion
1 5 Power 3,3 V
12 4 Clock
35 1 Word Strobe
38 6 Data
39 3 Ground

 

Ursprünglich waren die I2S-Signale beim Raspberry Pi teilweise am GPIO-Port sowie am P5-Anschluss implementiert, den Audio-Boards wie »HiFiBerry« oder die »Wolfson Audio Card« verwenden. Aktuell sind alle PCM-Si­gnale des I2S-Interface an der 40-poligen GPIO-Leiste und den folgenden Kontakten vorhanden.

  • Taktsignal: PCM-CLK, Pin 12
  • Dateneingangssignal: PCM-Din, Pin 38
  • Datenausgangssignal: PCM-Dout, Pin 40
  • Select/Frame-Signal: PCM-FS, Pin 35

Als Beispielapplikation wird ein Miniaturmikrofon vom Typ SPH0645LM4H-B der Firma Knowles an den Raspberry Pi angeschlossen. Die Versorgungsspannung für das Mikrofon muss im Bereich von 1,6 bis 3,6 V liegen, weshalb die 3,3 V des Raspberry Pi hierfür passen.

Im Betrieb verbraucht das MEMS-Mikrofon lediglich 600 µA, im Sleep-Modus, den Entwickler über ein Reduzieren (<1 kHz) oder über das komplette Abschalten des Taktsignales aktivieren können, sind es nur noch maximal 10 µA. Die Leitungen zwischen dem Raspberry Pi und dem Mikrofon sind, wie es in der Tabelle 2 angegeben ist, zu verbinden.

Signalbedeutung des MEMS-Mikrofons
Bild 4: Anschlüsse und Signalbedeutung des MEMS-Mikrofons.
© K. Dembowski nach Knowles datasheet

Das Select-Signal am Pin 2 des Mikrofons wird fest auf Low-Potenzial geschaltet, das heißt, die Daten starten mit einem Low-Pegel an WS, wie es Bild 1 zu entnehmen ist. Mit einer zusätzlichen Widerstandsbeschaltung (Terminierung) ist es möglich, zwei der Mikrofone am I2S-Interface zu betreiben (Bild 4).

Konfiguration

Standardmäßig sind die angegebenen Pins beim Raspberry Pi als GPIO-Ports eingestellt. Damit sie stattdessen entsprechend des I2S-Protokolls funktionieren, ist das zunächst in der Datei »boot/config.txt« über das Aktivieren (Auskommentieren) des Eintrags »#dtparm=i2s=on« festzulegen. Generell wird der Audiosupport über das Eintragen des Moduls »snd-bcm2835« in die Datei »etc/modules« hinzugefügt, was sich beides recht einfach mit dem Editor »nano« durchführen lässt.

Kernel-Module
Bild 5: Anzeige der Kernel-Module, die etwas mit dem Sound (snd) zu tun haben.
© K. Dembowski

Ein Überprüfen, ob der Audiosupport für I2S korrekt vorhanden ist, ist nach einem Reboot über die Eingabe von »lsmod | grep snd« möglich, womit alle geladenen Kernel-Module nach »snd« (sound) gefiltert und angezeigt werden (Bild 5). Im Wesentlichen gewährleistet der Treiber »soc_bcm2835_i2s«, dass der Rechner den Takt für I2S erzeugt und Entwickler die Signale der PCM-Anschlüsse korrekt auswerten können. Außerdem setzt er später die gewünschten Einstellungen wie Sampling Rate und Sampling Format (Bit-Format) um.

Als wichtiges Element ist eine Erweiterung für I2S-Audio nötig, die GitHub [1] als Modul bereitstellt. Hiermit bindet man das MEMS-Mikrofon an den I2S-Audiotreiber sowie an den im Betriebssystem integrierten Audio-Codec, was das Durchführen einer Kernel-Erweiterung sowie die Integration in den Autostartmechanismus bedeutet [2]. Die hierbei generierte neue »Standard Linux Soundcard« für I2S-Audio ist daraufhin als »simple_card« (Bild 6) geführt.

Überprüfen des erstellen I2S-Moduls
Bild 6: Überprüfen des erstellen I2S-Moduls für das MEMS-Mikrofon.
© K. Dembowski

Die Bezeichnung für das I2S-Audiomodul lautet ab der zweiten Raspberry-Pi-Generation »3f203000.i2s« und bei allen Raspberry-Pi-Zero-Typen »20203000.i2s«, was sich mit »sudo cat /sys/kernel/debug/asoc/platforms« kontrollieren lässt.
Nach dem Kompilieren, dem Einfügen des Moduls sowie der Konfiguration der Autostartfunktion ist der Raspberry Pi neu zu starten und am besten eine Funktionsprüfung dahingehend vorzunehmen, ob das neue Modul korrekt integriert wurde, wie es in Bild 6 gezeigt ist.

Achtung Aufnahme

Der Raspberry Pi kann ein übliches Audiosignal in Stereo ausgeben, wie etwa eine MP3- oder eine WAV-Datei und prinzipiell jeden Typ, für den es einen entsprechenden Linux-Codec gibt. Der Audioausgang ist mit einer 3,5-mm-Klinkenbuchse aufgebaut. Ab dem Modell B+ ist eine vierpolige Buchse auf der Platine vorhanden, die neben dem Audiosignal zudem das Videosignal führt. Außerdem ist das Audiosignal im HDMI-Signal enthalten. Über entsprechende Adapter lässt sich das Audiosignal an eine Stereo­anlage oder ein anderes Wiedergabegerät anschließen. Hiermit ist die standardmäßige Audiounterstützung beim Raspberry Pi eher spärlich und es gibt zudem keine Aufnahmemöglichkeit. Mit dem Hinzufügen einer entsprechenden »Soundkartenschaltung« als HAT-Karte oder als USB-Dongle lässt sich diese Funktion jedoch nachrüsten.

Das für Audio verantwortliche Kernel-Modul ist ab der Raspbian-Version standardmäßig installiert. Auf dem Desktop befindet sich oben rechts in
der Taskleiste das Lautsprechersymbol für die Auswahl der Audioausgabe, worüber sich Analog oder HDMI auswählen lässt, wenn kein weiteres Audiogerät angeschlossen ist. Die »Advanced Linux Sound Architecture« (ALSA) bildet die Grundlage für die Audiosignalverarbeitung unter Linux und ist von der Kommandozeile (z. B. amixer) aus nutzbar – die verschiedenen Audioanwendungen setzen in der Regel auf diese Architektur auf.

Zur Aufnahme und Wiedergabe sowie für das Bearbeiten von Audiosignalen gibt es zahlreiche Programme, wobei Entwickler Audacity für verschiedene Plattformen und somit ebenso für Linux [3] und den Raspberry Pi einsetzen können. I2S-Audio lässt sich nach der oben erläuterten Methode für das MEMS-Mikrofon oder ein anderes

I2S-Gerät an den im Betriebssystem vorhandenen Audio-Codec binden, sodass es dann ebenfalls mit den gebräuch­lichen Audio-Tools nutzbar ist.

Was auf jeden Fall ohne zusätzliche Software funktioniert und sich deshalb auch als Test empfiehlt, sind die Kommandos »arecord« für die Audioaufnahme und »aplay« für die Wiedergabe, die standardmäßig zum Rasp­berry PI OS gehören. Insbesondere das Kommando arecord bietet eine Reihe von Optionen für die Signalaufnahme (Anzeige mit arecord –h).

Aufnahme mit dem MEMS-Mikrofon
Bild 7: Durchführen einer Aufnahme mit dem MEMS-Mikrofon. Die letzte Zeile bietet eine einfache Pegelanzeige.
© K. Dembowski

Mit der folgenden Zeile wird eine Aufnahme mit dem MEMS-Mikrofon durchgeführt:
pi@raspberrypi:~ $ arecord -D plughw:1 -c1 -r 16000 -f S32_LE -t wav -V mono -v mems-mic-test4.wav

Die Bedeutung der einzelnen Parameter ist:

  • -D plughw:1      Gerät auswählen, hier Soundkarte Nr. 1
  • -c1                    Kanalauswahl, hier Kanal 1 (links)
  • -r 16000           Sampling Rate
  • -f S32_LE        Sample Format
  • -t wav              Dateiformat
  • -V mono          Mono-Konfiguration der Pegelanzeige
  • -v                     Verbose Mode für Pegelanzeige
  • -d 10               Aufnahmedauer in Sekunden (10 s)

Legt man keine Dauer fest, läuft die Aufnahme so lange, bis man das Kommando im Terminal per STRG+C abbricht. In der Kommandozeile erfolgt abschließend der Dateiname (hier mems-mic-test4.wav) mit einer (optionalen) Pfadangabe, unter dem die aufgenommene Datei zu speichern ist (Bild 7). Die Wiedergabe der aufgenommenen Sounddatei kann daraufhin mit aplay erfolgen:
pi@raspberrypi:~ $ aplay i2s-mems-mictest4.wav

Klaus Dembowski
Der Autor: Klaus Dembowski ist Entwicklungsingenieur für Low Power- und Energy Harvesting-Systeme. Er wurde 2011 und 2017 von der Redaktion der Elektronik für seine Fachaufsätze »Sensornetze mit energiesparender Funktechnik« und »Funkelektroden zur Messung bioelektrischer Signale: EKG ohne Kabel« als „Autor des Jahres“ ausgezeichnet. Sein Fachaufsatz »Raspberry Pi: Unterschätzte One Wire-Schnittstelle« war 2021 der meistgelesene Fachaufsatz auf elektroniknet.de
© Klaus Dembowski

Preiswerte Audio- und Messschaltungen mit Raspberry Pi

Mit I2S-Bauelementen lassen sich preiswert hochwertige Audio- und Messschaltungen realisieren, deren Daten sich digital mit einem Raspberry Pi weiterverarbeiten lassen. Störanfällige Leitungen für den analogen Transport von Audiosignalen lassen sich hierbei auf ein Minimum reduzieren, was die erforderliche Schaltungstechnik minimiert und einfache Leitungsführungen bei Platinenlayouts erlaubt.


Literatur
(1) Paul Creaser: rpi-i2s-audio-Erweiterung. https://github.com/PaulCreaser/rpi-I2S-audio.
Aufgerufen am 29.04.2022, 08:30.
(2) Klaus Dembowski: Raspberry Pi – Das technische Handbuch. 3. Auflage 2020. Springer Verlag. ISBN 978-3-658-27492-4.
(3) Audioeditor Audacity für Linux/GNU. https://www.audacity.de/audacity-fuer-linux/.
Aufgerufen am 29.04.2022, 08:31


Das könnte Sie auch interessieren

Verwandte Artikel

elektroniknet