Rockchip · AI & Linux Hub

Аппаратные интерфейсы

Руководство Rockchip FLEXBUS: режимы работы, ядро и настройка DTS

Руководство Rockchip FLEXBUS: режимы работы, ядро и настройка DTS с полными техническими разделами, кодом, параметрами и замечаниями к исходнику.

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

Это полный технический материал на основе исходника, справочник по платформе для ArmSoM. Область исходника: RK3576, Linux kernel 6.1. Перед применением проверьте плату, SoC, ветку SDK/BSP, выводы и периферию. Аппаратная проверка не проводилась; поддержка всеми платами ArmSoM не подразумевается. Вывод и числовые результаты — примеры исходника, а не испытания ArmSoM.

Китайская статья следует китайскому исходнику, английская — английскому; русская полностью переводит английский технический текст. Код, комментарии и вывод команд сохраняют язык источника. В технической части исходника нет отдельных технических рисунков или таблиц; вымышленные иллюстрации не добавлялись.

Оба исходника имеют версию V1.0.0.

Осторожно: резервирование памяти, DMA, мультиплексирование выводов и запись в устройства влияют на оборудование. Команды приведены для изучения; аппаратные операции не выполнялись. Проверьте схему, питание, тайминги и устройство. xxx и многоточия в DTS — заполнители исходника, а не готовая конфигурация.

Источники и исправления: EDITORIAL-NOTES。Официальные материалы: ArmSoM, Rockchip Linux.

Таблица версий продукта из исходника (PDF p.2; область исходника, не результат проверки платы):

SoC Версия ядра
RK3576 6.1

1. Обзор FLEXBUS

Модуль FLEXBUS состоит из FLEXBUS0 и FLEXBUS1. FLEXBUS0 поддерживает TX, а в некоторых режимах — TX с последующим RX. FLEXBUS1 поддерживает только RX. К каждому из FLEXBUS0 и FLEXBUS1 можно подключить только одно периферийное устройство. Допускается одновременное использование обоих блоков либо только FLEXBUS0 или FLEXBUS1.

FLEXBUS0 поддерживает следующие режимы:

1. Высокоскоростной параллельный DAC (далее — DAC)

2. Эмуляция протокола SPI, главным образом для Single/Quad SPI; поддерживаются внешняя SPI Flash и QSPI-дисплей

FLEXBUS1 поддерживает следующие режимы:

1. Высокоскоростной параллельный ADC (далее — ADC)

2. DVP

У FLEXBUS0 и FLEXBUS1 имеется по 1 линии CLK, 1 линии CSn и 16 линий данных. Фактически доступные выводы зависят от ограничений платформы и настройки IOMUX.

2. Использование FLEXBUS

2.1 Настройка ядра

Device Drivers -> Multifunction device drivers -> Rockchip Flexbus

2.2 Настройка dtsi

Пример для платформы RK3576 и платы RK3576 TEST1: FLEXBUS0 подключён к DAC, FLEXBUS1 — к ADC.

В rk3576.dtsi:

flexbus: flexbus@2a2f0000 {
    compatible = "rockchip,rk3576-flexbus";
    reg = <0x0 0x2a2f0000 0x0 0x200>;
    interrupts = <GIC_SPI 369 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&cru CLK_HSGPIO_TX>, <&cru CLK_HSGPIO_RX>,
    <&cru ACLK_HSGPIO>, <&cru HCLK_HSGPIO>;
    clock-names = "tx_clk_flexbus", "rx_clk_flexbus",
    "aclk_flexbus", "hclk_flexbus";
    rockchip,grf = <&ioc_grf>; // GRF needs to be configured for FLEXBUS
    status = "disabled";
    flexbus_adc: adc {
        ......
    };
    flexbus_dac: dac {
        ......
    };
};

Измените настройки дочерних узлов, например flexbus_adc и flexbus_dac, согласно выбранному режиму. Подробности приведены в документации соответствующих режимов. Остальные настройки обычно изменять не требуется.

В arch/arm64/boot/dts/rockchip/rk3576-test1.dtsi:

&flexbus {
    rockchip,flexbus0-opmode = <ROCKCHIP_FLEXBUS0_OPMODE_DAC>; // FLEXBUS0 selects DAC mode
    rockchip,flexbus1-opmode = <ROCKCHIP_FLEXBUS1_OPMODE_ADC>; // FLEXBUS1 selects ADC mode
    status = "okay"; // Enable FLEXBUS
};
&flexbus_adc {
    pinctrl-names = "default";
    pinctrl-0 = <&flexbus1m4_csn &flexbus1_clk
             &flexbus1_d0 &flexbus1_d1 &flexbus1_d2 &flexbus1_d3
             &flexbus1_d4 &flexbus1_d5 &flexbus1_d6 &flexbus1_d7
             &flexbus1_d8 &flexbus1_d9 &flexbus1_d10 &flexbus1_d11
             &flexbus1m1_d12 &flexbus1m1_d13 &flexbus1m1_d14 &flexbus1m1_d15>;
// Configure IOMUX for FLEXBUS1 ADC mode
    status = "okay"; // Enable ADC mode
};
&flexbus_dac {
    pinctrl-names = "default";
    pinctrl-0 = <&flexbus0m4_csn &flexbus0_clk
             &flexbus0_d0 &flexbus0_d1 &flexbus0_d2 &flexbus0_d3
             &flexbus0_d4 &flexbus0_d5 &flexbus0_d6 &flexbus0_d7
             &flexbus0_d8 &flexbus0_d9 &flexbus0_d10 &flexbus0_d11
             &flexbus0_d12 &flexbus0m0_d13 &flexbus0m0_d14 &flexbus0m0_d15>;
// Configure IOMUX for FLEXBUS0 DAC mode
    status = "okay"; // Enable DAC mode
};

Задайте rockchip,flexbus0-opmode и rockchip,flexbus1-opmode в соответствии с фактическими режимами FLEXBUS0 и FLEXBUS1. Определения режимов находятся в include/dt-bindings/mfd/rockchip-flexbus.h. Для неиспользуемого блока задайте ROCKCHIP_FLEXBUS0_OPMODE_NULL или ROCKCHIP_FLEXBUS1_OPMODE_NULL.

2.3 Файл драйвера

Файл драйвера — drivers/mfd/rockchip-flexbus.c. Он содержит только базовые операции: чтение/запись регистров, инициализацию и т. п. Код отдельных режимов расположен в соответствующих подсистемах; см. документацию каждого режима.

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