Rockchip · AI & Linux Hub

Экран и звук

Rockchip RV ACodec: полное руководство по настройке, записи и воспроизведению

Полный справочник RV ACodec: Device Tree, усиление, цифровой возврат и тесты Rockit для RV1106/RV1103, вариантов B и RV1126B/RV1126BP.

· ArmSoM Editorial · Rockchip source documentation · 27 мин чтения

Это справочный материал по аудио 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

Иллюстрация из оригинала: 2.2 Структурные схемы ACodec (p. 6)

Структурная схема ACodec RV1106/RV1103

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

Иллюстрация из оригинала: 2.2 Структурные схемы ACodec (p. 7)

Структурная схема ACodec RV1106B/RV1103B

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

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

Иллюстрация из оригинала: 2.2 Структурные схемы ACodec (p. 8)

Структурная схема 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.4 Настройка ACodec RV1106B/RV1103B из пользовательского пространства (p. 16)

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 показано ниже на временных и частотных диаграммах трёх каналов.

Иллюстрация из оригинала: 3.5 Настройка ACodec RV1126B/RV1126BP из пользовательского пространства (p. 21)

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.

Другие статьи по теме → · Учебные маршруты →