Это полный технический материал на основе исходника, справочник по платформе для ArmSoM. Область исходника: RK3506, Linux kernel 6.1. Перед применением проверьте плату, SoC, ветку SDK/BSP, выводы и периферию. Аппаратная проверка не проводилась; поддержка всеми платами ArmSoM не подразумевается. Вывод и числовые результаты — примеры исходника, а не испытания ArmSoM.
Китайская статья следует китайскому исходнику, английская — английскому; русская полностью переводит английский технический текст. Код, комментарии и вывод команд сохраняют язык источника. Китайская статья использует рисунки китайского PDF, английская и русская — английского PDF.
Версии: китайская V1.0.0, английская V1.0.1; английская редакция указывает исправление китайских символов. Техническое содержание соответствует; раздел прерываний имеет номер 2.4 в китайском и 3 в английском/русском. Нумерация и идентификаторы кода сохранены.
Осторожно: резервирование памяти, DMA, мультиплексирование выводов и запись в устройства влияют на оборудование. Команды приведены для изучения; аппаратные операции не выполнялись. Проверьте схему, питание, тайминги и устройство. xxx и многоточия в DTS — заполнители исходника, а не готовая конфигурация.
Источники и исправления: EDITORIAL-NOTES。Официальные материалы: ArmSoM, Rockchip Linux.
Таблица версий продукта из исходника (PDF p.2; область исходника, не результат проверки платы):
| SoC | Версия ядра |
|---|---|
| RK3506 | kernel 6.1 |
1. Обзор
Slave Double Data Rate Serial Memory Controller (SLAVE DSMC) работает как ведомое устройство DSMC, поддерживает только протокол Local bus и требует контроллера DSMC host разработки Rockchip либо контроллера с таким же протоколом передачи. Например, можно соединить две платы RK3506 EVB: одна работает как DSMC host, другая — как ведомое устройство DSMC local bus. Схема соединения показана ниже.

2. Драйвер SLAVE DSMC
2.1 Файлы драйвера
Драйвер SLAVE DSMC расположен по следующему пути:
drivers/memory/rockchip/dsmc-lb-slave.c /* DSMC local bus slave driver */
2.2 Настройка DTS
&dsmc_lb_slave {
memory-region = <&dsmc_lb_slave_mem>; /* Memory region for dsmc local bus
slave */
status = "okay"; /* Enable dsmc local bus slave */
};
&reserved_memory {
/*
* Memory region for dsmc local bus slave, generally occupying a continuous
space in DDR
*/
dsmc_lb_slave_mem: dsmc-lb-slave-mem@6000000 {
compatible = "rockchip,dsmc-lb-slave-mem";
/* Define the start address and size of the memory space for dsmc local
bus slave */
reg = <0x6000000 0x2000000>;
};
};
По умолчанию выделенная память DSMC local bus slave используется хостом DSMC как область Merged FIFO. Поэтому диапазон памяти ведомого устройства должен соответствовать настройке свойства rockchip,ranges на стороне DSMC host.
2.3 Настройка ядра
Symbol: ROCKCHIP_DSMC_SLAVE [=y]
│
│ Type : tristate
│
│ Prompt: Rockchip Double Data Rate Serial Memory Controller(DSMC) slave
driver
│
│ Depends on: MEMORY [=y] && ARCH_ROCKCHIP
│
│ Location:
│
│ -> Device Drivers
│
│ -> Memory Controller drivers (MEMORY [=y])
│
│ -> Rockchip Double Data Rate Serial Memory Controller(DSMC) slave
driver (ROCKCHIP_DSMC_SLAVE [=y])
│
3. Прерывания
Драйвер DSMC slave регистрирует обработчик прерывания. Запись хостом DSMC в регистр LBC_CONx ведомого устройства вызывает прерывание SLAVE_DSMC (host2slave). Получив его, процессор ведомого устройства выполняет обработчик rockchip_dsmc_lb_slave_irq. Если в LBC_CON15 записано ненулевое значение, записью в APP_CON15 вызывается прерывание slave2host. Получив его, DSMC host автоматически формирует определённое число аппаратных запросов DMA, запускающих перенос данных.
