米爾RK3506 DSMC實戰(zhàn),Local Bus高速互聯(lián)
在工業(yè)控制場景中,芯片間的高速數(shù)據(jù)交互是一個核心需求。傳統(tǒng)方案要么依賴串口/網絡等低速通道,要么需要昂貴的共享內存架構。米爾RK3506核心板的DSMC接口提供了一種新選擇——通過 Local Bus 協(xié)議,用少量引腳實現(xiàn)跨芯片的高速地址空間訪問。
本文基于 MYD-YR3506 Host + MYD-YR3506 Slave的實板聯(lián)調驗證,確認DSMC Local Bus鏈路能夠穩(wěn)定建立,并在 512B、8-bit模式持續(xù)壓測中達到了 16.77 GB 累計校驗數(shù)據(jù)量、誤碼率為0的結果。DSMC 在 米爾RK3506核心板(MYC-YR3506) 的Local Bus應用場景下已具備明確的工程應用價值——既能承擔寄存器通知與控制交互,也能提供可重復驗證、可量化性能的數(shù)據(jù)訪問通道。
圖:米爾基于RK3506核心板開發(fā)板
第一章:DSMC是什么?
名詞預先了解
DSMC:Double Data Rate Serial Memory Controller,雙倍速率串行存儲器控制器
Local Bus:DSMC的一種應用模式,用于與另一顆 Rockchip 芯片的 Slave DSMC 組成主從訪問鏈路
PSRAM:DSMC的另一種模式,作為存儲器控制器為系統(tǒng)提供外部存儲空間
CS / region:CS為片選(最多4個),region為CS下的訪問窗口(每個CS可分1/2/4個region)
DSMC 全稱 Double Data Rate Serial Memory Controller,用于實現(xiàn)Host側對外部從設備地址空間的訪問。它采用命令、地址、數(shù)據(jù)線分時復用的方式,并支持DDR(雙沿)數(shù)據(jù)傳輸,核心優(yōu)勢:引腳數(shù)量少、帶寬較高。
在 米爾RK3506核心板(MYC-YR3506)平臺上,DSMC有兩種典型用法:
應用模式 | 從設備類型 | 說明 |
PSRAM 模式 | 外部 PSRAM 器件 | 作為存儲器控制器,提供可直接尋址的外部存儲空間 |
Local Bus 模式 | RK3506 Slave DSMC | 與另一顆 RK3506 組成主從鏈路,實現(xiàn)跨芯片地址空間訪問 |
本文重點介紹 Local Bus 模式。DSMC接口支持x8 和x16 兩種位寬,同一CS下的位寬必須統(tǒng)一,屬于接口設計階段需要首先確定的基礎參數(shù)。
1.1 DSMC 的系統(tǒng)定位
DSMC 既不是普通內存,也不是上層通信協(xié)議,而是一條面向對端地址空間的硬件訪問通道:
視角 | DSMC 的作用 |
Host 軟件 | 提供一片可訪問的對端地址空間,允許 Host 進行讀寫操作 |
Slave 軟件 | 提供被 Host 訪問的寄存器窗口和數(shù)據(jù)落地區(qū),通過更新本地內存及控制寄存器向 Host 提供數(shù)據(jù)和狀態(tài) |
硬件層 | 組織地址、數(shù)據(jù)、時鐘、片選及中斷關系,建立主從訪問鏈路 |
1.2 DSMC vs 常見訪問方式
核心區(qū)別:Host 與 Slave 運行在獨立地址空間和獨立內存系統(tǒng)中,數(shù)據(jù)通過硬件鏈路、FIFO 和寄存器機制完成傳遞,而非通過共享地址空間直接訪問。
第二章:Local Bus 空間模型
2.1 兩個基本維度
DSMC 的地址空間組織圍繞兩個維度展開:
CS(片選):CS0~CS3 共4個片選入口,每個CS可連接一個從設備
region(訪問窗口):當外設類型為 Local Bus 時,一個CS 的訪問空間可以繼續(xù)劃分為多個 region,由設備樹(DTS)決定哪些 region 生效
2.2 四類 region 類型
在 rk3506.dtsi 中預定義了4個region的屬性模板:
egion | 屬性 | 用途 |
region0 | Merged FIFO | FIFO 數(shù)據(jù)窗口(雙向數(shù)據(jù)通路) |
region1 | No-Merge FIFO | FIFO 數(shù)據(jù)窗口(不合并訪問) |
region2 | DPRA | 從設備 DPRAM 訪問模型 |
region3 | Register | 寄存器控制窗口(從設備寄存器) |
典型實踐:采用 "region0 傳輸數(shù)據(jù) + region3 控制握手" 的劃分。region0 為雙向數(shù)據(jù)通路,雙方的數(shù)據(jù)同步通過 region3 中的控制寄存器完成通知與應答。
2.3 硬件地址體系
項目 | 地址/容量 |
DSMC_MEM 基址 | 0xC0000000 |
DSMC_MEM 容量 | 1008 MB |
Master DSMC 控制器 | 0xFF8B0000 |
Slave DSMC 控制器 | 0xFF880000 |
項目 | 地址/容量 |
該地址空間為硬件固定映射,Host側DSMC 窗口起始地址固定為 0xC0000000,軟件僅能在既定地址范圍內進行配置與訪問。
FIFO 路徑回壓機制:RDYN 信號用于表征FIFO滿/空狀態(tài),Master需根據(jù)該信號進行傳輸?shù)却蚧謴?。FIFO路徑受硬件流控約束,并非簡單內存復制。
第三章:FIFO與Register 的協(xié)作機制
3.1 兩類訪問通路
Local Bus 主從交互可劃分為兩類:
? FIFO 訪問:當 region屬性為Merged FIFO或 No-MergeFIFO 時,Host 訪問的是數(shù)據(jù)通路,數(shù)據(jù)經Slave側FIFO后最終寫入 Slave 內存
? Register 訪問:當 region 屬性為Register 時,Host訪問的是Slave CSR寄存器窗口,用于主從控制信息交互
3.2 雙向寄存器通知
Local Bus 提供兩組寄存器,實現(xiàn)主從雙向中斷通知:
寄存器組 | 偏移范圍 | 寫入方 | 讀取方 | 觸發(fā)中斷 |
APP_CONx | 0x0000 ~ 0x003C | Slave | Host | Slave→Host |
LBC_CONx | 0x0100 ~ 0x013C | Host | Slave | Host→Slave |
在 region3 中,Host 側地址映射:
寄存器 | Host 窗口地址 | 說明 | 寄存器 | Host 窗口地址 |
APP_CON0 | 0xC2000000 | Slave 寫入 → Host 讀取 | APP_CON0 | 0xC2000000 |
LBC_CON0 | 0xC2000100 | Host 寫入 → Slave 讀取 | LBC_CON0 | 0xC2000100 |
第四章:板級配置與 DTS 適配
4.1 硬件連接
米爾RK3506開發(fā)板上,DSMC信號通過特定排針引出,Host與 Slave之間需要連接以下信號:
? 數(shù)據(jù)線:DSMC_DATA[7:0](8-bit 模式)或 DSMC_DATA[15:0](16-bit 模式)
? 控制線:CLK、CS、RDYN、DSMC_CMD等
? 中斷線:用于主從中斷通知
注意:兩塊板的GND 必須可靠連接。8-bit模式下,數(shù)據(jù)線只需連接DSMC_DATA[7:0];16-bit 模式需連接全部 16 根數(shù)據(jù)線。同一CS下的位寬必須統(tǒng)一。
4.2 Host 側 DTS 配置
/* Host 側 DSMC 節(jié)點 */
&dsmc {
status = "okay";
rockchip,ranges = <0x0 0xc0000000 0x0 0x2000000>;
/* CS0 配置為 Local Bus, 8-bit 模式 */
cs0 {
status = "okay";
rockchip,cs-type = <LB>;
rockchip,bus-width = <8>;
};
};
4.3 Slave 側 DTS 配置
/* Slave 側 DSMC 節(jié)點 */
&dsmc {
status = "okay";
/* 配置 memory-region 和中斷 */
memory-region = <&dsmc_region>;
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
};
4.4 啟動日志確認
正確配置后,啟動時會在內核日志中看到以下關鍵信息:
DSMC: init cs0 LB device DSMC: cs0 byte dll delay line result 0x2d DSMC: clk_sys: Enabled, frequency: 196608000 Hz DSMC: CS0: LB device DSMC: CS0 virt: (ptrval), phys: 0xc0000000, size:0x2000000
第五章:用戶態(tài)訪問方式
5.1 設備節(jié)點
驅動加載后,會在 /dev/dsmc/ 下創(chuàng)建用戶態(tài)訪問節(jié)點:
/dev/dsmc/cs0/region0 # FIFO 數(shù)據(jù)窗口
/dev/dsmc/cs0/region3 # Register 控制窗口
5.2 FIFO 數(shù)據(jù)讀寫
通過 region0 進行數(shù)據(jù)讀寫的核心流程:
int fd = open("/dev/dsmc/cs0/region0", O_RDWR); /* 寫入數(shù)據(jù)到 Slave 內存 */ write(fd, write_buf, write_size); /* 從 Slave 內存讀取數(shù)據(jù) */
read(fd, read_buf, read_size);
close(fd);
5.3 Register 控制交互
通過 mmap 映射 region3 后,以寄存器方式完成主從握手:
int reg_fd = open("/dev/dsmc/cs0/region3", O_RDWR);
volatile uint32_t *reg = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, reg_fd, 0); /* Host 寫 LBC_CON0,下發(fā)控制請求 */ reg[LBC_CON(0) / 4] = request_value; /* Host 讀 APP_CON0,獲取 Slave 應答 */
ack = reg[APP_CON(0) / 4];
munmap((void*)reg, 0x1000);
close(reg_fd);
關鍵細節(jié):APP_CON0 偏移為 0x0000,LBC_CON0 偏移為 0x0100。由于 reg 按 uint32_t 訪問,因此使用"寄存器偏移 / 4"作為數(shù)組下標。
第六章:性能實測
6.1 測試條件
參數(shù) | 值 |
測試平臺 | MYD-YR3506 Host + MYD-YR3506 Slave |
傳輸位寬 | 8-bit |
數(shù)據(jù)塊大小 | 512 Bytes |
單次請求數(shù)據(jù)量 | 16.777 MB |
累計校驗數(shù)據(jù)量 | 16,774.656 MB |
6.2 測試結果
結論:在 512B + 8-bit 參數(shù)組合下,鏈路能夠支持長時間、大規(guī)模重復訪問而不出現(xiàn)誤碼,平均寫速率約 340 MB/s,平均讀速率約 344 MB/s。
6.3 驅動核心文件
文件 | 作用 |
dsmc-host.c | Host 側驅動入口,DTS 解析、地址映射、訪問接口 |
dsmc-controller.c | 控制器層面配置,底層寄存器配置 |
dsmc-lb-device.c | 創(chuàng)建 /dev/dsmc/csX/regionY 用戶態(tài)節(jié)點 |
dsmc-lb-slave.c | Slave 側驅動,memory-region、中斷、寄存器聯(lián)動 |
總結與展望
本文圍繞米爾RK3506核心板DSMC的Local Bus 應用進行了完整說明與驗證,涵蓋接口定義、空間模型、板級連接、驅動配置、用戶態(tài)訪問以及性能測試。
從測試結果來看,DSMC已能夠同時支撐FIFO 數(shù)據(jù)面?zhèn)鬏敽蚏egister 控制面交互。Host 可通過 /dev/dsmc/cs0/region0直接訪問Slave側落地內存,也可通過 region3 完成寄存器通知與控制握手,形成一條兼具數(shù)據(jù)訪問與控制交互能力的跨芯片通信通道。
總體來看,DSMC 在米爾RK3506核心板 Local Bus場景下已具備明確的工程應用價值,可為工業(yè)控制等場景中的低延遲控制交互和中高頻數(shù)據(jù)交換提供可靠支撐


評論