Применимость к ArmSoM и область исходника
Справочный материал для адаптации ArmSoM на основе CN V1.0.1; no EN PDF. Сочетания платы, SDK/BSP, ядра и соединений аппаратно не проверялись. Область исходника ниже не означает поддержку каждой платой ArmSoM либо каждым ядром. Проверьте SoC, схему, SDK/BSP, драйвер и pinmux. Команды, патчи, журналы и измерения взяты из исходника и не являются тестами ArmSoM.
Английский PDF не предоставлен. Английская и русская версии полностью переведены с китайского и используют его рисунки с локализованными подписями.
| SoC исходника | Ядра по исходнику |
|---|---|
| RK3188 | 4.4 |
| RK3288 | 4.4 |
| RK3036 | 4.4 |
| RK312x | 4.4 |
| RK322x | 4.4 |
| RK3368 | 3.10 |
| RK3368 | 4.4 |
| RK3366 | 4.4 |
| RK3399 | 4.4 |
| RV1108 | 3.10 |
| RV1108 | 4.4 |
| RK3228H | 3.10 |
| RK3328 | 4.4 |
| RK3326/PX30 | 4.4 |
| RK3308 | 4.4 |
Питание IO может иметь уровни 1.8v, 3.3v, 2.5v и 5.0v; часть IO поддерживает несколько уровней. IO-domain настраивает регистры по фактическому напряжению схемы. Неверная настройка нарушает работу. Таблица ниже перечисляет SoC из исходника, но не гарантирует допустимость всех этих напряжений для любого вывода.
Редакционные примечания · ArmSoM documentation · Rockchip Linux
1. Файл драйвера и узлы DTS
1.1 Файл драйвера
Расположение драйвера: drivers/power/avs/rockchip-io-domain.c.
1.2 Узлы DTS
В ядре 3.10 узлы DTS объединены:
io-domains {
compatible = "rockchip,rk3368-io-voltage-domain";
rockchip,grf = <&grf>;
rockchip,pmugrf = <&pmugrf>;
/*GRF_IO_VSEL*/
dvp-supply = <&ldo7_reg>; /* DVPIO_VDD */
wifi-supply = <&ldo7_reg>; /* APIO2_VDD */
audio-supply = <&dcdc2_reg>; /* APIO3_VDD */
sdcard-supply = <&ldo1_reg>; /* SDMMC0_VDD */
gpio30-supply = <&dcdc2_reg>; /* APIO1_VDD */
gpio1830-supply = <&dcdc2_reg>;/* ADIO4_VDD */
/*PMU_GRF_IO_VSEL*/
pmu-supply = <&ldo5_reg>; /* PMUIO_VDD */
vop-supply = <&ldo5_reg>; /* LCDC_VDD */
};
В ядре 4.4 узлы DTS для GRF и PMUGRF разделены:
&io_domains {
status = "okay";
dvp-supply = <&vcc_18>;
audio-supply = <&vcc_io>;
gpio30-supply = <&vcc_io>;
gpio1830-supply = <&vcc_io>;
sdcard-supply = <&vccio_sd>;
wifi-supply = <&vccio_wl>;
};
&pmu_io_domains {
status = "okay";
pmu-supply = <&vcc_io>;
vop-supply = <&vcc_io>;
};
2. Описание в TRM
Чтобы найти регистры io-domain в TRM, ищите vsel, VSEL или volsel в разделах GRF/PMUGRF. Регистры io-domain в PMUGRF управляют PMU IO.
Описаны два настраиваемых диапазона напряжения: 1.8v и 3.3v.
Значение регистра 1 обычно соответствует диапазону 1.62v–1.98v с типовым напряжением 1.8v.
Значение регистра 0 обычно соответствует диапазону 3.00v–3.60v с типовым напряжением 3.3v.
Точные пределы напряжения определяются datasheet конкретного SoC.
3. Алгоритм работы драйвера
Алгоритм драйвера rockchip-io-domain.c состоит из двух основных частей:
3.1 Инициализация
В probe драйвер получает regulator по соответствующему supply name из DTS. Затем по напряжению regulator настраивает регистр io-domain: бит 1 для диапазона 1.8v и бит 0 для диапазона 3.3v.

Технический рисунок — 072, источник CN PDF p.6, cn-p06-initialization-flow.png.
Алгоритм: начало → сопоставление Supply_Name → удалось получить regulator? Нет: пропустить; да: настроить io-domain. Продолжить? Да: следующий источник; нет: завершить.
3.2 Динамическая настройка
При инициализации драйвер связывается с regulator и регистрирует notifier. При изменении напряжения regulator уведомляет драйвер io-domain, который обновляет соответствующий регистр.
4. Настройка io-domain
Не каждый домен питания IO требует настройки: некоторые имеют фиксированное напряжение. Ниже приведены три шага программной настройки io-domain.
4.1 Поиск supply name в rockchip-io-domain.txt
Домены IO, требующие настройки DTS, описаны в Documentation/devicetree/bindings/power/rockchip-io-domain.txt дерева ядра Linux. Названия одного домена в TRM и схеме могут различаться; документ задаёт их соответствие.
Для RK3399 исходный текст перечисляет bt565, audio, sdmmc, gpio1830 и pmu1830 в PMUGRF. В выдержке binding ниже используется bt656-supply, а не bt565; расхождение сохранено и отмечено. Фраза «The supply connected to ***_VDD» задаёт соответствующую цепь питания на схеме.
Возможные источники питания для rk3399:
bt656-supply: питание, подключённое к APIO2_VDD.
audio-supply: питание, подключённое к APIO5_VDD.
sdmmc-supply: питание, подключённое к SDMMC0_VDD.
gpio1830-supply: питание, подключённое к APIO4_VDD.
Возможные источники питания для rk3399 pmu-domains:
pmu1830-supply: питание, подключённое к PMUIO2_VDD.
4.2 Поиск фактического напряжения домена на схеме
В примере схемы RK3399-EVB домен bt656 соответствует APIO2_VDD. Поиск APIO2_VDD на схеме показывает, что его питает VCC1V8_DVP от RK808.

Технический рисунок — 072, источник CN PDF p.7, cn-p07-figure1.png.

Технический рисунок — 072, источник CN PDF p.8, cn-p08-figure1.png.
4.3 Настройка DTS
Определив имя и источник питания, найдите regulator vcc1v8_dvp в DTS и добавьте bt656-supply = <&vcc1v8_dvp>; в rk3399-evb.dtsi. Остальные домены настраиваются аналогично.
5. Домены, управляемые аппаратным выводом, обычно не настраиваются
Некоторые домены IO Rockchip уже управляются аппаратным выводом. Обычно их не настраивают в DTS ядра, чтобы сохранить аппаратное состояние. Часто так устроены домены flash и eMMC.
Описание регистров TRM указывает домены, управляемые выводами, и связь входного уровня с настройкой домена. Альтернативный способ — настройка через GRF.
Например, TRM RK3368 и схема RK3368-EVB содержат следующие описания регистра и аппаратного вывода.
Описания регистров TRM:

Технический рисунок — 072, источник CN PDF p.8, cn-p08-figure2.png.
Редактируемая расшифровка видимого рисунка; заголовки добавлены редакцией, значения регистров не изменены.
| Бит | Доступ | Сброс | Поле / значение |
|---|---|---|---|
| 14 | RW | 0x0 | flash_poc_control Выбор управления POC домена Flash IO 0: управляется выводом gpio_0b5 1: управляется битом 2 IO_VSEL |

Технический рисунок — 072, источник CN PDF p.8, cn-p08-figure3.png.
Редактируемая расшифровка видимого рисунка; заголовки добавлены редакцией, значения регистров не изменены.
| Бит | Доступ | Сброс | Поле / значение |
|---|---|---|---|
| 2 | RW | 0x1 | flash0_v18sel Выбор напряжения 1.8V домена FLASH0 IO 1’b0: 3.3V/2.5V 1’b1: 1.8V |
Аппаратная схема:

Технический рисунок — 072, источник CN PDF p.9, cn-p09-figure1.png.

Технический рисунок — 072, источник CN PDF p.9, cn-p09-figure2.png.
Редактируемая расшифровка видимого рисунка; заголовки добавлены редакцией, значения регистров не изменены.
| FLASH_VOL_SEL | FLASH_IO Voltage |
|---|---|
| 1.8V or 2.5V or 3.3V | 1.8V Driver IO |
| 0V | 3.3V Driver IO |
На схеме также указаны FLASH_VOLTAGE_SEL=0 FLASH_IO=3.3V и FLASH_VOLTAGE_SEL=1 FLASH_IO=1.8V. Это подписи исходной схемы, а не универсальные допустимые напряжения выводов.
6. Если regulator отсутствует в DTS
Если нужного regulator нет, возможно, вместо PMIC используется напрямую подключённое фиксированное питание. Добавьте в DTS определения fixed-regulator. Обычно достаточно двух — 3.3v и 1.8v.
Ниже приведён пример из rk3229-evb.dts. Определите фактическое напряжение схемы — 1.8v или 3.3v — и выберите соответствующий regulator:
regulators {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
vccio_1v8_reg: regulator@0 {
compatible = "regulator-fixed";
regulator-name = "vccio_1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
vccio_3v3_reg: regulator@1 {
compatible = "regulator-fixed";
regulator-name = "vccio_3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
};
&io_domains {
status = "okay";
vccio1-supply = <&vccio_3v3_reg>;
vccio2-supply = <&vccio_1v8_reg>;
vccio4-supply = <&vccio_3v3_reg>;
};
7. Частые вопросы
7.1 Проверка регистра домена конкретного вывода
Неверное напряжение вывода может быть связано с настройкой домена питания. Например, программа выставляет высокий уровень GPIO2_B1 RK3399, но измеренное напряжение неверно. Если регистры подтверждают режим GPIO и высокий выход, проверьте io-domain, выполняя описанные шаги в обратном порядке.
Сначала по схеме или datasheet определите домен вывода. В примере RK3399 GPIO2_B1 относится к APIO2_VDD, подключённому к VCC1V8_DVP.

Технический рисунок — 072, источник CN PDF p.10, cn-p10-figure1.png.

Технический рисунок — 072, источник CN PDF p.11, cn-p11-figure1.png.
Найдите программное имя в rockchip-io-domain.txt; здесь это bt656.

Технический рисунок — 072, источник CN PDF p.11, cn-p11-figure2.png.
Копируемый фрагмент binding со снимка (в оригинале gpio1830 без суффикса -supply и двоеточия; написание не изменено):
Possible supplies for rk3368 pmu-domains:
- pmu-supply: The supply connected to PMUIO_VDD.
- vop-supply: The supply connected to LCDC_VDD.
Possible supplies for rk3399:
- bt656-supply: The supply connected to APIO2_VDD.
- audio-supply: The supply connected to APIO5_VDD.
- sdmmc-supply: The supply connected to SDMMC0_VDD.
- gpio1830 The supply connected to APIO4_VDD.
Possible supplies for rk3399 pmu-domains:
- pmu1830-supply:The supply connected to PMUIO2_VDD.
У RK3368 домены pmu/vop связаны с PMUIO_VDD/LCDC_VDD. У RK3399 bt656/audio/sdmmc/gpio1830 связаны с APIO2_VDD/APIO5_VDD/SDMMC0_VDD/APIO4_VDD; питание PMU связано с PMUIO2_VDD.
Найдите регистр в TRM и прочитайте его командой io либо другим подходящим средством. База обычно GRF или PMUGRF. Здесь bt656 соответствует bit0 по смещению 0xe640, база GRF — 0xff770000. В последовательном терминале выполните io -4 0xff77e640. Значение bit0=1 выбирает 1.8v и соответствует VCC1V8_DVP; настройка DTS верна. Значение bit0=0 выбирает 3.3v и не соответствует реальному питанию VCC1V8_DVP. Эти адреса относятся к исходному примеру RK3399, а не к произвольной плате.

Технический рисунок — 072, источник CN PDF p.11, cn-p11-figure3.png.
Редактируемая расшифровка видимого рисунка; заголовки добавлены редакцией, значения регистров не изменены.
| Бит | Доступ | Сброс | Поле / значение |
|---|---|---|---|
| 3 | RW | 0x0 | gpio1833_gpio4cd_ms |
| 2 | RW | 0x0 | sdmmc_gpio4b_ms |
| 1 | RW | 0x0 | audio_gpio3d4a_ms |
| 0 | RW | 0x0 | bt656_gpio2ab_ms |
Снимок регистра содержит gpio1833_gpio4cd_ms, а binding — gpio1830. Оба исходных написания сохранены; сверить с соответствующими TRM/BSP.
7.2 Неверные регистры io-domain
Типичные причины неверной настройки:
Задано неверное напряжение regulator.
Regulator не настроен либо не включён.
Regulator загружается позже драйвера io-domain, поэтому его получение завершается ошибкой.
