一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

瑞芯微RK3506核心板/開(kāi)發(fā)板SPI Slave從設(shè)備開(kāi)發(fā)攻略

觸覺(jué)智能 ? 2025-06-26 11:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

內(nèi)核SPI Slave軟件簡(jiǎn)介

SPI主從之間傳輸通常遵循特定協(xié)議,如SPI Nor 兼容 JEDEC SDFP 協(xié)議,瑞芯微RK SPI slave 作為設(shè)備端傳輸也應(yīng)遵循特定的協(xié)議,由于協(xié)議無(wú)范式,所以RK提供自定義的傳輸協(xié)議和設(shè)備驅(qū)動(dòng)以供客戶(hù)參考。

Linux SPI slave驅(qū)動(dòng)框架限制:使用傳輸隊(duì)列,雖然隊(duì)列喚醒后的線程優(yōu)先級(jí)較高,但受調(diào)度影響不能完全保證實(shí)時(shí)性。

瑞芯微RK SPI slavemode限制:每次傳輸需重新發(fā)起SPI控制器配置,因此為確保SPImaster能夠獲知RK SPI slave完成傳輸配置從而發(fā)起數(shù)據(jù)傳輸,RKSPIslave端需增加side-band信號(hào)做ready狀態(tài)位。

本文基于

觸覺(jué)智能RK3506星閃開(kāi)發(fā)板

演示SPI Slave從設(shè)備開(kāi)發(fā),其配套R(shí)K3506核心板(3核A7+M0多核異構(gòu)),100%全國(guó)產(chǎn),峰值功耗低至0.65W。

瑞芯微RK SPI slave 傳輸協(xié)議


  • RK SPI Slave 傳輸基本流程

數(shù)據(jù)傳輸要求指定ready-gpios來(lái)通知SPI master分為5個(gè)部分:

(1)Slave 主動(dòng)發(fā)起 spi_syncstep(2)Slave ready,使能 GPIO_SlV_READY 信號(hào)(3)master 確認(rèn) Slave ready 后發(fā)起傳輸(4)Slave 接收來(lái)自 master 發(fā)出的足夠的 clk 后完成傳輸(5)Slave idle,釋放 GPIO_SlV_READY 信號(hào)

wKgZPGhcwAOAcdgyAAEMUJS08yo074.png

、


  • 定義兩種包類(lèi)型

包括ctrl packet:2B cmd,2B addr(RK slave 定義的 application buffer 偏移地址),4B data(通常用于指定之后 data 包的傳輸長(zhǎng)度)和data packet。


  • 定義兩種傳輸類(lèi)型

ctrl 傳輸(僅包含 1 ctrl packet),以及data 傳輸(包含1 ctrl packet 和 1 data packet 的兩筆 SPI 傳輸)。


  • spidev_rkslv 支持 SPI_OBJ_APP_RAM_SIZE 長(zhǎng)度的 application buffer 用于緩存?zhèn)鬏敂?shù)據(jù),SPI master發(fā)起的 data 傳輸 1 ctrl packet 2B addr 指向該緩存偏移地址
  • 設(shè)備驅(qū)動(dòng)

驅(qū)動(dòng)源碼:

drivers/spi/spidev-rkslv.c drivers/spi/spidev-rkmst.c


源碼簡(jiǎn)介:

static int spidev_rkslv_ctrl_receiver_thread(void *p) //建立線 程,線程內(nèi)重復(fù)發(fā)起傳輸 { while (1) spidev_rkslv_xfer(spidev); drivers/spi/spidev-rkmst.c: 實(shí)現(xiàn)業(yè)務(wù) } static int spidev_rkslv_xfer(struct spidev_rkslv_data *spidev) //傳輸入口 { spidev_slv_read(spidev, spidev->ctrlbuf, SPI_OBJ_CTRL_MSG_SIZE); //1 ctrl packet,獲取并解析傳輸類(lèi)型 switch (ctrl->cmd) { //1 data packet,根據(jù)傳輸類(lèi)型,定義 data packet 并完成收發(fā) case SPI_OBJ_CTRL_CMD_INIT: /* to-do */ case SPI_OBJ_CTRL_CMD_READ: /* to-do */ case SPI_OBJ_CTRL_CMD_WRITE: /* to-do */ case SPI_OBJ_CTRL_CMD_DUPLEX: /* to-do */ } } static const struct file_operations spidev_rkslv_misc_fops = {} //注冊(cè) misc device 測(cè)試接口


drivers/spi/spidev-rkmst.c說(shuō)明:

static int spidev_rkmst_xfer(struct spidev_rkmst_data *spidev, void *tx, void *rx, u16 addr, u32 len) //傳輸入口 { spidev_rkmst_ctrl(spidev, cmd, addr, len); //1 ctrl packet,定義傳輸類(lèi)型 switch (cmd) { //1 data packet,根據(jù)傳輸類(lèi)型,定義 data packet 并完成收發(fā) case SPI_OBJ_CTRL_CMD_READ: /* to-do */ case SPI_OBJ_CTRL_CMD_WRITE: /* to-do */ case SPI_OBJ_CTRL_CMD_DUPLEX: /* to-do */ } } static const struct file_operations spidev_rkmst_misc_fops = {} //注冊(cè) misc device 測(cè)試接口


  • 業(yè)務(wù)實(shí)現(xiàn)形式
wKgZPGhcwCqADNV2AAGkpvG_PAA508.png

SPI Slave 測(cè)試設(shè)備配置


  • SPI master 發(fā)起單包數(shù)據(jù)傳輸測(cè) :

echocmd addr length > /dev/spidev_rkmst_misc

說(shuō)明:cmd :支持 read/write/duplex;addr:為對(duì)端 slave application buffer 偏移,單位 Bytes,僅支持 10 進(jìn)制輸入;length:為 data packet 長(zhǎng)度,單位 Bytes,僅支持 10 進(jìn)制輸入;

實(shí)例如下:

echo write 128 128 > /dev/spidev_rkmst_misc echo read 128 128 > /dev/spidev_rkmst_misc echo duplex 128 128 > /dev/spidev_rkmst_misc

  • SPI master 發(fā)起自動(dòng)化測(cè)試 :

echoautotest length loops compare > /dev/spidev_rkmst_misc

說(shuō)明:autotest:固定輸入,先測(cè)試全雙工數(shù)據(jù)傳輸,再測(cè)試讀寫(xiě)數(shù)據(jù)傳輸,并輸出速率結(jié)果;測(cè)試默認(rèn)使用對(duì)端 slave application buffer 偏移地址 0;

length:為 data packet 長(zhǎng)度,單位 Bytes,僅支持 10 進(jìn)制輸入;loops:設(shè)定壓測(cè)循環(huán)次數(shù);

compare:1 - 開(kāi)啟數(shù)據(jù)校驗(yàn);0 - 關(guān)閉數(shù)據(jù)校驗(yàn)(支持特定場(chǎng)景,如持續(xù)輸出數(shù)據(jù)進(jìn)行信號(hào)測(cè)試);

實(shí)例如下:

echoautotest1024641> /dev/spidev_rkmst_misc

  • SPI master 發(fā)起自動(dòng)化測(cè)試 :

echo appmem 0 256 > ./dev/spidev_rkslv_misc #打印 application buffer 數(shù)據(jù) echo verbose 1 > ./dev/spidev_rkslv_misc #開(kāi)啟傳輸傳輸過(guò)程 debug log,echo verbose 0 關(guān)閉打印

SPI Slave常見(jiàn)問(wèn)題

  • SPI 無(wú)信號(hào)

調(diào)試前確認(rèn)驅(qū)動(dòng)有跑起來(lái);確保 SPI 4個(gè)引腳的IOMUX配置無(wú)誤;

確認(rèn)TX 引腳有正常的波形,CLK有正常的 CLOCK 信號(hào),CS信號(hào)有拉低;

如果clk頻率較高,可以考慮提高驅(qū)動(dòng)強(qiáng)度來(lái)改善信號(hào);

如何簡(jiǎn)單判斷SPI DMA 是否使能,串口打印如無(wú)以下關(guān)鍵字,則DMA 使能成功:

[ 0.457137]Failedtorequest TX DMA channel [ 0.457237] Failed to request RX DMA channel


對(duì)于 SPI io 速率較高的情形,正常 SPI mode 可能依舊無(wú)法匹配外接器件輸出延時(shí),RK SPI master read 可能無(wú)法采到有效數(shù)據(jù),需要啟用 SPI rsd 邏輯來(lái)延遲采樣時(shí)鐘。


  • SPI 傳輸方式說(shuō)明

(1)默認(rèn)傳輸模式

master mode 支持 IRQ、DMA 和 CPU 傳輸,slave mode 支持 IRQ 和 DMA 傳輸,默認(rèn)都為 IRQ/DMA 組合傳輸方式:

當(dāng)傳輸長(zhǎng)度 < fifo 深度時(shí),使用 IRQ 傳輸,默認(rèn)使用 4.19 及以上內(nèi)核版本的SOC,fifo 深度為64;

當(dāng)傳輸長(zhǎng)度 >= fifo 深度時(shí),使用DMA傳輸;


(2)修改傳輸模式

master mode支持:

默認(rèn)IRQ/DMA 組合傳輸方式;

參考 ”關(guān)閉 DMA 支持,僅支持 IRQ 傳輸;“ 說(shuō)明,關(guān)閉 DMA,配置后僅支持IRQ 傳輸;

參考”rockchip,poll-only“ 說(shuō)明,配置后僅支持CPU傳輸;

slave mode 不支持修改傳輸模式。


(3)IRQ傳輸特性

當(dāng)數(shù)據(jù) < fifo 深度時(shí),一次傳觸發(fā) 1 個(gè)中斷,當(dāng)數(shù)據(jù) >= fifo 深度且使用 IRQ 傳輸時(shí),fifo 水線設(shè)置為半 fifo,通常為 32 item,一次傳輸大致上觸發(fā) items / 32 次中斷。


(4)DMA 傳輸特性

不觸發(fā) spi 控制器中斷,使用 DMA 傳輸 finished call back 回調(diào)



  • SPI 傳輸速率及 CPU 占用率高優(yōu)化方向

通常 SPI 傳輸速率慢、IO 高負(fù)載下 CPU 占用率高的原因是因?yàn)椋篠PI 傳輸粒度小,且傳輸次數(shù)多,頻繁發(fā)起傳輸從而涉及較多的調(diào)度。建議優(yōu)化方向:

1. 開(kāi)啟 auto runtime,延時(shí)設(shè)置為 500ms,具體值以實(shí)測(cè)為準(zhǔn),修改點(diǎn)為 dts 節(jié)點(diǎn)添加rockchip,autosuspend-delay-ms 屬性;

2. 降低 CPU 負(fù)載:改用 IRQ 傳輸,相對(duì) DMA 可能會(huì)有優(yōu)勢(shì),補(bǔ)丁參考 “改為 IRQ 傳輸” 小節(jié);

3. 降低 CPU 負(fù)載:如為 DMA 傳輸,可修改 TX DMA 水線來(lái)降低 CPU 在 DMA 回調(diào)函數(shù)中等待 fifo傳輸完成的時(shí)間,補(bǔ)丁參考 “修改 SPI 水線。

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

    關(guān)注

    25

    文章

    602

    瀏覽量

    52487
  • 觸覺(jué)智能
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    601
  • RK3506
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    米爾多核異構(gòu)低功耗RK3506核心板重磅發(fā)布

    近日,米爾電子發(fā)布MYC-YR3506核心板開(kāi)發(fā)板,基于國(guó)產(chǎn)新一代入門(mén)級(jí)工業(yè)處理器
    發(fā)表于 05-16 17:20

    米爾基于RK3562與RK3506開(kāi)發(fā)板有什么區(qū)別?

    后可直接在產(chǎn)品中應(yīng)用。 具體來(lái)看,我這款開(kāi)發(fā)板型號(hào)是基于RK3506J,512MB的內(nèi)存和8GB的存儲(chǔ),支持工業(yè)級(jí)寬溫度,此外它還有
    發(fā)表于 07-11 09:32

    RK3506各型號(hào)該怎么選?全新工業(yè)芯片介紹 觸覺(jué)智能出品

    RK3506各型號(hào)該怎么選?全新工業(yè)芯片介紹,還將推出與星閃技術(shù)相結(jié)合的RK3506星閃網(wǎng)關(guān)開(kāi)發(fā)板
    的頭像 發(fā)表于 12-25 10:27 ?1446次閱讀
    <b class='flag-5'>RK3506</b>各型號(hào)該怎么選?<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b>全新工業(yè)芯片介紹 觸覺(jué)智能出品

    RK3506到底有多香?搶先看核心板詳細(xì)參數(shù)配置

    RK3506到底有多香?觸覺(jué)智能已推出RK3506核心板,搶先了解核心板詳細(xì)參數(shù)配置!
    的頭像 發(fā)表于 01-18 11:33 ?1758次閱讀
    <b class='flag-5'>RK3506</b>到底有多香?搶先看<b class='flag-5'>核心板</b>詳細(xì)參數(shù)配置

    性?xún)r(jià)比天花?觸覺(jué)智能發(fā)布RK3506核心板(寬溫級(jí)RK3506 工業(yè)級(jí)RK3506J)

    深圳觸覺(jué)智能SOM3506核心板現(xiàn)已上市,搭載RK3506B/J超低功耗處理器(1.5GH
    的頭像 發(fā)表于 03-07 10:35 ?827次閱讀
    性?xún)r(jià)比天花<b class='flag-5'>板</b>?觸覺(jué)智能發(fā)布<b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>核心板</b>(寬溫級(jí)<b class='flag-5'>RK3506</b> 工業(yè)級(jí)<b class='flag-5'>RK3506</b>J)

    【技術(shù)簡(jiǎn)析】觸覺(jué)智能RK3506 Linux星閃網(wǎng)關(guān)開(kāi)發(fā)板有什么奧妙?

    在工業(yè)智能化與物聯(lián)網(wǎng)深度融合的今天,深圳觸覺(jué)智能推出首款搭載RK3506芯片的Linux星閃網(wǎng)關(guān)開(kāi)發(fā)板,以“多核異構(gòu)架構(gòu)+星閃無(wú)線通信
    的頭像 發(fā)表于 03-21 11:58 ?697次閱讀
    【技術(shù)簡(jiǎn)析】觸覺(jué)智能<b class='flag-5'>RK3506</b> Linux星閃網(wǎng)關(guān)<b class='flag-5'>開(kāi)發(fā)板</b>有什么奧妙?

    觸覺(jué)智能RK3506核心板,工業(yè)應(yīng)用之RK3506 RT-Linux實(shí)時(shí)性測(cè)試

    觸覺(jué)智能RK3506核心板,工業(yè)應(yīng)用方案分享之RT-Linux實(shí)時(shí)性測(cè)試
    的頭像 發(fā)表于 04-27 19:27 ?519次閱讀
    觸覺(jué)智能<b class='flag-5'>RK3506</b><b class='flag-5'>核心板</b>,工業(yè)應(yīng)用之<b class='flag-5'>RK3506</b> RT-Linux實(shí)時(shí)性測(cè)試

    RK3506開(kāi)發(fā)板必備之LVGL應(yīng)用開(kāi)發(fā)手冊(cè),深圳觸覺(jué)智能出品

    SDL送顯。目前RK3506平臺(tái)可支持SDL送顯。本文基于觸覺(jué)智能RK3506星閃開(kāi)發(fā)板進(jìn)行演示,配套RK3506核心板(3核A7@1.5G
    的頭像 發(fā)表于 04-27 19:31 ?454次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>必備之LVGL應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>手冊(cè),深圳觸覺(jué)智能出品

    RK3506開(kāi)發(fā)板之Qt應(yīng)用開(kāi)發(fā)手冊(cè)(上) 深圳觸覺(jué)智能出品,嵌入式方案商

    RK3506開(kāi)發(fā)板必備攻略之Qt應(yīng)用開(kāi)發(fā)手冊(cè)(
    的頭像 發(fā)表于 04-28 17:16 ?583次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>之Qt應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>手冊(cè)(上) 深圳觸覺(jué)智能出品,嵌入式方案商

    RK3506開(kāi)發(fā)板Ethercat主站適配開(kāi)發(fā)詳細(xì)攻略,實(shí)測(cè)微秒級(jí)抖動(dòng)延遲!

    RK3506開(kāi)發(fā)板Ethercat主站適配開(kāi)發(fā)詳細(xì)攻略
    的頭像 發(fā)表于 05-09 15:57 ?781次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>Ethercat主站適配<b class='flag-5'>開(kāi)發(fā)</b>詳細(xì)<b class='flag-5'>攻略</b>,實(shí)測(cè)微秒級(jí)抖動(dòng)延遲!

    米爾基于RK3506核心板開(kāi)發(fā)板

    MYC-YR3506核心板開(kāi)發(fā)板新一代入門(mén)級(jí)國(guó)產(chǎn)工業(yè)處理器RK3506,3核A7+單核M0多核異構(gòu)RK3506B:3*Cortex-A7@
    發(fā)表于 05-15 16:00 ?5次下載

    有獎(jiǎng)丨米爾 RK3506開(kāi)發(fā)板免費(fèi)試用

    米爾與合作發(fā)布的新品基于RK3506應(yīng)用
    的頭像 發(fā)表于 06-19 08:04 ?396次閱讀
    有獎(jiǎng)丨米爾 <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)試用

    RK3506 vs NXP i.MX6ULL

    在關(guān)鍵技術(shù)國(guó)產(chǎn)化浪潮中,國(guó)產(chǎn)芯片正以更高性能、更優(yōu)成本及自主可控優(yōu)勢(shì)實(shí)現(xiàn)對(duì)海外方案的成功替代。今天觸覺(jué)智能拿出自家新品RK3506核心板
    的頭像 發(fā)表于 06-19 16:26 ?464次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b> vs NXP i.MX6ULL

    RK3506開(kāi)發(fā)板必備攻略之Qt應(yīng)用開(kāi)發(fā)手冊(cè)(下),觸覺(jué)智能工控嵌入式方案商

    本文基于觸覺(jué)智能RK3506星閃開(kāi)發(fā)板Buildroot系統(tǒng)進(jìn)行演示,配套RK3506核心板(3核A7+M0多核異構(gòu))寬溫級(jí)59元/工業(yè)級(jí)68元BuildrootSDK安裝與環(huán)境搭建S
    的頭像 發(fā)表于 06-19 17:49 ?276次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>必備<b class='flag-5'>攻略</b>之Qt應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>手冊(cè)(下),觸覺(jué)智能工控嵌入式方案商

    有獎(jiǎng)丨米爾 RK3506開(kāi)發(fā)板免費(fèi)試用來(lái)啦!

    米爾與合作發(fā)布的新品基于RK3506應(yīng)用
    的頭像 發(fā)表于 07-10 08:03 ?177次閱讀
    有獎(jiǎng)丨米爾 <b class='flag-5'>瑞</b><b class='flag-5'>芯</b><b class='flag-5'>微</b><b class='flag-5'>RK3506</b><b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)試用來(lái)啦!