Это справочный материал по аудио Rockchip RV в технической библиотеке ArmSoM. Он посвящён встроенному ACodec RV1106/RV1103, RV1106B/RV1103B и RV1126B/RV1126BP. Для первых двух групп указан kernel 5.10, для RV1126B/RV1126BP — 6.1. Это не инструкция настройки внутреннего кодека Sige7 / AIM7 (RK3588) или Sige5 / CM5 / AIM5 (RK3576): переносить их DTS, GPIO и mixer-контролы напрямую нельзя. Совместимая плата ArmSoM на RV здесь не подтверждена. Для собственного RV-устройства сверяйтесь с SoC, SDK, схемой и фактически зарегистрированной картой. Параметры и тесты оригинала не являются измерениями ArmSoM.
Источник: Rockchip_Developer_Guide_Linux_RV_Series_ACodec_EN.pdf, V1.6.0. Технические главы сохранены; служебные заявления, аудитория и история изменений исключены. Исправления и вопросы перечислены в редакционных замечаниях.
ArmSoM Docs · Sige7 · Sige5 · CM5
1. Обзор
1.1 Назначение
ACodec — встроенный аудиоблок SoC семейства Rockchip RV. К нему можно подключить аналоговый микрофон: АЦП преобразует входной сигнал в цифровые данные и передаёт их процессору. Для воспроизведения ЦАП преобразует цифровой PCM-поток процессора в аналоговый сигнал.
RV1106 и RV1103 используют одинаковый блок ACodec с двумя АЦП и одним ЦАП. В RV1106B/RV1103B, выпущенных в 2024 году, используется одинаковый между этими двумя моделями ACodec, но относительно RV1106/RV1103 один АЦП удалён: остаются один АЦП и один ЦАП. При настройке часто требуется цифровой возврат воспроизводимого сигнала для опорного канала; ниже подробно разобрана его конфигурация.
RV1126B/RV1126BP, выпущенные в 2025 году, поддерживают два малопотребляющих высокопроизводительных АЦП для захвата речи одним или двумя микрофонами. ADC0 поддерживает AOA (Always On Audio): непрерывную запись с крайне низким энергопотреблением и пробуждение из сна. Подробности приведены в разделе AOA документов SDK Rockchip_Developer_Guide_Linux_AOV_CN.pdf и Rockchip_Developer_Guide_Linux_AOV_EN.pdf.
2. Устройство ACodec
2.1 Возможности ACodec
Основные характеристики ACodec в RV1106/RV1103/RV1106B/RV1103B:
24-битный ЦАП, отношение сигнал/шум 93 дБ с A-взвешиванием.
Линейный выход с нагрузкой 600 Ом.
Потребление при воспроизведении: 2,5 мА.
24-битный АЦП, отношение сигнал/шум 92 дБ с A-взвешиванием.
Дифференциальный и несимметричный микрофонный или линейный вход.
Потребление при стереозаписи: 5 мА.
Автоматическая регулировка уровня ALC для плавного управления записью.
Потребление в режиме ожидания: менее 0,05 мА.
Программируемое аналоговое усиление входа и выхода.
Встроенные цифровые фильтры интерполяции и децимации.
Частоты дискретизации: 8/12/16/24/32/44,1/48/96 кГц.
Питание аналоговой части 1,8 В, цифровой — 0,9 В.
Основные характеристики ACodec RV1126B/RV1126BP:
Ведомый интерфейс шины APB.
Аналоговое усиление 0–48 дБ с шагом 3 дБ.
Отношение сигнал/шум 96 дБ.
Одноканальный АЦП с дифференциальным, несимметричным и псевдодифференциальным входом.
Режимы ведущего и ведомого I2S/PCM.
Последовательная передача I2S в стандартном формате, с левым и правым выравниванием.
Режимы передачи PCM early, late1, late2 и late3.
Передача начиная со старшего или младшего бита: MSB/LSB.
Разрядность отсчёта 16–32 бита.
Частоты дискретизации: 8, 16, 32, 64, 128, 11,025, 22,05, 44,1, 88,2, 176,4, 12, 24, 48, 96 и 192 кГц.
Полоса пропускания фильтров: 0,45625 × FS.
Неравномерность в полосе пропускания: в пределах ±0,1 дБ.
Начало полосы задерживания фильтров: 0,5 × FS.
Подавление в полосе задерживания: не менее 60 дБ.
Цифровая регулировка уровня АЦП.
Программируемое цифровое ослабление и усиление.
2.2 Структурные схемы ACodec

Структурная схема ACodec RV1106/RV1103
RV1106 и RV1103 поддерживают два входа АЦП для записи и один выход ЦАП для воспроизведения. В дифференциальном режиме RV1106 допускает до двух микрофонов, а RV1103 — только один. В несимметричном режиме обе модели допускают до двух микрофонов.

Структурная схема ACodec RV1106B/RV1103B
В RV1106B/RV1103B удалён один АЦП: остаются один вход записи и один выход воспроизведения. Вход АЦП по-прежнему поддерживает дифференциальное и несимметричное подключение.
RV1126B/RV1126BP по умолчанию поддерживают два малопотребляющих высокопроизводительных АЦП, оба с дифференциальным входом. Их структурная схема приведена ниже.

Структурная схема ACodec RV1126B/RV1126BP
Основные различия подключения микрофонов в зависимости от SoC:
| Модель SoC | Maximum number of MICs in single-ended mode | Максимум микрофонов в дифференциальном режиме |
|---|---|---|
| RV1106 | 2 | 2 |
| RV1103 | 2 | 1 |
| RV1106B/RV1103B | 1 | 1 |
| RV1126B/RV1126BP | 2 | 2 |
Типовые схемы подключения микрофонов см. в схемах RK EVB и руководстве по аппаратному проектированию.
3. Программная настройка ACodec
3.1 Настройка ядра для ACodec RV1106/RV1103
Для SDK Rockchip с kernel-5.10 ориентируйтесь на следующий файл DTSI:
arch/arm/boot/dts/rv1106-evb-v10.dtsi
Сначала определите узел acodec_sound с основными параметрами звуковой карты и ссылками на DAI контроллера i2s0_8ch и 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:
&i2s0_8ch {
#sound-dai-cells = <0>;
status = "okay";
};
Включите ACodec и задайте GPIO управления внешним усилителем мощности:
&acodec {
#sound-dai-cells = <0>;
pa-ctl-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
status = "okay";
};
В этом примере внутренний I2S0 RV1106/RV1103 связывается с ACodec.
У RV1106/RV1103 только один I2S-контроллер — I2S0. При включённом ACodec он занят внутренним соединением с кодеком. Поэтому использовать его внешние выводы I2S0 в этой конфигурации нельзя.
3.2 Настройка ядра для ACodec RV1106B/RV1103B
Пример настройки ACodec RV1106B/RV1103B:
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>;
};
};
В RV1106B/RV1103B цифровой аудиоконтроллер заменён с I2S на SAI. Включите соответствующий узел:
&sai {
status = "okay";
};
Также включите узел acodec:
&acodec {
pa-ctl-gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>;
status = "okay";
};
3.3 Настройка ACodec RV1106/RV1103 из пользовательского пространства
Обычно элементы управления кодеком читают и изменяют через tinymix. В данном SDK эта утилита исключена, поэтому rockit предоставляет эквивалентную rk_mpi_amix_test. Следующая команда выводит все элементы управления:
# 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
Элементов много; далее рассмотрены наиболее часто используемые.
0 ENUM 1 I2STDM Digital Loopback Mode , DisabledMode1Mode2Mode2 Swap
Этот элемент предоставляет I2S0, но он тесно связан с ACodec: определяет режим цифрового возврата воспроизводимого сигнала в I2STDM. Возможные значения:
Disabled: значение по умолчанию, цифровой возврат выключен.
Mode1: для четырёхканальной записи; каналы 1–2 содержат микрофонные данные, 3–4 — возвращаемый сигнал.
Mode2: для двух каналов; слева микрофон, справа сигнал правого канала воспроизведения.
Mode2 Swap: для двух каналов; слева возвращаемый левый канал воспроизведения, справа микрофон. Порядок противоположен Mode2.
При двухканальном воспроизведении в Mode2 или Mode2 Swap рекомендуется программно смешать каналы перед отправкой в ЦАП ACodec, чтобы опорный сигнал лучше соответствовал реальному пути эха.
В выводе формата tinymix выбранное значение отмечено запятой слева. Например, «, Disabled» означает, что выбран Disabled.
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 задаёт аналоговое усиление; действительные рекомендуемые значения — 1–3:
vol 0: выключено; не рекомендуется.
vol 1: 0 дБ.
vol 2: 20 дБ.
vol 3: 12 дБ.
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 — аналоговое усиление, диапазон значений 0–31:
Минимум: −9 дБ (vol 0).
Максимум: +37,5 дБ (vol 31).
Шаг: +1,5 дБ.
0 дБ соответствует 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 — цифровое усиление, диапазон значений 0–255:
Минимум: −97,5 дБ (vol 0).
Максимум: +30 дБ (vol 255).
Шаг: +0,5 дБ.
0 дБ соответствует vol 195.
18 ENUM 1 ADC Mode , DiffadcLSingadcLDiffadcRSingadcRSingadcLRDiffadcLR
Diff означает Differential, Sing — Single-end. Элемент выбирает дифференциальный или несимметричный режим АЦП ACodec. По умолчанию выбран дифференциальный режим. Для минимального потребления включён только левый канал АЦП, поэтому исходное значение — DiffadcL.
RV1103 не поддерживает двухканальный захват в дифференциальном режиме, поэтому вариант DiffadcLR для него недоступен.
23 INT 1 DAC LINEOUT Volume 26 (range 0->30)
ACodec DAC Lineout Gain: диапазон значений 0–30:
Минимум: −39 дБ (vol 0).
Максимум: +6 дБ (vol 30).
Шаг: +1,5 дБ.
0 дБ соответствует vol 26.
24 INT 1 DAC HPMIX Volume 1 (range 0->2)
ACodec DAC HPMIX Gain управляет предварительным усилением перед Lineout; обычно его не меняют. Рабочие значения — 1 и 2:
vol 0: выключено; не рекомендуется.
vol 1: 0 дБ.
vol 2: 6 дБ.
25 ENUM 1 DAC Control Manually , NoneOffOn
В медиасистемах поток AO часто постоянно открыт, то есть звуковая карта остаётся включённой. Для остановки и возобновления звука достаточно быстро выключать и включать внешний PA. Для этого добавлен элемент DAC Control Manually:
None: исходный режим; управление включением и выключением карты осуществляется реальным закрытием и открытием потока AO в медиасистеме.
Off: при постоянно открытом AO вручную выключает внешний PA и заглушает динамик.
On: при открытом AO после состояния Off снова включает внешний PA и возобновляет звук.
Выше рассмотрены основные элементы управления кодеком. Остальные параметры подбирайте по их названиям и вариантам значений с учётом требований проекта.
3.4 Настройка ACodec RV1106B/RV1103B из пользовательского пространства
Для вывода элементов управления ACodec RV1106B/RV1103B также используется rk_mpi_amix_test:
# 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
Поскольку здесь только один вход АЦП, элементы ADC Right удалены, а ADC Left сохранены. Их функции совпадают с RV1106/RV1103. Новый элемент Audio Mux Select переключает соединения SAI между внутренним ACodec и внешними выводами:
53 ENUM 1 Audio Mux Select , Path0Path1Path2Path3Path4Path5
Для переключения доступны шесть состояний Path:
Path0: воспроизведение только через ACodec Lineout; запись только с ACodec Mic. Значение по умолчанию.
Path1: воспроизведение только через ACodec Lineout; запись только с SAI SDI IO.
Path2: воспроизведение одновременно через ACodec Lineout и SAI SDO IO; запись только с ACodec Mic.
Path3: воспроизведение одновременно через ACodec Lineout и SAI SDO IO; запись только с SAI SDI IO.
Path4: воспроизведение только через SAI SDO IO; запись только с ACodec Mic.
Path5: воспроизведение только через SAI SDO IO; запись только с SAI SDI IO. Предназначено для тестирования, обычно не используется.
После перехода с I2S на SAI конфигурация существенно отличается от RV1106/RV1103. Далее рассматривается цифровой возврат для RV1106B/RV1103B. Из-за единственного АЦП входная линия данных SAI — только SDI0:
10 ENUM 1 SAI SDI0 Loopback I2S LR Channel Sel , L:MIC R:LPL:LP R:MIC
L:MIC R:LP: при цифровом возврате на SDI0 левый канал содержит микрофон, правый — возвращаемый сигнал.
L:LP R:MIC: на SDI0 правый канал содержит микрофон, левый — возвращаемый сигнал.
14 ENUM 1 SAI SDI0 Loopback I2S LR Switch , DisableEnable
Переключатель выбора левого/правого канала SDI0 по умолчанию отключён: данные проходят без изменений. Включите его, когда нужен цифровой возврат.
18 ENUM 1 SAI SDI0 Loopback Src Select , From SDO0From SDO1From SDO2From SDO3
Выбирает выходную линию — источник опорного сигнала для цифрового возврата на SDI0. ACodec RV1106B/RV1103B поддерживает только монофоническую запись и воспроизведение, поэтому здесь доступен только SDO0. Сохраните исходное значение.
22 ENUM 1 SAI SDI0 Loopback Switch , DisableEnable
Включение цифрового возврата на SDI0. По умолчанию отключено; включайте при необходимости.
Полная конфигурация одного микрофонного и одного опорного канала:
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"
После включения питания SAI SDI0 Loopback I2S LR Channel Sel и SAI SDI0 Loopback Src Select уже имеют нужные значения. Поэтому обычно достаточно сокращённой последовательности:
rk_mpi_amix_test --control "SAI SDI0 Loopback I2S LR Switch" --value "Enable"
rk_mpi_amix_test --control "SAI SDI0 Loopback Switch" --value "Enable"
Пример двухканальной записи RV1106B/RV1103B: слева микрофон, справа цифровой возврат:

3.5 Настройка ACodec RV1126B/RV1126BP из пользовательского пространства
В актуальном для исходного руководства SDK ADC0 и ADC1 включены по умолчанию:
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
Проверьте наличие следующего изменения в коде вашего проекта, чтобы подтвердить включение:
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";
};
Типичный список элементов управления звуковой карты по умолчанию:
# 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 и ADC1 RV1126B занимают отдельные линии I2S — SDI0 и SDI1. На каждой линии при записи поступают два одинаковых канала: левый и правый SDI0 содержат MIC0 с ADC0, а оба канала SDI1 — MIC1 с ADC1.
Поэтому и для одного, и для двух микрофонов рекомендуется включать цифровой возврат на SDI0 и 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'
Тогда цифровые данные воспроизведения, по умолчанию передаваемые через SAI2 SDO0, доступны в правых каналах SDI0 и SDI1.
Для типовой схемы «2 микрофонных + 1 опорный канал» RV1126B по умолчанию использует полный стек alsa-lib и поддерживает asound.conf. Этот файл необходимо разместить в /etc:
# 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"
}
На стороне приложения измените test_mpi_ai.cpp, как показано ниже: задайте битовые маски Rec 2ch и Ref 1ch для трёхканальной записи.
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;
Запустите трёхканальную запись rk_mpi_ai_test, указав default в качестве sound_card_name:
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
Ожидаемое расположение MIC0/MIC1/Loopback0 показано ниже на временных и частотных диаграммах трёх каналов.

4. Типовые команды тестирования ACodec
RV1106/RV1103/RV1106B/RV1103B обычно работают с rockit. Ниже приведены базовые примеры вместе с командами этого фреймворка.
4.1 Тестирование воспроизведения
Источник — PCM 16 кГц, 2 канала, 16 бит. rk_mpi_ao_test по умолчанию обрабатывает 16-битные данные. Одинаковые device_rate=16000 и input_rate=16000 означают, что ресемплинг не нужен. Значение input_ch=2 должно соответствовать двум каналам исходного сигнала:
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
Файл sine_16k_500_1000_0dbfs.wav доступен по адресу https://redmine.rock-chips.com/attachments/2297743.
Другие параметры команд описаны в документах MPI каталога SDK Rockit и примерах тестирования в mpi example.
4.2 Тестирование записи
Пример записи PCM 16 кГц, 2 канала, 16 бит. rk_mpi_ai_test также использует 16 бит по умолчанию. Одинаковые device_rate=16000 и input_rate=16000 отключают необходимость ресемплинга; device_ch=2 и input_ch=2 означают, что преобразование числа каналов не требуется. Результат — cap_out.pcm в каталоге /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
Дополнительные параметры см. в разделе отладки AO/AI документа Rockchip_Developer_Guide_MPI_FAQ.pdf.
