SPI通信

物理层

SPI总线是一种高速的同步全双工总线,支持一主多从的模式,一个SPI总线有四个信号线,分别是SCK时钟线,MOSI主机信号输出线,MISO从机信号输出线,CN/NSS从机使能信号线,一个从机对应一个CN/NSS。

协议层

除从机信号输出线之外,其他的信号线均由主机进行控制,其中,MOSI和MSIO线上的数据仅仅只在NSS为低的时候有效。

NSS线由主机控制,空闲的时候置位高电平,而起始信号为低电平,每一个时钟周期内进行一个数据的采样操作。时钟线的上升沿或者下降沿会引发触发或者采样工作,确保在信号线稳定的时候采取数据。通过配置CPOL或者CPHA可以来实现四种采样模式的配置。

1.CPOL=1时,SCK在空闲状态保持低电平

2.CPOL=2时,SCK在空闲状态保持高电平

  1. CPHA=0时,在SCK的第一个沿进行采样

  1. CPHA=1时,在sck的第二个沿进行采样

在一个SCK周期内,主从机会分别读取一位数据同时发送一位数据。发送和接受数据通过移位寄存器来实现,数据依次按照从低位到高位的顺序进行交换。

STM32的SPI外设

开启或者关闭SPI通信可以用软件进行管理或者硬件进行管理。通过设置SPI_CR1寄存器的SSM位可以使能软件触发,此时NSS引脚的电平可以由SSI位控制。通过SPI_CR2寄存器的SSOE位控制硬件使能模式,当他拉低NSS引脚的时候代表他将作为主机进行通信。

可以发送8位或者16位的信号,由SPI_CR1寄存器的DFF位进行选择。主机从机的SPI设置需要保持一致。

配置SPI为从模式

配置步骤

1. 设置DFF位以定义数据帧格式为8位或16位。

2. 选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系(见图212)。为保证正确

的数据传输,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。

3. 帧格式(SPI_CR1寄存器中的LSBFIRST位定义的”MSB在前”还是”LSB在前”)必须与主设备

相同。

4. 硬件模式下(参考从选择(NSS)脚管理部分),在完整的数据帧(8位或16位)传输过程中,

NSS引脚必须为低电平。在NSS软件模式下,设置SPI_CR1寄存器中的SSM位并清除SSI

位。

5. 清除MSTR位、设置SPE位(SPI_CR1寄存器),使相应引脚工作于SPI模式下。

在这个配置中, MOSI引脚是数据输入, MISO引脚是数据输出

写数据时,写入数据到发送缓冲器后,开始发送,将整个数据传入移位寄存器,将TXE标志置位,可以产生中断,之后逐位传输。

读数据的时候,数据一位一位进入移位寄存器,数据接收完全之后移动到接收缓存器,将RXNE标志置位,可以产生中断。读SPI_DR寄存器时,SPI返回缓存的数据。

试图写发送缓存器的时候,需要确认TXE标志位为1.

应用程序通过3个状态标志可以完全监控SPI总线的状态。

发送缓冲器空闲标志(TXE)

此标志为’1’时表明发送缓冲器为空,可以写下一个待发送的数据进入缓冲器中。当写入SPI_DR

时, TXE标志被清除。

接收缓冲器非空(RXNE)

此标志为’1’时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清除此标志。

(Busy)标志

BSY标志由硬件设置与清除(写入此位无效果),此标志表明SPI通信层的状态。

小马哥四轴学习平台SPI的应用代码举例说明

dragon fly四轴平台使用SIR2401作为2.4G无线通信模块。

初始化代码,如果选择使用硬件控制SPI,需要调用SPI_SSOutputCmd(SPI2,ENABLE),软件控制则不需要。

读写信息

使用SIR2401的时候需要吧NRF_CE引脚置高电平,不工作的时候置低电平。接受数据完成之后,NRF_IRQ引脚会有电平的变化。

包控制字的长度为9bit,数据包长度6bit,PID 1bit,NO_ACK 1bit

pid告诉接收端是新的包还是重发的包,自动累加。

、NO——ACK为1时,不需要回执。需要先配置FEATURE寄存器中EN_DYN_ACK位为1,且使用W_TX_PAYLOAD_NACK命令写fifo。

负载数据最高32字节

SPI的时钟空闲状态为低电平,CPOL=1,在第一个时钟沿进行采集,CPHA=0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值