chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RK?平臺?SPI?開發(fā)完全指南(驅(qū)動?+?配置?+?測試?+?優(yōu)化)

jf_44130326 ? 來源:Linux1024 ? 作者:Linux1024 ? 2026-01-30 22:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式Linux開發(fā)中,SPI(串行外設(shè)接口)憑借高速同步通信特性,廣泛應(yīng)用于傳感器、存儲芯片、顯示模塊等外設(shè)交互場景。瑞芯微Rockchip)作為主流嵌入式芯片廠商,其Linux平臺SPI驅(qū)動已形成完善的開發(fā)體系,支持Master/Slave雙模式、多速率適配及靈活配置。本文基于Rockchip官方開發(fā)指南,從功能特性、驅(qū)動配置、測試驗證到優(yōu)化方案,全方位拆解RK平臺SPI開發(fā)流程。

wKgZO2l8wsGAc-2qAAA6BBWzM7k065.png

一、RK平臺SPI核心特性速覽

1.基礎(chǔ)支持能力

?協(xié)議兼容:默認(rèn)采用摩托羅拉SPI協(xié)議,支持4種傳輸模式(CPOL/CPHA組合配置)

?數(shù)據(jù)寬度:支持8/16位傳輸,16位模式可提升DMA傳輸效率

?片選擴(kuò)展:每個SPI控制器支持1-2個硬件片選,可通過cs-gpios擴(kuò)展更多片選信號

?內(nèi)核適配:兼容Linux4.4、Linux4.19及以上內(nèi)核(含Linux5.10),新增Slave模式框架支持

2.關(guān)鍵速率參數(shù)(全平臺匯總)

SOC系列

Master模式最高速率

Slave模式最高速率

RK3506/RK3588

50MHz

50MHz/33MHz

RV1103B/RV1106B

50MHz

33MHz

RK3576/RK3562

50MHz

33MHz

RV1126/RV1109

50MHz

16MHz

其他平臺

50MHz

16MHz

注意:表格速率為理論值,實際受PCB走線質(zhì)量、PLL分頻策略影響,需以實測為準(zhǔn);部分平臺需配置100MHz工作時鐘(二分頻后輸出50MHz)。

二、開發(fā)環(huán)境與核心代碼路徑

1.內(nèi)核配置前提

需在Kernel配置中啟用SPI相關(guān)支持,配置路徑如下:

DeviceDrivers ---> [*] SPI support --->  <*> Rockchip SPI controller driver # RK專用SPI控制器驅(qū)動  <*> User mode SPI device driver support # 用戶態(tài)訪問支持(可選)  [*] SPI slave protocol handlers # Slave模式支持(如需從機(jī)功能)

2.核心代碼位置

功能模塊

代碼路徑

作用說明

SPI驅(qū)動框架

drivers/spi/spi.c

Linux通用SPI框架實現(xiàn)

RK SPI主控驅(qū)動

drivers/spi/spi-rockchip.c

主控模式核心邏輯、寄存器操作

RK SPI從機(jī)驅(qū)動

drivers/spi/spi-rockchip-slave.c

從機(jī)模式數(shù)據(jù)傳輸、DMA處理

用戶態(tài)設(shè)備節(jié)點驅(qū)動

drivers/spi/spidev.c

創(chuàng)建/dev/spidev設(shè)備節(jié)點,支持用戶態(tài)操作

內(nèi)核測試驅(qū)動

drivers/spi/spi-rockchip-test.c

內(nèi)核態(tài)測試工具,需手動添加編譯

用戶態(tài)測試工具

Documentation/spi/spidev_test.c

用戶態(tài)SPI讀寫測試示例程序

三、SPI驅(qū)動配置實戰(zhàn)(Master/Slave雙模式)

1. Master模式配置(RK芯片作為主機(jī))

1DTS節(jié)點配置示例(以SPI0為例)

&spi0 {  status ="okay"; // 可選配置:關(guān)閉DMA僅用IRQ傳輸(默認(rèn)開啟DMA) // dma-names; // 可選配置:讀采樣延時(單位ns,需根據(jù)外設(shè)調(diào)整) // rx-sample-delay-ns = <10>; // 可選配置:Runtime PM休眠延時(優(yōu)化功耗) // rockchip,autosuspend-delay-ms = <500>; spi_test@0{    compatible ="rockchip,spi_test_bus0_cs0"; // 與驅(qū)動匹配名    reg = <0>; // 片選編號(0或1)    spi-cpha; // 配置CPHA=1(默認(rèn)0)    spi-cpol; // 配置CPOL=1(默認(rèn)0)    spi-lsb-first; // 小端優(yōu)先傳輸(默認(rèn)大端)    spi-max-frequency = <24000000>; // 傳輸速率(不超過50MHz)  };};

2)時鐘配置說明

?SPI輸出時鐘(spi-max-frequency)由工作時鐘(assigned-clock-rates)分頻得到

?約束關(guān)系:assigned-clock-rates ≥ 2×spi-max-frequency(內(nèi)部分頻為偶數(shù))

?示例:需50MHz傳輸速率時,配置assigned-clock-rates = <100000000>

2. Slave模式配置(RK芯片作為從機(jī))

1)關(guān)鍵依賴

需先確認(rèn)SDK包含Slave驅(qū)動補(bǔ)?。?/span>commit 10cbf3c2),無補(bǔ)丁可通過瑞芯微Redmine獲取。

2DTS節(jié)點配置示例(以SPI1為例)

&spi1 {  compatible ="rockchip,spi-slave"; // 從機(jī)模式標(biāo)識  status ="okay";  ready-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_LOW>; // 就緒信號(下降沿有效) // 可選配置:屏蔽CS釋放檢測(適用于長時序場景) // rockchip,cs-inactive-disable; slave@0{    compatible ="rockchip,spi_test_bus1_cs0";    reg = <0>; // 從機(jī)僅支持片選0    spi-cpha;    spi-cpol;    spi-lsb-first;    max-frequency = <33000000>; // 遵循對應(yīng)SOC的Slave速率限制  };};

3)從機(jī)模式關(guān)鍵須知

?傳輸順序:Slave需先啟動讀寫操作,Master再發(fā)起傳輸(避免數(shù)據(jù)丟失)

?DMA建議:Slave模式默認(rèn)啟用DMA,不建議關(guān)閉(大長度傳輸需依賴DMA避免緩存溢出)

?性能模式:Master速率>5MHz8位)/10MHz16位)時,需開啟performance模式

3. cs-gpios片選擴(kuò)展(Linux4.19+

當(dāng)硬件片選不足時,可通過GPIO模擬片選,配置步驟如下:

// 1. 定義GPIO引腳功能&pinctrl {  spi1 {    spi1_cs2n: spi1-cs2n {      rockchip,pins = <0RK_PC4 RK_FUNC_GPIO &pcfg_pull_up_drv_level_0>;    };  };};// 2. SPI節(jié)點引用擴(kuò)展片選&spi1 {  status ="okay";  cs-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_LOW>, // 原有片選0       <&gpio0 RK_PC3 GPIO_ACTIVE_LOW>, // 原有片選1       <&gpio0 RK_PC4 GPIO_ACTIVE_LOW>; // 擴(kuò)展片選2};

四、驅(qū)動開發(fā)與測試驗證

1.內(nèi)核態(tài)驅(qū)動開發(fā)示例

核心實現(xiàn)probe函數(shù)(設(shè)備匹配與初始化)和讀寫接口,參考代碼:

#includestaticintspi_test_probe(structspi_device *spi){ intret; if(!spi)return-ENOMEM;
  spi->bits_per_word =8; // 設(shè)置數(shù)據(jù)寬度  ret =spi_setup(spi);  // 初始化SPI配置 if(ret 0) {   dev_err(&spi->dev,"SPI配置失敗n");   returnret;  } return0;}// 設(shè)備樹匹配表staticconststructof_device_idspi_test_dt_match[] = {  {.compatible ="rockchip,spi_test_bus0_cs0"},  {.compatible ="rockchip,spi_test_bus1_cs0"},  {},};MODULE_DEVICE_TABLE(of, spi_test_dt_match);// SPI驅(qū)動結(jié)構(gòu)體staticstructspi_driverspi_test_driver = {  .driver = {    .name ="spi_test",    .of_match_table =of_match_ptr(spi_test_dt_match),  },  .probe = spi_test_probe,  .remove = spi_test_remove,};module_init(spi_test_init); // 驅(qū)動注冊module_exit(spi_test_exit); // 驅(qū)動卸載

2.測試驗證步驟

1)內(nèi)核態(tài)測試(使用spi-rockchip-test驅(qū)動)

1.編譯驅(qū)動:在drivers/spi/Makefile中添加obj-y += spi-rockchip-test.o

2.加載驅(qū)動后,執(zhí)行測試命令:

# 寫測試:向ID=0的設(shè)備寫入10次,每次255字節(jié)echowrite010255> /dev/spi_misc_test# 讀測試:從ID=0的設(shè)備讀取10次,每次255字節(jié)echoread010255> /dev/spi_misc_test# 速率設(shè)置:將ID=0的設(shè)備速率設(shè)為1MHzechosetspeed01000000> /dev/spi_misc_test

2)用戶態(tài)測試(使用spidev設(shè)備節(jié)點)

1.編譯測試工具:make CROSS_COMPILE=xxx-linux-gnu- -C linux-src M=Documentation/spi

2.運行測試程序:

# 讀取spidev1.1設(shè)備,傳輸1024字節(jié)./spidev_test -D /dev/spidev1.1 -s 24000000 -r -n 1024

3Slave模式專項測試

1.Slave端啟動寫操作:echo write 0 1 16 > /dev/spi_misc_test

2.Master端啟動讀操作:echo read 0 1 16 > /dev/spi_misc_test

3.自動化壓測(Master端):echo autotest 1024 64 1 > /dev/spidev_rkmst_misc1024字節(jié)×64次,開啟校驗)

五、常見問題與優(yōu)化方案

1.高頻問題排查

1SPI無信號輸出

?檢查驅(qū)動加載狀態(tài):lsmod | grep spi_rockchip

?確認(rèn)引腳配置:驗證IOMUX是否正確映射為SPI功能

?排查DMA使能:串口無"Failed to request TX/RX DMA channel"DMA正常

?增強(qiáng)驅(qū)動強(qiáng)度:高頻場景下提高GPIO驅(qū)動能力改善信號質(zhì)量

2)傳輸數(shù)據(jù)錯誤

?速率匹配:確認(rèn)Master/Slave速率不超過對應(yīng)SOC的限制

?采樣延時:高速傳輸時添加rx-sample-delay-ns配置(如10ns

?模式一致性:MasterSlaveCPOL/CPHA配置必須一致

2.性能優(yōu)化方向

1)降低CPU占用率

?開啟Runtime PMdts添加rockchip,autosuspend-delay-ms = <500>

?調(diào)整傳輸模式:小數(shù)據(jù)量場景改用IRQ傳輸(關(guān)閉DMA

?優(yōu)化DMA水線:修改TX DMA水線值(如設(shè)為11)減少回調(diào)等待時間

2)提升傳輸速率

?啟用16位數(shù)據(jù)寬度:最大化FIFO利用率,加速DMA傳輸

?開啟performance模式:避免DRAM變頻導(dǎo)致緩存溢出(參考如下代碼)

// 傳輸前開啟性能模式rockchip_set_system_status(SYS_STATUS_PERFORMANCE);// 執(zhí)行SPI傳輸spi_read_slt(id, rxbuf, size);// 傳輸后關(guān)閉性能模式rockchip_clear_system_status(SYS_STATUS_PERFORMANCE);

?減少傳輸次數(shù):合并小數(shù)據(jù)包,降低調(diào)度開銷

RK平臺SPI開發(fā)的核心在于掌握DTS配置規(guī)范、模式匹配要點及性能優(yōu)化技巧。通過本文的步驟拆解,無論是快速搭建基礎(chǔ)通信鏈路,還是深度優(yōu)化傳輸性能,都能找到對應(yīng)的實現(xiàn)方案。建議開發(fā)過程中結(jié)合具體SOC的速率限制和外設(shè)需求,靈活調(diào)整配置參數(shù),確保SPI通信穩(wěn)定可靠。


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5198

    文章

    20434

    瀏覽量

    333859
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11754

    瀏覽量

    218994
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    RK3562 單板機(jī)圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(二)

    本節(jié)為創(chuàng)龍科技RK3562 單板機(jī) Qt 開發(fā)指南,核心包含開發(fā)環(huán)境配置、工程編譯、網(wǎng)絡(luò)調(diào)試及實戰(zhàn)案例。詳細(xì)說明 Qt Creator 交叉編譯工具鏈、Debuggers、Kits
    的頭像 發(fā)表于 02-27 10:42 ?4704次閱讀
    <b class='flag-5'>RK</b>3562 單板機(jī)圖形用戶界面<b class='flag-5'>開發(fā)完全</b>手冊:Qt Creator <b class='flag-5'>配置</b>與 LVGL 案例詳解(二)

    RK3562 單板機(jī)圖形用戶界面開發(fā)完全手冊:Qt Creator 配置與 LVGL 案例詳解(一)

    本節(jié)為創(chuàng)龍科技RK3562 單板機(jī) Qt 開發(fā)指南,核心包含開發(fā)環(huán)境配置、工程編譯、網(wǎng)絡(luò)調(diào)試及實戰(zhàn)案例。詳細(xì)說明 Qt Creator 交叉編譯工具鏈、Debuggers、Kits
    的頭像 發(fā)表于 02-26 11:41 ?205次閱讀
    <b class='flag-5'>RK</b>3562 單板機(jī)圖形用戶界面<b class='flag-5'>開發(fā)完全</b>手冊:Qt Creator <b class='flag-5'>配置</b>與 LVGL 案例詳解(一)

    RK3562 單板機(jī) Linux-RT 系統(tǒng)開發(fā)指南:內(nèi)核配置、實時性優(yōu)化與案例詳解

    本文為創(chuàng)龍科技RK3562 單板機(jī) Linux-RT 開發(fā)指南,核心聚焦實時內(nèi)核的性能測試開發(fā)應(yīng)用。內(nèi)容包括 Linux 與 Linux-RT 實時性對比、CPU 負(fù)載
    的頭像 發(fā)表于 02-10 11:49 ?1.6w次閱讀
    <b class='flag-5'>RK</b>3562 單板機(jī) Linux-RT 系統(tǒng)<b class='flag-5'>開發(fā)指南</b>:內(nèi)核<b class='flag-5'>配置</b>、實時性<b class='flag-5'>優(yōu)化</b>與案例詳解

    RK平臺新聲卡添加與驅(qū)動調(diào)試指南

    在瑞芯微(RK平臺的嵌入式系統(tǒng)開發(fā)中,音頻功能的實現(xiàn)核心依賴于 Sound Card(聲卡)的正確配置驅(qū)動調(diào)試。
    的頭像 發(fā)表于 02-09 16:42 ?735次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b>新聲卡添加與<b class='flag-5'>驅(qū)動</b>調(diào)試<b class='flag-5'>指南</b>

    RK3562 單板機(jī)系統(tǒng)開發(fā)完全手冊:U-Boot/Kernel/Rootfs 開發(fā)與性能優(yōu)化

    本文為創(chuàng)龍科技RK3562 單板機(jī) Linux 系統(tǒng)開發(fā)指南,核心包含 SDK 配置、內(nèi)核與文件系統(tǒng)開發(fā)、分區(qū)配置及 CPU/GPU/NPU
    的頭像 發(fā)表于 02-05 17:20 ?248次閱讀
    <b class='flag-5'>RK</b>3562 單板機(jī)系統(tǒng)<b class='flag-5'>開發(fā)完全</b>手冊:U-Boot/Kernel/Rootfs <b class='flag-5'>開發(fā)</b>與性能<b class='flag-5'>優(yōu)化</b>

    RK平臺UART開發(fā)!從驅(qū)動配置測試全流程

    完善的 UART 開發(fā)支持,本文將結(jié)合官方開發(fā)指南,從功能特點、驅(qū)動配置、測試驗證三個維度,帶大家快速掌握
    的頭像 發(fā)表于 02-04 17:44 ?1733次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b>UART<b class='flag-5'>開發(fā)</b>!從<b class='flag-5'>驅(qū)動</b><b class='flag-5'>配置</b>到<b class='flag-5'>測試</b>全流程

    深入解析RK平臺GPIO驅(qū)動:從原理到調(diào)試,開發(fā)者必看指南

    平臺上,GPIO 驅(qū)動的實現(xiàn)直接影響著硬件交互的穩(wěn)定性與效率。本文將帶你深入剖析 RK 平臺 GPIO 驅(qū)動的核心邏輯、使用方法,以及對調(diào)
    的頭像 發(fā)表于 02-03 15:53 ?1010次閱讀
    深入解析<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>GPIO<b class='flag-5'>驅(qū)動</b>:從原理到調(diào)試,<b class='flag-5'>開發(fā)</b>者必看<b class='flag-5'>指南</b>

    RK?平臺升級開發(fā):全場景方案與實踐指南,覆蓋常規(guī)系統(tǒng)和ab系統(tǒng)

    ? ? ? ? ? ? 在嵌入式 Linux 開發(fā)領(lǐng)域,瑞芯微( Rockchip )平臺憑借其穩(wěn)定的性能和豐富的生態(tài)支持,被廣泛應(yīng)用于各類智能設(shè)備中。而設(shè)備的升級功能作為保障產(chǎn)品生命周期、優(yōu)化
    的頭像 發(fā)表于 01-13 15:35 ?1167次閱讀
    <b class='flag-5'>RK</b>?<b class='flag-5'>平臺</b>升級<b class='flag-5'>開發(fā)</b>:全場景方案與實踐<b class='flag-5'>指南</b>,覆蓋常規(guī)系統(tǒng)和ab系統(tǒng)

    釋放多屏潛能:迅為RK3588開發(fā)板Android多屏同顯開發(fā)完全指南

    釋放多屏潛能:迅為RK3588開發(fā)板Android多屏同顯開發(fā)完全指南
    的頭像 發(fā)表于 12-16 16:11 ?883次閱讀
    釋放多屏潛能:迅為<b class='flag-5'>RK</b>3588<b class='flag-5'>開發(fā)</b>板Android多屏同顯<b class='flag-5'>開發(fā)完全</b><b class='flag-5'>指南</b>

    避坑指南RK3568開發(fā)板選型,這5點沒看清千萬別下手!(附迅為驅(qū)動開發(fā)指南資源)

    避坑指南RK3568開發(fā)板選型,這5點沒看清千萬別下手!(附迅為驅(qū)動開發(fā)指南資源)
    的頭像 發(fā)表于 10-30 15:49 ?762次閱讀
    避坑<b class='flag-5'>指南</b>!<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)</b>板選型,這5點沒看清千萬別下手!(附迅為<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)指南</b>資源)

    迅為RK3568?重制版RK3568驅(qū)動指南全面升級

    迅為RK3568 重制版RK3568驅(qū)動指南全面升級
    的頭像 發(fā)表于 07-28 15:25 ?2454次閱讀
    迅為<b class='flag-5'>RK</b>3568?重制版<b class='flag-5'>RK</b>3568<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>全面升級

    迅為RK3568開發(fā)驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?1011次閱讀
    迅為<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗

    迅為RK3568開發(fā)驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗
    的頭像 發(fā)表于 05-26 15:39 ?1513次閱讀
    迅為<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b><b class='flag-5'>指南</b>GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗

    【北京迅為】iTOP-RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置UART

    【北京迅為】iTOP-RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置
    的頭像 發(fā)表于 03-25 11:02 ?1718次閱讀
    【北京迅為】iTOP-<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)</b>板鴻蒙OpenHarmony系統(tǒng)南向<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>實操-HDF<b class='flag-5'>驅(qū)動</b><b class='flag-5'>配置</b>UART

    北京迅為iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置LED

    北京迅為iTOP-RK3568開發(fā)板OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置L
    的頭像 發(fā)表于 03-14 14:41 ?1344次閱讀
    北京迅為iTOP-<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)</b>板OpenHarmony系統(tǒng)南向<b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>實操-HDF<b class='flag-5'>驅(qū)動</b><b class='flag-5'>配置</b>LED