SPI通信协议详解

一,SPI的简介

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如MSP430单片机系列处理器。

二,SPI的物理层

1.多CS

 SCK:时钟线                                         CS:片选信号

MOSI:主机把向从机写入数据               MISO:主机从从机读取数据

CS:片选信号线,当有多少个从设备,就会有多少个外接线。当从设备的片选拉低的时候,就选中和主设备进行通讯,而其余的设备未被选中则会忽视总线数据上的传输。

SCK:时钟线,用于数据同步,由主机进行发送,决定的数据传输的速度。STM32的SPI的最大速率为fpclk/2。多个设备同时进行通讯的过程,速度受限于低速设备。

MOSI:主设备的输出引脚,从设备的输入引脚。【主设备输出数据,从设备接受数据】

MISO:主设备的输入引脚,从设备的输出引脚。【主设备输入数据,从设备输出数据】

2.菊花链

信号会通过将移位寄存器的数据通过MOSI输出,然后通过MOSI-1引脚进入从机1,在第二个数据命令周期,数据会通过从机1的MISO-1引脚将移位寄存器的数据传入到从机2里面,此时从机1便可以同时的接受来自主机的新命令,以此类推。当三个从机都收到了彼此需要的命令的时候,当检测到CS的上升沿信号,此时对应的从器件会执行自己移位寄存器里面的命令。当片选拉低时,命令不会执行,这就使得我们可以不断的通过一个一个的设备传递命令,直到到达我们需要执行该命令的从器件,去执行命令。

三,SPI的协议层

1.起始信号和终止信号

起始信号:CS片选信号高电平变为低电平,当从机检测到自己的片选拉低后,开始与主机进行通信。

终止信号:CS信号由低电平变为高电平,结束和主机之间的通讯,本次数据交互结束。

2.数据的有效性

数据借助MOSI和MISO进行传输,通过SCK时钟线进行数据的同步传输,数据在每一个SCK时钟周期传输一位数据。数据的输入和输出是同时进行的,发送一个数据也就会接受一个数据。在进行双向通信的时候,一边采用的是“MSB先行”。

3.时钟的相位和极性

SPI_CR寄存器的时钟和极性,出现了四种组合形式。

时钟极性【CPOL】:控制的是设备在空闲状态下的电平状态

CPOL为1:空闲状态为高电平           CPOL为0:空闲状态为低电平

时钟相位【CPHA】:控制采样信号的边沿

CPHA = 1:在SCK时钟的第二个边沿进行采样,同时数据要保持稳定,与此同时,则在第一个边沿进行数据的转换,准备下一次的数据传输。

CPHA = 0:在SCK时钟的第一个边沿进行采样,同时数据要保持稳定,与此同时,则在第二个边沿进行数据的转换,准备下一次的数据传输。

  四种组合: 

空闲状态为低电平:

CPOL= 0,CPHA = 0  在第一个上升沿采集信号

CPOL = 0,CPHA = 1 在第一个下降沿采集信号

空闲状态为高电平:

CPOL = 1,CPHA = 0 在第一个下降沿采集信号

CPOL = 1,CPHA = 1 在第一个上升沿采集信号

4.外设速率

stm32的SPI外设的速率为fpclk/2。

SPI1挂在在APB2总线上,速率为fpclk2/2 = 36Mbits/s。

SPI2挂在在APB1总线上,速率为fpclk1/2 = 18Mbits/s

5.数据的发送控制

不管是发送还是接收,数据都先会被存放在一个缓存器当中,发送时,先把数据放在发送缓存器中,再发送,接收时,先接收到接收缓存器,再被从设备接收。

 不难看出,每次发送一个字节数据,同时也要接收一个字节数据,同步完成。时钟信号由主设备发出。

移位寄存器通过MOSI线将数据传输给从机,从机也通过将移位寄存器的数据通过MISO传输给主机当主机只读取一个从机的字节的时候,也需要向从机发送一个空字节,但是从机可以忽略这个字节,同理,从机只读取主机的一个数据,也需要向主机发送一个空子节,但是主机可以忽略掉。

发送时:当数据被写入到SPI_DR【发送缓存器】,数据被并行的传送到移位寄存器,然后串行的被移位到MOSI引脚。

接收时:当数据从MISO引脚接收到后,然后串行移位到移位寄存器,数据再从移位寄存器并行的移动到SPI_DR【接收缓存器】。

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜路难行々

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值