Dieser Artikel ist eine Rockchip-RV-Audioreferenz in der technischen ArmSoM-Bibliothek. Er behandelt den internen ACodec von RV1106/RV1103, RV1106B/RV1103B und RV1126B/RV1126BP. Die ersten beiden Gruppen verwenden den dokumentierten Kernelstand 5.10, RV1126B/RV1126BP verwendet 6.1. DTS-, GPIO- und Mixer-Einstellungen dürfen nicht auf Sige7 / AIM7 (RK3588) oder Sige5 / CM5 / AIM5 (RK3576) übertragen werden. Ein passendes ArmSoM-RV-Board wurde hier nicht geprüft. Verwenden Sie für ein eigenes RV-Design dessen genauen SoC, SDK, Schaltplan und erkannte Soundkarte. Spezifikationen und Testbeispiele stammen aus der Quelle.
Quelle: Rockchip_Developer_Guide_Linux_RV_Series_ACodec_EN.pdf, V1.6.0. Die technischen Kapitel bleiben erhalten; Deckblatterklärungen, Zielgruppenabschnitt und Versionshistorie wurden weggelassen. Korrekturen und offene Fragen stehen in den redaktionellen Hinweisen.
ArmSoM Docs · Sige7 · Sige5 · CM5
1. Überblick
1.1 Funktionen
Der hier beschriebene ACodec ist das in RV1106/RV1103/RV1106B/RV1103B integrierte Audio-IP-Modul. Er kann ein externes analoges Mikrofon anschließen und dessen Aufnahmesignal durch Analog-Digital-Wandlung an die CPU übertragen. Ebenso lassen sich lokale digitale PCM-Audiosignale durch Digital-Analog-Wandlung zur Wiedergabe ausgeben.
RV1106 und RV1103 besitzen dieselbe ACodec-IP mit 2 ADCs und 1 DAC. Die 2024 eingeführten RV1106B/RV1103B verwenden untereinander ebenfalls dieselbe ACodec-IP. Gegenüber RV1106/RV1103 entfällt ein ADC; verfügbar sind 1 ADC und 1 DAC. Beim Betrieb begegnet Ihnen häufig die Konfiguration des Rückhol- beziehungsweise Referenzkanals, die später ausführlich erläutert wird.
Die 2025 eingeführten RV1126B/RV1126BP unterstützen zwei stromsparende, leistungsfähige ADCs und eignen sich damit für Sprachaufnahmen mit einem oder zwei Mikrofonen. ADC0 unterstützt AOA (Always On Audio) für kontinuierliche Aufnahme mit sehr geringer Leistungsaufnahme und Aufwecken aus dem Schlafmodus. Einzelheiten stehen im AOA-Abschnitt der SDK-Dokumentation „Rockchip Developer Guide Linux AOV CN.pdf“ beziehungsweise „Rockchip Developer Guide Linux AOV EN.pdf“.
2. ACodec im Überblick
2.1 ACodec-Eigenschaften
Grundlegende Eigenschaften des ACodec in RV1106/RV1103/RV1106B/RV1103B:
24-Bit-DAC mit 93dB Signal-Rausch-Abstand (A-bewertet)
Unterstützt 600Ω-Line-Ausgang
Geringe Stromaufnahme: 2.5mA bei Wiedergabe
24-Bit-ADC mit 92dB Signal-Rausch-Abstand (A-bewertet)
Unterstützt differenziellen und unsymmetrischen Mikrofon- oder Line-Eingang
Geringe Stromaufnahme: 5mA bei Stereoaufnahme
Automatische Pegelregelung (ALC) für gleichmäßige Audioaufnahmen
Geringe Stromaufnahme: weniger als 0.05mA im Standby
Programmierbare analoge Ein- und Ausgangsverstärkung
Integrierte digitale Interpolations- und Dezimationsfilter
Abtastraten von 8kHz/12kHz/16kHz/24kHz/32kHz/44.1KHz/48KHz/96KHz
1.8V Analogversorgung und 0.9V Digitalversorgung
Grundlegende Eigenschaften des ACodec in RV1126B/RV1126BP:
Unterstützt eine APB-Bus-Slave-Schnittstelle
Analoge Verstärkung zwischen 0~48dB in Schritten von 3dB
Unterstützt 96dB Signal-Rausch-Abstand
Unterstützt einen ADC-Kanal im differenziellen, unsymmetrischen oder pseudodifferenziellen Modus
Unterstützt I2S-/PCM-Master- und -Slave-Modus
Unterstützt serielle Audiodatenübertragung im normalen I2S-, links- und rechtsbündigen Modus
Unterstützt serielle Audiodatenübertragung in PCM early, late1, late2 und late3
Unterstützt serielle Übertragung mit MSB oder LSB zuerst
Unterstützt 16~32bit Abtastauflösung
Unterstützte Abtastraten: 8kHz, 16kHz, 32kHz, 64kHz, 128kHz, 11.025kHz, 22.05kHz, 44.1kHz, 88.2kHz, 176.4kHz, 12kHz, 24kHz, 48kHz, 96kHz, 192kHz
Durchlassband der Filter: 0.45625 * FS
Durchlassbandwelligkeit innerhalb von +/-0.1dB
Sperrband der Filter: 0.5 * FS
Sperrbanddämpfung von mindestens 60dB
Unterstützt digitale Lautstärkeregelung des Audio-ADC
Unterstützt programmierbare negative und positive Lautstärkeverstärkung
2.2 ACodec-Blockdiagramm

ACodec-Blockdiagramm für RV1106/RV1103
Das Blockdiagramm zeigt 2 ADC-Eingänge zur Aufnahme und 1 DAC-Ausgang zur Wiedergabe für RV1106 und RV1103. Im differenziellen Modus unterstützt RV1106 höchstens 2 Mikrofone, RV1103 dagegen nur 1 Mikrofon. Im unsymmetrischen Modus unterstützen beide höchstens 2 Mikrofone.

ACodec-Blockdiagramm für RV1106B/RV1103B
Beim ACodec von RV1106B/RV1103B entfällt ein ADC. Er unterstützt einen ADC-Eingang zur Aufnahme und einen DAC-Ausgang zur Wiedergabe. Der ADC-Eingang behält differenzielle und unsymmetrische Anschlussmöglichkeiten bei.
RV1126B/RV1126BP unterstützen standardmäßig zwei stromsparende, leistungsfähige ADCs, die beide standardmäßig differenzielle Eingänge verwenden. Das Blockdiagramm lautet:

ACodec-Blockdiagramm für RV1126B/RV1126BP
Je nach SoC-ID bestehen daher folgende wesentliche Unterschiede beim Mikrofonanschluss:
| SoC ID | Maximale Mikrofonanzahl im unsymmetrischen Modus | Maximale Mikrofonanzahl im differenziellen Modus |
|---|---|---|
| RV1106 | 2 | 2 |
| RV1103 | 2 | 1 |
| RV1106B/RV1103B | 1 | 1 |
| RV1126B/RV1126BP | 2 | 2 |
Typische Mikrofonanschlüsse finden Sie in den RK-EVB-Schaltplänen und dem Hardware-Design-Referenzleitfaden.
3. ACodec-Softwarekonfiguration
3.1 ACodec-Kernelkonfiguration für RV1106/RV1103
Am Beispiel des Rockchip-SDK-Codes für kernel-5.10 dient folgende dtsi-Datei als Referenz:
arch/arm/boot/dts/rv1106-evb-v10.dtsi
Definieren Sie zunächst einen acodec_sound-Knoten. Er beschreibt grundlegende Soundkarteninformationen und referenziert das controllerseitige DAI (Digital Audio Interface) i2s0_8ch sowie das peripherieseitige DAI acodec:
acodec_sound: acodec-sound {
compatible = "simple-audio-card";
simple-audio-card,name = "rv1106-acodec";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&i2s0_8ch>;
};
simple-audio-card,codec {
sound-dai = <&acodec>;
};
};
I2S0 aktivieren:
&i2s0_8ch {
#sound-dai-cells = <0>;
status = "okay";
};
ACodec aktivieren und den GPIO-Pin zur Steuerung des externen Leistungsverstärkers definieren:
&acodec {
#sound-dai-cells = <0>;
pa-ctl-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
status = "okay";
};
Im obigen Beispiel kann der interne I2S0 von RV1106/RV1103 mit ACodec verbunden werden.
RV1106/RV1103 besitzen nur einen I2S-Controller, I2S0. Wird der interne ACodec aktiviert, belegt er I2S0 und ist über interne SoC-Leitungen verbunden. Die externen I2S0-IO-Pins stehen in diesem Fall nicht zur Verfügung.
3.2 ACodec-Kernelkonfiguration für RV1106B/RV1103B
Die Konfiguration des ACodec für RV1106B/RV1103B orientiert sich an:
arch/arm/boot/dts/rv1103b-evb.dtsi
acodec_sound: acodec-sound {
compatible = "simple-audio-card";
simple-audio-card,name = "rv1103b-acodec";
simple-audio-card,format = "i2s";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&sai>;
};
simple-audio-card,codec {
sound-dai = <&acodec>;
};
};
Der digitale Audiocontroller von RV1106B/RV1103B wurde von I2S auf SAI umgestellt und muss aktiviert werden:
&sai {
status = "okay";
};
Aktivieren Sie außerdem den acodec-Knoten:
&acodec {
pa-ctl-gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>;
status = "okay";
};
3.3 ACodec-Konfiguration im Userspace für RV1106/RV1103
Üblicherweise lassen sich die vom Codec im Userspace bereitgestellten Steuerelemente mit tinymix abfragen und einstellen. Da tinymix im SDK entfällt, integriert Rockit das gleichwertige Werkzeug rk_mpi_amix_test. Damit lassen sich sämtliche Inhalte auflisten:
# rk_mpi_amix_test --list_contents
cmd parse result:
sound control id : 0
control name : (null)
control value : (null)
list controls : 0
list contents : 1
Number of controls: 26
ctl type num name value
0 ENUM 1 I2STDM Digital Loopback Mode , DisabledMode1Mode2Mode2 Swap
1 INT 1 ADC MIC Left Gain 2 (range 0->3)
2 INT 1 ADC MIC Right Gain 2 (range 0->3)
3 INT 1 ADC ALC Left Volume 6 (range 0->31)
4 INT 1 ADC ALC Right Volume 6 (range 0->31)
5 INT 1 ADC Digital Left Volume 195 (range 0->255)
6 INT 1 ADC Digital Right Volume 195 (range 0->255)
7 ENUM 1 ADC HPF Cut-off , OffOn
8 INT 1 ALC AGC Left Volume 12 (range 0->31)
9 INT 1 ALC AGC Right Volume 12 (range 0->31)
10 INT 1 ALC AGC Left Max Volume 7 (range 0->7)
11 INT 1 ALC AGC Right Max Volume 7 (range 0->7)
12 INT 1 ALC AGC Left Min Volume 0 (range 0->7)
13 INT 1 ALC AGC Right Min Volume 0 (range 0->7)
14 ENUM 1 ALC AGC Left Switch , OffOn
15 ENUM 1 ALC AGC Right Switch , OffOn
16 ENUM 1 AGC Left Approximate Sample Rate , 96KHz48KHz44.1KHz32KHz24KHz16KHz12KHz8KHz
17 ENUM 1 AGC Right Approximate Sample Rate , 96KHz48KHz44.1KHz32KHz24KHz16KHz12KHz8KHz
18 ENUM 1 ADC Mode , DiffadcLSingadcLDiffadcRSingadcRSingadcLRDiffadcLR
19 ENUM 1 ADC MICBIAS Voltage VREFx0_8VREFx0_825VREFx0_85VREFx0_875, VREFx0_9VREFx0_925VREFx0_95VREFx0_975
20 ENUM 1 ADC Main MICBIAS Off, On
21 ENUM 1 ADC MIC Left Switch , WorkMute
22 ENUM 1 ADC MIC Right Switch , WorkMute
23 INT 1 DAC LINEOUT Volume 26 (range 0->30)
24 INT 1 DAC HPMIX Volume 1 (range 0->2)
25 ENUM 1 DAC Control Manually , NoneOffOn
Es gibt zahlreiche Steuerelemente. Im Folgenden werden häufig verwendete erläutert:
0 ENUM 1 I2STDM Digital Loopback Mode , DisabledMode1Mode2Mode2 Swap
Dieses Steuerelement wird von I2S0 bereitgestellt und steht in engem Zusammenhang mit ACodec. Es gibt an, ob der I2STDM-Controller im Rückholmodus arbeitet. Die Optionen bedeuten:
Disabled: Standardzustand; der Rückholmodus ist deaktiviert.
Mode1: Für 4-Kanal-Anwendungen. Kanäle 1-2 enthalten Mikrofondaten; Kanäle 3-4 enthalten Referenzdaten.
Mode2: Für 2-Kanal-Anwendungen. Links liegen Mikrofondaten, rechts die Wiedergabedaten des rechten Kanals.
Mode2 Swap: Für 2-Kanal-Anwendungen. Links liegen Referenzdaten des linken Wiedergabekanals, rechts die Mikrofondaten. Die Kanalreihenfolge ist gegenüber Mode2 vertauscht.
Bei Wiedergabe von 2-Kanal-Daten mit Mode2 oder Mode2 Swap sollte daher vor der Übertragung an den ACodec-DAC ein Software-MIX erfolgen. Dadurch entspricht das Referenzsignal eher dem tatsächlichen Echopfad.
Hinweis: Im tinymix-Ausgabeformat kennzeichnet ein vorangestelltes Komma “,” die ausgewählte Option. Beispielsweise bedeutet “, Disabled”, dass aktuell “Disabled” ausgewählt ist.
1 INT 1 ADC MIC Left Gain 2 (range 0->3)
2 INT 1 ADC MIC Right Gain 2 (range 0->3)
ACodec ADC Boost Gain steuert die analoge Codec-Lautstärke. Der tatsächlich gültige Wertebereich ist 1 ~ 3:
vol 0: Deaktiviert; nicht empfohlen
vol 1: 0dB
vol 2: 20dB
vol 3: 12dB
3 INT 1 ADC ALC Left Volume 6 (range 0->31)
4 INT 1 ADC ALC Right Volume 6 (range 0->31)
ACodec ADC ALC PGA Gain steuert die analoge Codec-Lautstärke. Wertebereich: 0~31:
Minimum: -9dB (vol: 0)
Maximum: +37.5dB (vol: 31)
Schrittweite: +1.5dB
Nullpunkt: 0dB (vol: 6)
5 INT 1 ADC Digital Left Volume 195 (range 0->255)
6 INT 1 ADC Digital Right Volume 195 (range 0->255)
ACodec ADC Digital Gain steuert die digitale Codec-Lautstärke. Wertebereich: 0~255:
Minimum: -97.5dB (vol: 0)
Maximum: +30dB (vol: 255)
Schrittweite: +0.5dB
Nullpunkt: 0dB (vol: 195)
18 ENUM 1 ADC Mode , DiffadcLSingadcLDiffadcRSingadcRSingadcLRDiffadcLR
“Diff” steht für “Differential”, “Sing” für “Single-end”. Damit wird der ADC auf differenziellen oder unsymmetrischen Betrieb eingestellt. Standard ist der differenzielle Modus “Diff”. Um die Leistungsaufnahme zu minimieren, wird nur der linke ADC-Kanal L aktiviert; die Standardauswahl lautet daher “DiffadcL”.
Aufgrund der unterschiedlichen Chipauslegung unterstützt RV1103 keine Zweikanalaufnahme im differenziellen Modus und damit nicht die Option “DiffadcLR”.
23 INT 1 DAC LINEOUT Volume 26 (range 0->30)
ACodec DAC Lineout Gain hat den Lautstärkewertebereich 0~30:
Minimum: -39dB (vol: 0)
Maximum: +6dB (vol: 30)
Schrittweite: +1.5dB
Nullpunkt: 0dB (vol: 26)
24 INT 1 DAC HPMIX Volume 1 (range 0->2)
ACodec DAC HPMIX Gain ist die Vorverstärkung für Lineout und wird gewöhnlich nicht eingestellt. Tatsächlich gültige Lautstärkewerte sind 1 und 2:
vol 0: Deaktiviert; nicht empfohlen
vol 1: 0dB
vol 2: 6dB
25 ENUM 1 DAC Control Manually , NoneOffOn
Entwickler verwenden das Medienframework häufig mit dauerhaft aktivem AO Stream, also ständig aktivierter Soundkarte. Beim Anhalten der Wiedergabe muss dann nur der externe PA rasch aus- und wieder eingeschaltet werden. Dafür wurde das Steuerelement “DAC Control Manually” ergänzt:
None: Standardzustand. Das Medienframework muss den AO Stream tatsächlich schließen beziehungsweise aktivieren, um die Soundkarte aus- oder einzuschalten.
Off: Bei dauerhaft aktivem AO Stream kann der externe PA manuell abgeschaltet werden, um den Lautsprecher stummzuschalten.
On: Bei dauerhaft aktivem AO Stream und vorherigem Zustand Off kann der externe PA manuell wieder eingeschaltet werden, um die Wiedergabe fortzusetzen.
Dies sind die während der Entwicklung häufig verwendeten Codec-Steuerelemente. Weitere Optionen lassen sich anhand ihrer Namen und Auswahlmöglichkeiten für das jeweilige Projekt einstellen.
3.4 ACodec-Konfiguration im Userspace für RV1106B/RV1103B
Auch die ACodec-Steuerelemente von RV1106B/RV1103B lassen sich mit rk_mpi_amix_test auflisten:
# rk_mpi_amix_test --list_contents
cmd parse result:
sound control id : 0
control name : (null)
control value : (null)
list controls : 0
list contents : 1
Number of controls: 54
ctl type num name value
0 ENUM 1 SAI Transmit Start Mode Sel , StandaloneChained
1 ENUM 1 SAI Receive Start Mode Sel , StandaloneChained
2 ENUM 1 SAI Transmit SDOx Select , AutoSDOx1SDOx2SDOx3SDOx4
3 ENUM 1 SAI Receive SDIx Select , AutoSDIx1SDIx2SDIx3SDIx4
4 INT 1 SAI Receive Mono Slot Select 0 (range 0->128)
5 ENUM 1 SAI Receive Mono Switch , DisableEnable
6 ENUM 1 SAI Transmit Mono Switch , DisableEnable
7 ENUM 1 SAI SDI3 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
8 ENUM 1 SAI SDI2 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
9 ENUM 1 SAI SDI1 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
10 ENUM 1 SAI SDI0 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
11 ENUM 1 SAI SDI3 Loopback I2S LR Switch , DisableEnable
12 ENUM 1 SAI SDI2 Loopback I2S LR Switch , DisableEnable
13 ENUM 1 SAI SDI1 Loopback I2S LR Switch , DisableEnable
14 ENUM 1 SAI SDI0 Loopback I2S LR Switch , DisableEnable
15 ENUM 1 SAI SDI3 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
16 ENUM 1 SAI SDI2 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
17 ENUM 1 SAI SDI1 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
18 ENUM 1 SAI SDI0 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
19 ENUM 1 SAI SDI3 Loopback Switch , DisableEnable
20 ENUM 1 SAI SDI2 Loopback Switch , DisableEnable
21 ENUM 1 SAI SDI1 Loopback Switch , DisableEnable
22 ENUM 1 SAI SDI0 Loopback Switch , DisableEnable
23 ENUM 1 SAI Sync Out Switch , From CRUFrom IO
24 ENUM 1 SAI Sync In Switch , From IOFrom Sync Port
25 ENUM 1 SAI Receive PATH3 Source Select From SDI0From SDI1From SDI2, From SDI3
26 ENUM 1 SAI Receive PATH2 Source Select From SDI0From SDI1, From SDI2From SDI3
27 ENUM 1 SAI Receive PATH1 Source Select From SDI0, From SDI1From SDI2From SDI3
28 ENUM 1 SAI Receive PATH0 Source Select , From SDI0From SDI1From SDI2From SDI3
29 ENUM 1 SAI Transmit SDO3 Source Select From PATH0From PATH1From PATH2, From PATH3
30 ENUM 1 SAI Transmit SDO2 Source Select From PATH0From PATH1, From PATH2From PATH3
31 ENUM 1 SAI Transmit SDO1 Source Select From PATH0, From PATH1From PATH2From PATH3
32 ENUM 1 SAI Transmit SDO0 Source Select , From PATH0From PATH1From PATH2From PATH3
33 BOOL 1 SAI Clk Auto Switch Off
34 INT 1 SAI PCM Read Wait Time MS 0 (range 0->10000)
35 INT 1 SAI PCM Write Wait Time MS 0 (range 0->10000)
36 INT 1 ADC MIC Left Gain 2 (range 0->3)
37 INT 1 ADC ALC Left Volume 6 (range 0->31)
38 INT 1 ADC Digital Left Volume 195 (range 0->255)
39 ENUM 1 ADC HPF Cut-off , OffOn
40 INT 1 ALC AGC Left Volume 12 (range 0->31)
41 INT 1 ALC AGC Left Max Volume 7 (range 0->7)
42 INT 1 ALC AGC Left Min Volume 0 (range 0->7)
43 ENUM 1 ALC AGC Left Switch , OffOn
44 ENUM 1 AGC Left Approximate Sample Rate , 96KHz48KHz44.1KHz32KHz24KHz16KHz12KHz8KHz
45 ENUM 1 ADC Mode , DiffadcLSingadcLDiffadcRSingadcRSingadcLRDiffadcLR
46 ENUM 1 ADC MICBIAS Voltage VREFx0_8VREFx0_825VREFx0_85VREFx0_875, VREFx0_9VREFx0_925VREFx0_95VREFx0_975
47 ENUM 1 ADC Main MICBIAS Off, On
48 ENUM 1 ADC MIC Left Switch , WorkMute
49 INT 1 DAC LINEOUT Volume 26 (range 0->30)
50 INT 1 DAC HPMIX Volume 1 (range 0->2)
51 ENUM 1 DAC Control Manually , NoneOffOn
52 ENUM 1 DAC VCM Manually , NoneOffOn
53 ENUM 1 Audio Mux Select , Path0Path1Path2Path3Path4Path5
Da der ACodec von RV1106B/RV1103B nur einen ADC-Eingang besitzt, entfällt gegenüber RV1106/RV1103 der ADC-Teil “Right”; übrig bleibt “Left” mit identischer Funktionskonfiguration. Neu ist “Audio Mux Select” zum Umschalten des SAI-Controllers zwischen internem ACodec und externen IO-Kanälen:
53 ENUM 1 Audio Mux Select , Path0Path1Path2Path3Path4Path5
Für die Kanalumschaltung gibt es 6 Path-Zustände:
Path0: Wiedergabe nur über ACodec Lineout; Aufnahme nur über ACodec Mic (Standard).
Path1: Wiedergabe nur über ACodec Lineout; Aufnahme nur über SAI SDI IO.
Path2: Wiedergabe gleichzeitig über ACodec Lineout und SAI SDO IO; Aufnahme nur über ACodec Mic.
Path3: Wiedergabe gleichzeitig über ACodec Lineout und SAI SDO IO; Aufnahme nur über SAI SDI IO.
Path4: Wiedergabe nur über SAI SDO IO; Aufnahme nur über ACodec Mic.
Path5: Wiedergabe nur über SAI SDO IO; Aufnahme nur über SAI SDI IO (nur für Tests, gewöhnlich ungenutzt).
Durch den Wechsel zu SAI unterscheidet sich der Controller deutlich vom I2S-Teil des RV1106/RV1103. Hier steht die digitale Loopback-Konfiguration von RV1106B/RV1103B im Vordergrund. Da deren ACodec nur einen ADC-Eingang besitzt, ist für die SAI-Eingangsdaten nur die Lane SDI0 relevant:
10 ENUM 1 SAI SDI0 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
L:MIC R:LP: Auswahl der linken und rechten Kanäle von SAI SDI0 im Loopback-Modus: links Mikrofon, rechts Loopback.
L:LP R:MIC: Auswahl der linken und rechten Kanäle von SAI SDI0 im Loopback-Modus: rechts Mikrofon, links Loopback.
14 ENUM 1 SAI SDI0 Loopback I2S LR Switch , DisableEnable
Der Schalter zur Auswahl der linken und rechten Kanäle der SAI-SDI0-Lane im Aufnahmemodus ist standardmäßig deaktiviert; die Daten werden durchgereicht. Aktivieren Sie ihn für digitale Referenzaufnahme.
18 ENUM 1 SAI SDI0 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
Auswahl der Referenz-Ausgangsdaten-Lane, nachdem SAI SDI0 die digitale Referenzaufnahme startet. Da RV1106B/RV1103B nur Monoaufnahme und Monowiedergabe unterstützen, ist hier ausschließlich SDO0 als Referenz unterstützt. Behalten Sie den Standardzustand bei.
22 ENUM 1 SAI SDI0 Loopback Switch , DisableEnable
Schalter für die digitale Referenzaufnahme der SAI-SDI0-Lane. Standardmäßig deaktiviert; bei Bedarf aktivieren.
Für die vollständige Konfiguration eines Mikrofons und eines Referenzkanals verwenden Sie folgende Befehle:
rk_mpi_amix_test --control "SAI SDI0 Loopback I2S LR Channel Sel" --value "L:MIC R:LP"
rk_mpi_amix_test --control "SAI SDI0 Loopback Src Select" --value "From SDO0"
rk_mpi_amix_test --control "SAI SDI0 Loopback I2S LR Switch" --value "Enable"
rk_mpi_amix_test --control "SAI SDI0 Loopback Switch" --value "Enable"
Da die Register “SAI SDI0 Loopback I2S LR Channel Sel” und “SAI SDI0 Loopback Src Select” nach dem Einschalten bereits den benötigten Zustand behalten, lässt sich die Konfiguration zur Aktivierung der digitalen Referenzaufnahme gewöhnlich wie folgt verkürzen:
rk_mpi_amix_test --control "SAI SDI0 Loopback I2S LR Switch" --value "Enable"
rk_mpi_amix_test --control "SAI SDI0 Loopback Switch" --value "Enable"
Beispiel für eine Zweikanalaufnahme auf RV1106B/RV1103B: links Mikrofon, rechts Loopback:

3.5 ACodec-Konfiguration im Userspace für RV1126B/RV1126BP
Der in der Quelle als aktuell bezeichnete SDK-Kernelcode aktiviert ADC0 und ADC1 standardmäßig:
commit b69407b9ad1232f35ae108fd8755d962fcdeda84
Author: Xing Zheng <zhengxing@rock-chips.com>
Date: Tue Jul 1 18:44:24 2025 +0800
arm64: dts: rockchip: rv1126b-evb: enable both acodec_pmu and acodec for 4ch capture by
default
Prüfen Sie anhand des folgenden Patches im Projektcode, ob die Funktion aktiviert ist:
diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10.dtsi
index 1ca72d41c5ab..cf6b5788ea5e 100644
--- a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10.dtsi
@@ -445,7 +445,6 @@ &rtc {
};
&sai2 {
- rockchip,sai-rx-route = <1 0 2 3>;
status = "okay";
/delete-property/ pinctrl-names;
/delete-property/ pinctrl-0;
diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-evb.dtsi
index eb3879ca4c5f..8ca9b5b9a32c 100644
--- a/arch/arm64/boot/dts/rockchip/rv1126b-evb.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb.dtsi
@@ -20,7 +20,7 @@ acodec_sound: acodec-sound {
rockchip,format = "i2s";
rockchip,mclk-fs-mapping = <256 1024>;
rockchip,cpu = <&sai2>;
- rockchip,codec = <&audio_codec>, <&acdcdig_dsm>;
+ rockchip,codec = <&audio_codec_pmu>, <&audio_codec>, <&acdcdig_dsm>;
};
adc-keys {
diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi
index 31faaa3ad88b..da82560304cd 100644
--- a/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb1-v10.dtsi
@@ -132,6 +132,10 @@ &acodec_sound {
status = "okay";
};
+&audio_codec_pmu {
+ status = "okay";
+};
+
&audio_codec {
status = "okay";
};
Der Inhalt einer Standard-Soundkarte sieht daher üblicherweise so aus:
# rk_mpi_amix_test --list_contents 1
cmd parse result:
sound control id : 0
control name : (null)
control value : (null)
list controls : 0
list contents : 1
ctl type num name value
0 BOOL 1 Headphone Switch 1
1 BOOL 1 ACodec ADC Switch 0
2 INTE 1 ACodec Digital Gain Volume 0(0->127)
3 ENUM 1 ACodec HPF Cutoff ,"3.79Hz" "60Hz" "243Hz" "493Hz"
4 BOOL 1 ACodec HPF Switch 0
5 INTE 1 ACodec PGA Gain Volume 16(0->31)
6 BOOL 1 ACodec_LP ADC Switch 0
7 INTE 1 ACodec_LP Digital Gain Volume 0(0->127)
8 ENUM 1 ACodec_LP HPF Cutoff ,"3.79Hz" "60Hz" "243Hz" "493Hz"
9 BOOL 1 ACodec_LP HPF Switch 0
10 INTE 1 ACodec_LP PGA Gain Volume 16(0->31)
11 INTE 2 DAC Digital Volume 255(0->510) 255(0->510)
12 ENUM 1 DAC HPF Cutoff ,"80Hz" "100Hz" "120Hz" "140Hz"
13 BOOL 1 DAC HPF Switch 0
14 BOOL 1 Headset Mic Switch 1
15 BOOL 1 Main Mic Switch 1
16 ENUM 1 Power Amplifier ,"Off" "On"
17 BOOL 1 SAI2 Clk Auto Switch 0
18 INTE 1 SAI2 Receive Mono Slot Select 0(0->128)
19 ENUM 1 SAI2 Receive Mono Switch ,"Disable" "Enable"
20 ENUM 1 SAI2 Receive PATH0 Source Sele ,"From SDI0" "From SDI1" "From SDI2" "From SDI3"
21 ENUM 1 SAI2 Receive PATH1 Source Sele "From SDI0" ,"From SDI1" "From SDI2" "From SDI3"
22 ENUM 1 SAI2 Receive PATH2 Source Sele "From SDI0" "From SDI1" ,"From SDI2" "From SDI3"
23 ENUM 1 SAI2 Receive PATH3 Source Sele "From SDI0" "From SDI1" "From SDI2" ,"From SDI3"
24 ENUM 1 SAI2 Receive SDIx Select ,"Auto" "SDIx1" "SDIx2" "SDIx3" "SDIx4"
25 ENUM 1 SAI2 Receive Start Mode Sel ,"Standalone" "Chained"
26 ENUM 1 SAI2 SDI0 Loopback I2S LR Chan ,"L:MIC R:LP" "L:LP R:MIC"
27 ENUM 1 SAI2 SDI0 Loopback I2S LR Swit ,"Disable" "Enable"
28 ENUM 1 SAI2 SDI0 Loopback Src Select ,"From SDO0" "From SDO1" "From SDO2" "From SDO3"
29 ENUM 1 SAI2 SDI0 Loopback Switch ,"Disable" "Enable"
30 ENUM 1 SAI2 SDI1 Loopback I2S LR Chan ,"L:MIC R:LP" "L:LP R:MIC"
31 ENUM 1 SAI2 SDI1 Loopback I2S LR Swit ,"Disable" "Enable"
32 ENUM 1 SAI2 SDI1 Loopback Src Select ,"From SDO0" "From SDO1" "From SDO2" "From SDO3"
33 ENUM 1 SAI2 SDI1 Loopback Switch ,"Disable" "Enable"
34 ENUM 1 SAI2 SDI2 Loopback I2S LR Chan ,"L:MIC R:LP" "L:LP R:MIC"
35 ENUM 1 SAI2 SDI2 Loopback I2S LR Swit ,"Disable" "Enable"
36 ENUM 1 SAI2 SDI2 Loopback Src Select ,"From SDO0" "From SDO1" "From SDO2" "From SDO3"
37 ENUM 1 SAI2 SDI2 Loopback Switch ,"Disable" "Enable"
38 ENUM 1 SAI2 SDI3 Loopback I2S LR Chan ,"L:MIC R:LP" "L:LP R:MIC"
39 ENUM 1 SAI2 SDI3 Loopback I2S LR Swit ,"Disable" "Enable"
40 ENUM 1 SAI2 SDI3 Loopback Src Select ,"From SDO0" "From SDO1" "From SDO2" "From SDO3"
41 ENUM 1 SAI2 SDI3 Loopback Switch ,"Disable" "Enable"
42 ENUM 1 SAI2 Sync In Switch ,"From IO" "From Sync Port"
43 ENUM 1 SAI2 Sync Out Switch ,"From CRU" "From IO"
44 ENUM 1 SAI2 Transmit Mono Switch ,"Disable" "Enable"
45 ENUM 1 SAI2 Transmit SDO0 Source Sele ,"From PATH0" "From PATH1" "From PATH2" "From PATH3"
46 ENUM 1 SAI2 Transmit SDO1 Source Sele "From PATH0" ,"From PATH1" "From PATH2" "From PATH3"
47 ENUM 1 SAI2 Transmit SDO2 Source Sele "From PATH0" "From PATH1" ,"From PATH2" "From PATH3"
48 ENUM 1 SAI2 Transmit SDO3 Source Sele "From PATH0" "From PATH1" "From PATH2" ,"From PATH3"
49 ENUM 1 SAI2 Transmit SDOx Select ,"Auto" "SDOx1" "SDOx2" "SDOx3" "SDOx4"
50 ENUM 1 SAI2 Transmit Start Mode Sel ,"Standalone" "Chained"
51 BOOL 1 Speaker Switch 1
52 BOOL 1 hp switch 0
53 BOOL 1 spk switch 0
54 INTE 1 SAI2 PCM Read Wait Time MS 0(0->10000)
55 INTE 1 SAI2 PCM Write Wait Time MS 0(0->10000)
ADC0 und ADC1 des RV1126B belegen jeweils eine I2S-Datenleitung, SDI0 beziehungsweise SDI1. Jede SDI-Leitung empfängt bei der Aufnahme zwei identische Datenkanäle. Beispielsweise enthalten links und rechts auf SDI0 MIC0-Daten von ADC0; links und rechts auf SDI1 enthalten MIC1-Daten von ADC1.
Aktivieren Sie daher sowohl bei einem als auch bei zwei Mikrofonen die Referenzaufnahmefunktion für SDI0 und SDI1:
rk_mpi_amix_test --control 'SAI2 SDI0 Loopback I2S LR Switch' --value 'Enable'
rk_mpi_amix_test --control 'SAI2 SDI0 Loopback Switch' --value 'Enable'
rk_mpi_amix_test --control 'SAI2 SDI1 Loopback I2S LR Switch' --value 'Enable'
rk_mpi_amix_test --control 'SAI2 SDI1 Loopback Switch' --value 'Enable'
So lassen sich die standardmäßig über SAI2 SDO0 wiedergegebenen digitalen Audiodaten direkt aus dem rechten Kanal von SDI0 und SDI1 gewinnen.
Für ein übliches Szenario mit 2 Mikrofonkanälen und 1 Referenzkanal verwendet RV1126B standardmäßig die vollständige alsa-lib-Architektur und unterstützt asound.conf. Die Datei asound.conf muss im Verzeichnis /etc liegen:
# Copyright (c) 2025 Rockchip Electronics Co. Ltd.
# Author: Xing Zheng <zhengxing@rock-chips.com>
pcm.!default {
type asym
playback.pcm "play_plug"
capture.pcm "capt_softvol"
}
ctl.!default {
type hw
card 0
}
# ---------- Capture ----------
pcm.cap_multi {
type multi
slaves.a.pcm "hw:0,0"
slaves.a.channels 4
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 2
bindings.2.slave a
bindings.2.channel 1
}
pcm.capt_plug {
type plug
slave.pcm "cap_multi"
}
pcm.capt_softvol {
type softvol
slave.pcm "capt_plug"
control.name "Master Capture Volume"
control.card 0
min_dB -51.0
max_dB 0.0
resolution 101
}
# ---------- Playback ----------
pcm.play_softvol {
type softvol
slave.pcm "hw:0,0"
control.name "Master Playback Volume"
control.card 0
min_dB -51.0
max_dB 0.0
resolution 101
}
pcm.play_plug {
type plug
slave.pcm "play_softvol"
}
Passen Sie anschließend auf Anwendungsseite test_mpi_ai.cpp wie folgt an, um bei einer 3-Kanal-Aufnahme die Layout-Bitmaps für Rec 2ch und Ref 1ch festzulegen:
diff --git a/src/tests/rt_mpi/mod/test_mpi_ai.cpp b/src/tests/rt_mpi/mod/test_mpi_ai.cpp
index 682467c03..798907c0d 100644
--- a/src/tests/rt_mpi/mod/test_mpi_ai.cpp
+++ b/src/tests/rt_mpi/mod/test_mpi_ai.cpp
@@ -757,9 +760,13 @@ RK_S32 test_init_ai_vqe(TEST_AI_CTX_S *params) {
stAiVqeConfig.s32WorkSampleRate = params->s32SampleRate;
stAiVqeConfig.s32FrameSample = params->s32SampleRate * params->s32VqeGapMs / 1000;
+ /* FIXME: for capture with more channel */
if (params->s32DeviceChannel == 4) {
stAiVqeConfig.s64RefChannelType = 0x0c;
stAiVqeConfig.s64RecChannelType = 0x03;
+ } else if (params->s32DeviceChannel == 3) {
+ stAiVqeConfig.s64RefChannelType = 0x04;
+ stAiVqeConfig.s64RecChannelType = 0x03;
} else {
stAiVqeConfig.s64RefChannelType = 0x02;
stAiVqeConfig.s64RecChannelType = 0x01;
Verwenden Sie rk_mpi_ai_test für 3-Kanal-Aufnahme und geben Sie für sound_card_name den Einstiegsknoten “default” an:
export rt_dump_skv_inout=true
rk_mpi_ai_test --sound_card_name=default --device_rate 8000 --device_ch 3 --out_rate 8000 --out_ch 1 --output /tmp --vqe_enable 1 --vqe_cfg /tmp/config_aivqe.json
Die erwartete Reihenfolge der Daten ist MIC0/MIC1/Loopback0. Die folgenden Diagramme zeigen Zeit- und Frequenzbereich dieser drei Kanäle:

4. Häufig verwendete ACodec-Testbefehle
Da die Betriebsumgebung von RV1106/RV1103/RV1106B/RV1103B gewöhnlich auf Rockit basiert, verbinden die folgenden Beispiele grundlegende Schritte mit Rockit-Befehlen.
4.1 Häufige Testbefehle für die Wiedergabe
Das folgende Beispiel verwendet PCM-Audio mit 16kHz/2ch/16bit als Wiedergabequelle. rk_mpi_ao_test verarbeitet standardmäßig 16bit. Gleiche Werte für “device_rate=16000” und “input_rate=16000” bedeuten, dass kein Resampling benötigt wird. “input_ch=2” muss den 2 Kanälen der ursprünglichen Audioquelle entsprechen:
rk_mpi_ao_test -i /tmp/sine_16k_500_1000_0dbfs.wav --sound_card_name=hw:0,0 --device_ch=2 --device_rate=16000 --input_rate=16000 --input_ch=2
Die Datei sine_16k_500_1000_0dbfs.wav steht unter https://redmine.rock-chips.com/attachments/2297743 zum Download bereit.
Weitere Befehlsparameter sind in den “MPI”-Dokumenten im SDK-Rockit-Projektverzeichnis und den Testfällen im mpi-Beispielverzeichnis beschrieben.
4.2 Häufige Testbefehle für die Aufnahme
Das folgende Beispiel nimmt PCM mit 16kHz/2ch/16bit auf. Auch rk_mpi_ai_test verarbeitet standardmäßig 16bit. Gleiche Werte für “device_rate=16000” und “input_rate=16000” bedeuten, dass kein Resampling erforderlich ist. Gleiche Werte für “device_ch=2” und “input_ch=2” bedeuten, dass keine Kanalverarbeitung nötig ist. Die Aufnahme erzeugt die Datei cap_out.pcm im Verzeichnis /tmp.
rk_mpi_ai_test --sound_card_name=hw:0,0 --device_rate=16000 --device_ch=2 --out_rate=16000 --out_ch=2 --output=/tmp
Weitere Befehlsparameter erläutert das Kapitel “AO/AI debugging steps” in “Rockchip_Developer_Guide_MPI_FAQ.pdf”.
