Zephyr的SPI
2026/7/12 9:43:35 网站建设 项目流程

SPI概述

串行外设接口(SPI)是一种短距离串行通信接口,它使用高速时钟(与I2C相比),适用于更高的数据速率。SPI接口有多种不同的串行通信变体,但四线接口是最流行的一种。这四个信号是:

  • SCLK(串行时钟):用于同步数据传输的时钟信号。
  • MOSI(主出从入):主机发送数据到从机的线路。
  • MISO(主入从出):从机发送数据到主机的线路。
  • CS(片选):用于选择与主机通信的从设备的信号

nRF54L的SPI资源

  • SPI设备
    SPIO0
    SPI20, SPI21, SPI22
    SPI30
  • 每组SPI都可以配置为SPIM或者SPIS
  • 像nRF53,52一样,SPI外设与具有相同ID的其他外设共享寄存器和其他资源。

SPIM设备

  • EasyDMA直接传输到RAM和从RAM传输
  • SPI模式 [0…3】
  • 独立选择1/O引脚

SPIS设备

  • EasyDMA直接传输到RAM和从RAM传输
  • SPI模式[0…3】
  • 独立选择1/O引脚
  • 基于硬件的信号量:机制,用于SPIS和CPU之间同步访问数据缓冲区

SPI 模式

  • SPI模式[0-3]
    • CPOL决定了SPI时钟信号(SCK)的空闲状态电平。
      CPOL=0:表示SCK在空闲状态时保持低电平。
      CPOL=1:表示SCK在空闲状态时保持高电平。
    • CPHA决定了数据在SCK的哪个边沿被采样。
      CPHA=0:表示数据在SCK的第一个跳变沿被采样。
      CPHA=1:表示数据在SCK的第二个跳变沿被采样。
  • CPOL和CPHA的组合产生了四种SPI模式
    例如模式2,CPOL=1CPHA=O.SCK空闲状态为高电平.数据在SCK的下降沿被采样

SPI配置

  • 片选极性
    CSNPOL=O,低电平有效
    CSNPOL=1,高电平有效
  • 位序
    MsbFirst最高位会在传输过程中最先被发送出去
    LsbFirset最低位会在传输过程中最先被发送出去
  • ORC(Over-read Character)
    在接收数据时,如果主设备(SPIMaster)发送的数据比预期的多,ORC就会填充这些额外的字节

SPI的管脚使用以及时钟配置


SPI20/21使用P2的属于跨域

SPI 时钟软件限制



SPI设备片选管脚的使用

  • SPIM片选信号在zephyr SPI中使用软件片选,也就是只要这个管脚只要具有GPIO功能就可以,因此可以使用本域以外的管脚。
  • 如果SPIM需要使用硬件片选,那么也要遵循上面表格的要求,并且需要直接使用nrfx_spim驱动,并要使能NRFX_SPIM_EXTENDED_ENABLED
  • SPIS片选不能使用GPIO,只能是硬件片选。

SPI管脚使用的其他注意事项

  • SPISCK管脚需要使用时钟脚,关于哪些脚是时钟脚请参照规格书Pin assignments章节
  • 虽然SPI20/21可以跨域使用GPIO2的专用管脚,但不是最节能的方式。跨域使用SPI20/21管脚时使用EngineeringB芯片时可能会有传输失败的问题,这时可以加入下面代码nrfx_power_constlat_mode_request()临时测试。加入这个代码功耗会有上升。(正式量产芯片要去掉这条代码!),这个问题已经在Revision1中修复了。(errata[38])

errata[32],对于CSP封装的Engineering B芯片,P1.09-P1.12由于辐射问题需:
串联一个3300或更大的串联电阻
尽可能保持PCB导线短且位于接地层之间
使用低于1MHz的切换速度

Zephyr SPi驱动

  • Zephyr 使用设备模型来管理硬件设备,包括SPI控制器。每个SPI控制器在系统中都被表示为一个设备对象。
    (设备模型 Academy Intermediate:Lesson 7- Device driver model)
  • 每个SPI控制器和SPI设备在系统中都表示为一个struct device 对象。这个对象包含了设备的配置信息和操作函数

Zephyr SPi驱动

  • Zephyr 的SPI驱动支持nRF54L的SPIM和 SPIS 设备
  • 代码实现
    Zephyr/drivers/spi/spi_nrfx_spim.c
    Zephyr/drivers/spi/spi_nrfx_spis.c
  • 使用步骤
    Kconfig设置(Prj.conf)
    配置设备树
    调用SPIAPI控制SPI设备

配置文件

在prj.conf加入CONFIG_SPI=y
如何需要支持异步API,还要加入
CONFIG_SPI_AYNC=y

SPI M驱动

设备树的配置:

设备定义和配置

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询