In diesem Artikel wird die I2S-Schnittstelle als Beispiel verwendet, um Kenntnisse im Zusammenhang mit Linux-Kernel-Audio einzuführen.
1. Einführung in Substantive
Im Folgenden finden Sie gebräuchliche Abkürzungen, die beim Audio-Debugging verwendet werden.
1. AEC (Acoustic Echo Cancellor): Echounterdrückung.
2. AGC (Automatic Gain Control): automatische Verstärkungskompensation, Anpassung der MIC-Empfangslautstärke.
3. ALSA (Advanced Linux Sound Architecture): Erweiterte Linux Sound-Architektur.
4. ANS (Automatische Geräuschunterdrückung): Unterdrückung von Hintergrundgeräuschen. ANS kann Hintergrundgeräusche mit fester Frequenz erkennen und Hintergrundgeräusche beseitigen.
5. BCK (Bit Clock Line): Bittakt, entsprechend jedem Bit digitaler Audiodaten. Der Standard heißt SCK (Serial Clock), serielle Uhr. SCK=2xAbtastfrequenzxAbtastbits
6. DAI (Digital Audio Interface): digitale Audioschnittstelle.
7. DAPM (Dynamic Audio Power Management): Durch die dynamische Energieverwaltung kann DAPM dafür sorgen, dass das Audio-Subsystem auf Linux-basierten Mobilgeräten jederzeit im Zustand mit minimalem Stromverbrauch arbeitet.
8. DRC (Dynamic Range Control): Dynamische Komprimierung, die die Audioausgabe innerhalb eines bestimmten Bereichs steuert.
9. EQ (Equalizer): Ein Equalizer, der die Klangfarbe durch Verstärkung oder Abschwächung eines oder mehrerer Frequenzbänder des Klangs anpasst.
10. I2S (Inter-IC Sound): Ein Schnittstellenstandard zur Übertragung digitaler Audiodaten zwischen ICs. Er verwendet eine serielle Methode zur Übertragung von 2 Datensätzen (linker und rechter Kanal).
11. LRCK (Links-Rechts-Takt): Rahmentakt, der zum Umschalten der Daten des linken und rechten Kanals verwendet wird, 0: linker Kanal; 1: rechter Kanal. Der Standard heißt WS (World Select), Kanalauswahl; oder FS (Frame Sync), Rahmensynchronisation; die Frequenz von LRCK = Abtastfrequenz.
12. MCLK (Master Clock): Master Clock, im Allgemeinen MCLK = 256 * LRCK. Es ist nicht Teil des I2S-Standards und wird hauptsächlich zur Synchronisierung des internen Betriebs von Analog/Digital-Wandlern verwendet.
13. Mono: Mono.
14. OSS (Open Sound System): Offenes Soundsystem.
15. PCM (Pulse Code Modulation): Pulse Code Modulation, I2S ist eine Teilmenge von PCM.
16. Rampe: Erhöhen oder verringern Sie die Lautstärke schrittweise, um schnelle Klangänderungen zu vermeiden. Wird zum Anhalten oder Fortsetzen der Musik verwendet.
17. Stereo: Zweikanal
18. TDM (Time Division Multiplexing): Zeitmultiplex. I2S kann nur bis zu 2 Datenkanäle übertragen und TDM unterstützt bis zu 16 Kanäle.
2. I2S-Schnittstelle
I2S ist ein von Philips definierter digitaler Audioübertragungsstandard, der für die Übertragung digitaler Audiodaten zwischen internen Geräten im System verwendet wird.
I2S ist ein Zweig von PCM mit derselben Schnittstellendefinition. Die Abtastrate von I2S beträgt im Allgemeinen 44,1/48 kHz und die Abtastfrequenz von PCM beträgt im Allgemeinen 8/16 kHz usw.
Die I2S-Schnittstelle verfügt über 4 Signalsätze: SCK (Bit-Takt), LRCK (Frame-Takt), SDI/SDO (Daten).
Auf dem I2S-Bus kann gleichzeitig nur ein Master-Gerät und ein Sendegerät vorhanden sein. Das Master-Gerät kann ein Sendegerät oder ein Empfangsgerät sein. Das allgemeine I2S-Blockdiagramm sieht wie folgt aus:
3. I2S-Protokoll
Zu den gängigen Protokollmodi der I2S-Schnittstelle gehören: I2S-Normalmodus, linksbündiger I2S-Modus, rechtsbündiger I2S-Modus usw.
1. I2S-Normalmodus
Der I2S-Normalmodus ist ein Sonderfall der I2S-Linksausrichtung, auch Philips-Modus genannt. Das Bild unten zeigt die Wellenform des I2S-Normalmodus.
Das LRCK-Signal (i2s_LRCK_rx/i2s_LRCK_tx) wird niedrig, um den linken Kanal anzuzeigen, und wird hoch, um den rechten Kanal anzuzeigen.
Das SD-Signal (i2s_sdo, i2s_sdi) überträgt zuerst das MSB oder LSB und sendet das erste Bit in einem SCLK-Taktzyklus, nachdem sich LRCK ändert.
Die SD-Signalbreite reicht von 16 bis 32 Bit.
2. I2S linksbündiger Modus
Die folgende Abbildung zeigt die Wellenform des linksbündigen I2S-Modus.
Das LRCK-Signal (i2s_LRCK_rx/i2s_LRCK_tx) wird hoch, um den linken Kanal anzuzeigen, und wird niedrig, um den rechten Kanal anzuzeigen.
Das SD-Signal (i2s_sdo, i2s_sdi) überträgt zuerst das MSB oder LSB und sendet das erste Bit gleichzeitig mit den Änderungen von LRCK.
Die SD-Signalbreite reicht von 16 bis 32 Bit.
3. I2S rechtsbündiger Modus
Die folgende Abbildung zeigt die Wellenform des rechtsbündigen I2S-Modus.
Das LRCK-Signal (i2s_LRCK_rx/i2s_LRCK_tx) geht hoch, um den linken Kanal anzuzeigen, und geht niedrig, um den rechten Kanal anzuzeigen.
Das SD-Signal (i2s_sdo, i2s_sdi) überträgt zuerst MSB oder LSB, im Gegensatz zum normalen oder linksbündigen I2S-Modus werden seine Daten mit dem letzten Bit an der Flanke des LRCK-Signals ausgerichtet.
Die SD-Signalbreite reicht von 16 bis 32 Bit.
Zu den weiteren Protokollformaten gehören: PCM Early Mode, PCM Late1 Mode und PCM Late2 Mode usw.
4. ALSA-Framework
Nach dem Linux-Kernel 2.6 ersetzte ALSA OSS und wurde Teil des Linux-Kernel-Audio-Subsystems.
Das ALSA-System umfasst:
1. alsa-driver: Alsa-Systemtreiber.
2. alsa-lib: Alsa-Bibliothek, User-Space-Aufruf und Kernel-Space-Interaktion.
3. alsa-utils: Befehlszeilentool.
4, alsa-plugin: alsa-Rezension.
5. Alsa-Tools: Alsa-Tools.
Das ALSA-Framework besteht aus Folgendem:
Die relevanten Funktionen im Alsa-Treiber sind wie folgt (am Beispiel der Rockchip 4a-Karte):
1. Codec: Gemeinsame Teile von Audio-Chips, einschließlich Codec-Initialisierungsfunktion, Steuerschnittstelle, Register-Cache, Steuerung, Dapm-Komponenten, Audio-Routing, Vorspannungseinstellungsfunktion und andere Beschreibungsinformationen.
Rockchip 4A-Einzelplatine, Codec verwendet ES8316-Chip, die DTS-Konfiguration dieses Chips ist wie folgt:
2. Codec DAI: Beschreibung des Audioschnittstellentreibers zum Codec, einschließlich: Taktkonfiguration, Formatkonfiguration, Funktionsbeschreibung usw.
Codec-DAI-bezogene Implementierungen sind wie folgt:
3. CPU DAI: Bezieht sich auf den I2S- und PCM-Buscontroller des SoC, der für die Übertragung von Audiodaten vom I2S-TX-FIFO zum Codec verantwortlich ist.
Die dts-bezogene Konfiguration der RK3399 CPU DAI lautet wie folgt:
4. DAI-Link: Audiodatenlink, der den im Link verwendeten Codec, codec_dai, cpu_dai und die Plattform angibt.
Der Linux 4.4-Kernel unterstützt zwei Möglichkeiten zum Erstellen einer Soundkarte: Zum einen das allgemeine Simple-Card-Framework und zum anderen die herkömmliche Erstellung eines benutzerdefinierten Maschinentreibers.
Simple Card ist ein einfacher und vielseitiger Maschinentreiber. Wenn das Simple-Card-Framework ausreicht, um Ihre Anforderungen zu erfüllen, können Sie zuerst das Simple-Card-Framework auswählen.
Die dts-bezogene Konfiguration von DAI Link lautet wie folgt:
Die relevante Implementierung von DAI Link lautet wie folgt:
5. DAPM: Die dynamische Energieverwaltung basiert auf dem entsprechenden verbesserten Framework von kcontrol und fügt entsprechende Energieverwaltungsmechanismen hinzu. Widget ist die Grundeinheit von DAPM.
Die relevanten Implementierungen von kcontrol, dapm widget und dapm Routen im Codec (es8316) sind wie folgt:
6. DMA: Verantwortlich für die Übertragung der Audiodaten im DMA-Puffer an den I2S-TX-FIFO.
5. Debugging-Befehle
ALSA ist die Basisschnittstelle für Linux zur Audioverarbeitung, ALSA bietet jedoch nur grundlegende Schnittstellen und die Bedienung ist relativ kompliziert. Unter normalen Umständen können Sie das mitgelieferte Utils-Toolset direkt verwenden. Das Utils-Toolset besteht aus einigen gekapselten Funktionsmodulen . Sie können den bereitgestellten Befehl direkt verwenden, sodass Benutzer nur relevante Befehle und Parameter eingeben müssen, um die Audio-Bedienfunktion zu realisieren.
1. Überprüfen Sie die Soundkarteninformationen
root@xiaotianbsp:~# cat /proc/asound/cards 0 [rockchipes8316c]: rockchip_es8316 - rockchip,es8316-codec rockchip, es8316-codec 1 [HDMICODEC ]: HDMI-CODEC - HDMI-CODEC HDMI-CODEC root@xiaotianbsp:~ # ls -l /dev/snd/ total 0 drwxr-xr-x 2 root root 80 Aug 16 14:43 by-path crw-rw----+ 1 root audio 116, 2. Aug. 16 14:43 controlC0 crw-rw----+ 1 root audio 116, 5. Aug. 16 14:43 controlC1 crw-rw----+ 1 root audio 116, 4. August 16 14:43 pcmC0D0c crw-rw----+ 1 Root-Audio 116, 3. Aug. 16 14:43 pcmC0D0p crw-rw----+ 1 Root-Audio 116, 6. Aug. 16 14:43 pcmC1D0p crw-rw----+ 1 Root-Audio 116, 1. Aug. 16 14:43 seq crw-rw----+ 1 Root-Audio 116, 33. Aug. 16 14:43 Timer< /span>
controlCx: Steuerschnittstelle, die eine flexible Möglichkeit bietet, registrierte Soundkarten zu verwalten und vorhandene Soundkarten abzufragen.
pcmCxDxc: PCM-Schnittstelle, entsprechend dem Aufnahmegerät.
pcmCxDxp: PCM-Schnittstelle, entsprechend dem Wiedergabegerät.
Timer: Unterstützt Soundsynchronisierungsereignisse, um Timer auf der Soundkarte bereitzustellen.
seq: Sequenzer-Schnittstelle, eine High-Level-Schnittstelle für MIDI-Programmierung und Klangsynchronisation, die fortschrittlicher ist als die ursprüngliche MIDI-Schnittstelle.
2. Überprüfen Sie die Sammlung und Wiedergabe der PCM-Informationen der Soundkarte
root@xiaotianbsp:~# cat /proc/asound/pcm 00-00: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 : : Wiedergabe 1 : Aufnahme 1 01-00: ff8a0000.i2s-i2s-hifi i2s-hifi-0 : : Wiedergabe 1
3. Überprüfen Sie die ALSA-Treiberversion
root@xiaotianbsp:~# cat /proc/asound/version Advanced Linux Sound Architecture Driver Version k4.4.154-90-rockchip-ga14f6502e045.
4. Überprüfen Sie die Informationen der Soundkarte 0
root@xiaotianbsp:~# cat /proc/asound/card0/pcm0p/sub0/status geschlossen
5. Register anzeigen
## regmap名称 root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/1-0011/name es8316< /span> 12: 2818:0017:0016: 0015: 3314: 0013: 0011: fc10: 110f: ff0e: ff 0d: 3f0c: ff0b: 0c0a : 0c09: 0408: 0007: 0006: 1105: 0004: 1103: 2002: 0801: f300: c0root @xiaotianbsp:~# cat /sys/kernel/debug/regmap/1-0011/registers## es8316寄存器28: 0000000020: XXXXXXXX1c: 0000000018: XXXXXXXX14: 01f00000root@xiaotianbsp:~# cat /sys/kernel/debug/regmap/ff880000.i2s/registers0c: 0000000008: 00033f3f04: 0000000f00: 0000000f## rk3399 i2s0控制器寄存器 rockchip-i2sroot@xiaotianbsp:~# cat /sys/kernel/debug/regmap/ff880000.i2s/name
6. Überprüfen Sie die Uhr
## 采样率44.1KHZ,mclk = 256 * sample = 256*44.1*1000 = 11289600 HZ root@xiaotianbsp:~# cat /sys/kernel/debug/clk /clk_summary | grep i2s0 clk_i2s0_div 1 1 800000000 0 0 clk_i2s0_frac 1 1 11289600 0 0 clk_i2s0_mux 1 1 11289600 0 0 hclk_i2s0 1 2 100000000 0 0 clk_i2s0 1 2 11289600 0 0
7. amixer-Befehl
root@xiaotianbsp:~# amixer -h Verwendung: amixer <options> [Befehl] Verfügbare Optionen: -h,--help diese Hilfe -c,--card N Karte auswählen -D,--device N Gerät auswählen, Standard 'default' - d,--debug Debug-Modus -n,--nocheck keine Bereichsprüfung durchführen -v,--version Druckversion dieses Programms cget cID Steuerinhalte für ein Steuerelement abrufen cset cID P Steuerinhalte für ein Steuerelement festlegen Inhalte Inhalte aller Steuerelemente anzeigen für gegebene Karte Steuerelemente Alle Steuerelemente für eine bestimmte Karte anzeigen sget sID Inhalte für einen Mixer abrufen Einfache Steuerung sset sID P Inhalte für einen einfachen Mixer festlegen Steuerelement scontents Inhalte aller einfachen Mixer-Steuerelemente anzeigen (Standardbefehl) scontrols alle einfachen Mixer-Steuerelemente anzeigenVerfügbare Befehle: -M,--mapped-volume Verwenden Sie das zugeordnete Volume -R,--raw-volume Den Rohwert verwenden (Standard) -s,--stdin Befehle von stdin nacheinander lesen und ausführen -a,--abstract L auswählen Abstraktionsebene (keine oder einfach) -i,--inactive auch inaktive Steuerelemente anzeigen -q,--quiet ruhig sein
7.1 Inhalt von Karte0 anzeigen
root@xiaotianbsp:~# amixer -c 0 content numid=16,iface=MIXER,name='ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 : Values=off numid=14,iface=MIXER,name=& #39;ADC Soft Ramp' ; type=BOOLEAN,access=rw------,values=1 : Values=on numid=13,iface=MIXER,name=& #39;ADC Capture Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=192,step=0 : Werte=192 | dBscale-min=-96.00dB,step=0.50dB,mute=1 numid=15,iface=MIXER,name='Capture Polarity' ; type=ENUMERATED,access=rw------,values=1,items=2 ; Element #0 'Normal' ; Element #1 'Invertieren' : Werte=0
7.2 Einen bestimmten Numid-Befehl anzeigen und konfigurieren
## 查看 root@xiaotianbsp:~# amixer -c 0 cget numid=16 numid=16,iface=MIXER,name= 'ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 :values=off ## 配置root@xiaotianbsp:~# amixer -c 0 cset numid=16 onnumid=16,iface=MIXER,name='ADC Double FS Mode' ; type=BOOLEAN,access=rw------,values=1 : value=on
8. Gerätename
root@xiaotianbsp:~# aplay -l **** Liste der WIEDERGABE-Hardwaregeräte **** Karte 0: rockchipes8316c [ rockchip,es8316-codec], Gerät 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 [] Untergeräte: 1/1 Untergerät #0: Untergerät #0 Karte 1: HDMICODEC [HDMI-CODEC], Gerät 0: ff8a0000.i2s-i2s-hifi i2s-hifi-0 [] Untergeräte: 1 /1 Subdevice #0: subdevice #0 root@linaro-alip:~# arecord -l *** * Liste der CAPTURE-Hardwaregeräte **** Karte 0: rockchipes8316c [rockchip,es8316-codec], Gerät 0: ff880000.i2s-ES8316 HiFi ES8316 HiFi-0 [] Untergeräte: 1/1 Untergerät Nr. 0: Untergerät Nr. 0
9, Schallemission
aplay -D hw:0,0 -r 44100 -c 2 -f s16_le play.wav
10. Aufnahme
arecord -D hw:0,0 -r 16000 -c 1 -f s16_le record.wav
-D: Wiedergabegerät, der von aplay -l oder arecord -l aufgelistete Gerätename
-r: Abtastrate
-c: Audiodateikanal
-f: Sampling-Format, häufig verwendete Formate sind S16_LE, S24_LE, S32_LE, cd (kann ignoriert werden)
Sie können sich auch auf die Verwendung von Tinyalsa-Befehlen wie Tinymix, Tinypcminfo, Tinyplay und Tinycap beziehen.
11. Konvertieren Sie MP3 in WAV
lame test.mp3 test.wav --decode
Tang Xiaoou, Gründer von SenseTime, ist im Alter von 55 Jahren verstorben
Im Jahr 2023 stagniert PHP
Wi-Fi 7 wird vollständig verfügbar sein Anfang 2024 Debüt, fünfmal schneller als Wi-Fi 6
Das Hongmeng-System steht kurz vor der Unabhängigkeit und viele Universitäten haben „Hongmeng-Klassen“ eingerichtet
Zhihui Das Startup-Unternehmen von Jun refinanziert sich, der Betrag übersteigt 600 Millionen Yuan und die Pre-Money-Bewertung beträgt 3,5 Milliarden Yuan
Quark Browser PC-Version startet interne Tests
KI-Code-Assistent ist beliebt, und Programmiersprachen-Rankings sind alle Es gibt nichts, was Sie tun können
Das 5G-Modem und die Hochfrequenztechnologie des Mate 60 Pro liegen weit vorne
MariaDB spaltet SkySQL auf und etabliert sich als unabhängiges Unternehmen
Xiaomi antwortet auf Yu Chengdongs „Keel Pivot“-Plagiatsaussage von Huawei