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


評論