0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞芯微RK3506核心板/开发板SPI Slave从设备开发攻略

触觉智能 2025-06-26 11:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

内核SPI Slave软件简介

SPI主从之间传输通常遵循特定协议,如SPI Nor 兼容 JEDEC SDFP 协议,瑞芯微RK SPI slave 作为设备端传输也应遵循特定的协议,由于协议无范式,所以RK提供自定义的传输协议和设备驱动以供客户参考。

Linux SPI slave驱动框架限制:使用传输队列,虽然队列唤醒后的线程优先级较高,但受调度影响不能完全保证实时性。

瑞芯微RK SPI slavemode限制:每次传输需重新发起SPI控制器配置,因此为确保SPImaster能够获知RK SPI slave完成传输配置从而发起数据传输,RKSPIslave端需增加side-band信号做ready状态位。

本文基于

触觉智能RK3506星闪开发板

演示SPI Slave从设备开发,其配套RK3506核心板(3核A7+M0多核异构),100%全国产,峰值功耗低至0.65W。

瑞芯微RK SPI slave 传输协议


  • RK SPI Slave 传输基本流程

数据传输要求指定ready-gpios来通知SPI master分为5个部分:

(1)Slave 主动发起 spi_syncstep(2)Slave ready,使能 GPIO_SlV_READY 信号(3)master 确认 Slave ready 后发起传输(4)Slave 接收来自 master 发出的足够的 clk 后完成传输(5)Slave idle,释放 GPIO_SlV_READY 信号

wKgZPGhcwAOAcdgyAAEMUJS08yo074.png


  • 定义两种包类型

包括ctrl packet:2B cmd,2B addr(RK slave 定义的 application buffer 偏移地址),4B data(通常用于指定之后 data 包的传输长度)和data packet。


  • 定义两种传输类型

ctrl 传输(仅包含 1 ctrl packet),以及data 传输(包含1 ctrl packet 和 1 data packet 的两笔 SPI 传输)。


  • spidev_rkslv 支持 SPI_OBJ_APP_RAM_SIZE 长度的 application buffer 用于缓存传输数据,SPI master发起的 data 传输 1 ctrl packet 2B addr 指向该缓存偏移地址
  • 设备驱动

驱动源码:

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


源码简介:

static int spidev_rkslv_ctrl_receiver_thread(void *p) //建立线 程,线程内重复发起传输 { while (1) spidev_rkslv_xfer(spidev); drivers/spi/spidev-rkmst.c: 实现业务 } static int spidev_rkslv_xfer(struct spidev_rkslv_data *spidev) //传输入口 { spidev_slv_read(spidev, spidev->ctrlbuf, SPI_OBJ_CTRL_MSG_SIZE); //1 ctrl packet,获取并解析传输类型 switch (ctrl->cmd) { //1 data packet,根据传输类型,定义 data packet 并完成收发 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 = {} //注册 misc device 测试接口


drivers/spi/spidev-rkmst.c说明:

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,定义传输类型 switch (cmd) { //1 data packet,根据传输类型,定义 data packet 并完成收发 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 = {} //注册 misc device 测试接口


  • 业务实现形式
wKgZPGhcwCqADNV2AAGkpvG_PAA508.png

SPI Slave 测试设备配置


  • SPI master 发起单包数据传输测 :

echocmd addr length > /dev/spidev_rkmst_misc

说明:cmd :支持 read/write/duplex;addr:为对端 slave application buffer 偏移,单位 Bytes,仅支持 10 进制输入;length:为 data packet 长度,单位 Bytes,仅支持 10 进制输入;

实例如下:

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 发起自动化测试 :

echoautotest length loops compare > /dev/spidev_rkmst_misc

说明:autotest:固定输入,先测试全双工数据传输,再测试读写数据传输,并输出速率结果;测试默认使用对端 slave application buffer 偏移地址 0;

length:为 data packet 长度,单位 Bytes,仅支持 10 进制输入;loops:设定压测循环次数;

compare:1 - 开启数据校验;0 - 关闭数据校验(支持特定场景,如持续输出数据进行信号测试);

实例如下:

echoautotest1024641> /dev/spidev_rkmst_misc

  • SPI master 发起自动化测试 :

echo appmem 0 256 > ./dev/spidev_rkslv_misc #打印 application buffer 数据 echo verbose 1 > ./dev/spidev_rkslv_misc #开启传输传输过程 debug log,echo verbose 0 关闭打印

SPI Slave常见问题

  • SPI 无信号

调试前确认驱动有跑起来;确保 SPI 4个引脚的IOMUX配置无误;

确认TX 引脚有正常的波形,CLK有正常的 CLOCK 信号,CS信号有拉低;

如果clk频率较高,可以考虑提高驱动强度来改善信号;

如何简单判断SPI DMA 是否使能,串口打印如无以下关键字,则DMA 使能成功:

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


  • 延时采样时钟配置方案

对于 SPI io 速率较高的情形,正常 SPI mode 可能依旧无法匹配外接器件输出延时,RK SPI master read 可能无法采到有效数据,需要启用 SPI rsd 逻辑来延迟采样时钟。


  • SPI 传输方式说明

(1)默认传输模式

master mode 支持 IRQ、DMA 和 CPU 传输,slave mode 支持 IRQ 和 DMA 传输,默认都为 IRQ/DMA 组合传输方式:

当传输长度 < fifo 深度时,使用 IRQ 传输,默认使用 4.19 及以上内核版本的SOC,fifo 深度为64;

当传输长度 >= fifo 深度时,使用DMA传输;


(2)修改传输模式

master mode支持:

默认IRQ/DMA 组合传输方式;

参考 ”关闭 DMA 支持,仅支持 IRQ 传输;“ 说明,关闭 DMA,配置后仅支持IRQ 传输;

参考”rockchip,poll-only“ 说明,配置后仅支持CPU传输;

slave mode 不支持修改传输模式。


(3)IRQ传输特性

当数据 < fifo 深度时,一次传触发 1 个中断,当数据 >= fifo 深度且使用 IRQ 传输时,fifo 水线设置为半 fifo,通常为 32 item,一次传输大致上触发 items / 32 次中断。


(4)DMA 传输特性

不触发 spi 控制器中断,使用 DMA 传输 finished call back 回调



  • SPI 传输速率及 CPU 占用率高优化方向

通常 SPI 传输速率慢、IO 高负载下 CPU 占用率高的原因是因为:SPI 传输粒度小,且传输次数多,频繁发起传输从而涉及较多的调度。建议优化方向:

1. 开启 auto runtime,延时设置为 500ms,具体值以实测为准,修改点为 dts 节点添加rockchip,autosuspend-delay-ms 属性;

2. 降低 CPU 负载:改用 IRQ 传输,相对 DMA 可能会有优势,补丁参考 “改为 IRQ 传输” 小节;

3. 降低 CPU 负载:如为 DMA 传输,可修改 TX DMA 水线来降低 CPU 在 DMA 回调函数中等待 fifo传输完成的时间,补丁参考 “修改 SPI 水线。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 瑞芯微
    +关注

    关注

    27

    文章

    700

    浏览量

    53512
  • 触觉智能
    +关注

    关注

    1

    文章

    62

    浏览量

    822
  • RK3506
    +关注

    关注

    0

    文章

    82

    浏览量

    739
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    米尔多核异构低功耗RK3506核心板重磅发布

    近日,米尔电子发布MYC-YR3506核心板开发板,基于国产新一代入门级工业处理器
    发表于 05-16 17:20

    米尔基于RK3562与RK3506开发板有什么区别?

    后可直接在产品中应用。 具体来看,我这款开发板型号是基于RK3506J,512MB的内存和8GB的存储,支持工业级宽温度,此外它还有
    发表于 07-11 09:32

    RK3506到底有多香?抢先看核心板详细参数配置

    RK3506到底有多香?触觉智能已推出RK3506核心板,抢先了解核心板详细参数配置!
    的头像 发表于 01-18 11:33 3212次阅读
    <b class='flag-5'>RK3506</b>到底有多香?抢先看<b class='flag-5'>核心板</b>详细参数配置

    RK3506开发板必备之LVGL应用开发手册,深圳触觉智能出品

    SDL送显。目前RK3506平台可支持SDL送显。本文基于触觉智能RK3506星闪开发板进行演示,配套RK3506核心板(3核A7@1.5G
    的头像 发表于 04-27 19:31 1193次阅读
    <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>必备之LVGL应用<b class='flag-5'>开发</b>手册,深圳触觉智能出品

    RK3506开发板之Qt应用开发手册(上) 深圳触觉智能出品,嵌入式方案商

    RK3506开发板必备攻略之Qt应用开发手册(
    的头像 发表于 04-28 17:16 1192次阅读
    <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>之Qt应用<b class='flag-5'>开发</b>手册(上) 深圳触觉智能出品,嵌入式方案商

    RK3506开发板Ethercat主站适配开发详细攻略,实测微秒级抖动延迟!

    RK3506开发板Ethercat主站适配开发详细攻略
    的头像 发表于 05-09 15:57 1389次阅读
    <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>Ethercat主站适配<b class='flag-5'>开发</b>详细<b class='flag-5'>攻略</b>,实测微秒级抖动延迟!

    米尔基于RK3506核心板开发板

    MYC-YR3506核心板开发板新一代入门级国产工业处理器RK3506,3核A7+单核M0多核异构RK3506B:3*Cortex-A7@
    发表于 05-15 16:00 10次下载

    有奖丨米尔 RK3506开发板免费试用

    米尔与合作发布的新品基于RK3506应用
    的头像 发表于 06-19 08:04 863次阅读
    有奖丨米尔 <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>免费试用

    RK3506开发板必备攻略之Qt应用开发手册(下),触觉智能工控嵌入式方案商

    本文基于触觉智能RK3506星闪开发板Buildroot系统进行演示,配套RK3506核心板(3核A7+M0多核异构)宽温级59元/工业级68元BuildrootSDK安装与环境搭建S
    的头像 发表于 06-19 17:49 751次阅读
    <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>必备<b class='flag-5'>攻略</b>之Qt应用<b class='flag-5'>开发</b>手册(下),触觉智能工控嵌入式方案商

    有奖丨米尔 RK3506开发板免费试用来啦!

    米尔与合作发布的新品基于RK3506应用
    的头像 发表于 07-10 08:03 657次阅读
    有奖丨米尔 <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>免费试用来啦!

    触觉智能RK3506开发板通过OpenHarmony 5.1 XTS认证,引领鸿蒙开发新标杆!

    触觉智能作为专业方案商与开源鸿蒙南向硬件厂家,旗下RK3506开发板及其核心板(模组)通过
    的头像 发表于 08-14 23:49 1378次阅读
    触觉智能<b class='flag-5'>RK3506</b><b class='flag-5'>开发板</b>通过OpenHarmony 5.1 XTS认证,引领鸿蒙<b class='flag-5'>开发</b>新标杆!

    RK3506开发板Linux开发板极致性价比之选

    RK3506开发板Linux开发板极致性价比之选RK3
    的头像 发表于 09-11 16:26 2826次阅读
    <b class='flag-5'>RK3506</b><b class='flag-5'>开发板</b>Linux<b class='flag-5'>开发板</b>极致性价比之选

    RK3506核心板/开发板DSM音频开发实战,关键知识点与实操案例必看攻略

    本文基于触觉智能RK3506核心板/开发板,介绍DSM音频功能使用攻略。如需购买开发板可某宝搜索深圳触觉智能DSM简介DSMDSM(Delt
    的头像 发表于 09-30 17:41 2196次阅读
    <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>/<b class='flag-5'>开发板</b>DSM音频<b class='flag-5'>开发</b>实战,关键知识点与实操案例必看<b class='flag-5'>攻略</b>!

    2025开发者大会万象奥科展出RK3506邮票孔核心板

    2025开发者大会万象奥科展出RK3506邮票孔核心板2025年7月17-18日,第九届
    的头像 发表于 10-10 14:10 1294次阅读
    2025<b class='flag-5'>瑞</b><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>

    RK3506核心板/开发板SARADC模拟采集实战,软硬件实操必看攻略

    本文基于触觉智能RK3506核心板/开发板,介绍SARADC采集模拟信号使用攻略,包括硬件、驱动层的修改。
    的头像 发表于 10-30 11:58 314次阅读
    <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>/<b class='flag-5'>开发板</b>SARADC模拟采集实战,软硬件实操必看<b class='flag-5'>攻略</b>!