Zephyr的SPI

发布时间:2026/7/12 9:43:39

Zephyr的SPI SPI概述串行外设接口(SPI)是一种短距离串行通信接口它使用高速时钟(与I2C相比)适用于更高的数据速率。SPI接口有多种不同的串行通信变体但四线接口是最流行的一种。这四个信号是:SCLK(串行时钟):用于同步数据传输的时钟信号。MOSI(主出从入):主机发送数据到从机的线路。MISO(主入从出):从机发送数据到主机的线路。CS(片选):用于选择与主机通信的从设备的信号nRF54L的SPI资源SPI设备SPIO0SPI20, SPI21, SPI22SPI30每组SPI都可以配置为SPIM或者SPIS像nRF5352一样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)的空闲状态电平。CPOL0:表示SCK在空闲状态时保持低电平。CPOL1:表示SCK在空闲状态时保持高电平。CPHA决定了数据在SCK的哪个边沿被采样。CPHA0:表示数据在SCK的第一个跳变沿被采样。CPHA1:表示数据在SCK的第二个跳变沿被采样。CPOL和CPHA的组合产生了四种SPI模式例如模式2CPOL1CPHAO.SCK空闲状态为高电平.数据在SCK的下降沿被采样SPI配置片选极性CSNPOLO低电平有效CSNPOL1高电平有效位序MsbFirst最高位会在传输过程中最先被发送出去LsbFirset最低位会在传输过程中最先被发送出去ORC(Over-read Character)在接收数据时如果主设备(SPIMaster)发送的数据比预期的多ORC就会填充这些额外的字节SPI的管脚使用以及时钟配置SPI20/21使用P2的属于跨域SPI 时钟软件限制SPI设备片选管脚的使用SPIM片选信号在zephyr SPI中使用软件片选也就是只要这个管脚只要具有GPIO功能就可以因此可以使用本域以外的管脚。如果SPIM需要使用硬件片选那么也要遵循上面表格的要求并且需要直接使用nrfx_spim驱动并要使能NRFX_SPIM_EXTENDED_ENABLEDSPIS片选不能使用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.cZephyr/drivers/spi/spi_nrfx_spis.c使用步骤Kconfig设置(Prj.conf)配置设备树调用SPIAPI控制SPI设备配置文件在prj.conf加入CONFIG_SPIy如何需要支持异步API还要加入CONFIG_SPI_AYNCySPI M驱动设备树的配置:设备定义和配置

相关新闻