type
status
date
slug
category
tags
icon
password
summary
SPI硬件上一般有4根线:
  • CS,片选信号线,可以有多个,一般低电平有效
  • MOSI,主机输出,从机输入线
  • MISO,主机输入,从机输出线
  • SCLK,时钟线
 
基本的核心内容就是两个移位寄存器,主机移出的高位数据到达从机移位寄存器的低位,从机的溢出高位数据到达主机的移位寄存器的低位。假设主机和从机的移位寄存器长度都是8位,那么经过8次移位之后,主机和从机就交换了一个字节。
 SPI协议的移位寄存器,图片来源:江协科技
SPI协议的移位寄存器,图片来源:江协科技
SPI协议根据时钟的极性相位可以分为4种模式。
所谓极性(CPOL),就是时钟线在空闲的时候的电平状态,也可以理解为时钟线初始时候的电平状态。有0和1两种选择。
所谓相位(CPHA),就是决定信号采样的时刻(或者发送的时刻)。
  • CPHA=0,在第一个边沿采样,在第二个边沿发送数据
  • CPHA=1,在第二个边沿采样,在第一个边沿发送数据
极性和相位的两两组合就有4种SPI模式,在配置SPI的时候需要指定模式,但一般具体的模式依赖于从机。
 
需要注意的是,在配置SPI的时候,如果是硬件SPI,那么CPOL和CPHA都可以在官方提供的库函数中配置,配置好之后就只需要收发数据即可。如果是软件SPI,可以配置的项就只有CPOL了,也就是时钟线的初始状态,至于相位则需要在发送数据和接收数据的时候按照指定的模式手动拉高和拉低。
因为相位是决定在哪个边沿采样和发送数据,而使用软件SPI的时候,数据的发送和采样(接收)是由我们通过手动读写IO实现的,时钟线的电平高低也是有我们操作IO实现的,那么配置不同的相位就取决于我们是先写MOSI的IO然后再变换时钟线,还是先读MISO的IO再变换时钟线了。

参考资料

  1. 江协科技:SPI通信协议
  1. SPI简介(ADI论坛)
 
随手拍Base64编码
ycloong
ycloong
要做一个苦行僧,探索自己的人生道路