SPI
简介
SPI即Serial Peripheral Interface,是由摩托罗拉首先定义的。
SPI是一种高速、全双工、同步的总线通信协议。占用四根线分别是:CS,MOSI,MISO和SCK。大多时候是一些FLASH、AD转换等等芯片时常用。
主从模式
SPI分为主从机,主机即Master,从机即Slave。在一个系统里,也就是一条总线上,只能有一个主机,主机提供SCK时钟。当存在多个从机时,由片选信号来进行管理,选择和哪个从设备通信。
设备选择
在一对多的总线情况下,SPI总线靠CS也就是片选引脚(低电平有效)来选择设备。当主设备想读/写,需要先拉低相应设备的CS脚。接着发送工作脉冲到时钟线上,在时钟脉冲上,进行读写操作。
数据发送和接收
- 首先拉低对应的片选引脚,来选择设备
- 主机发送SCK时钟信号,高低电平和SPI的模式有关
- 主机将要发送的数据放到 数据缓冲区,通过移位寄存器,通过MOSI将字节一位一位的传出去,同时从机经过移位寄存器,一位一位的放到接收缓冲区上。
要注意的点: SPI设备之间不管主从,都是属于数据交换。所以首先是Master设备通过CS片选选择上Slave设备。然后在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样,否则有可能数据被丢弃。所以一般在SPI传输完数据后,去读取SPI设备里的数据,即使对我们没用,也要在寄存器里读出来。
SPI极性和相位
CPOL配置SPI总线极性
CPHA配置SPI总线相位
极性
SPI极性影响的是SPI总线空闲时 时钟信号是高电平还是低电平,其中
- CPOL = 1 空闲时是高电平
- CPOL = 0 空闲时是低电平
因为数据传输往往是从跳变沿开始的,也就是表示数据传输的时候,是下降沿还是上升沿。 当CPOL等于1时,空闲是高电平,那么在第一个下降沿的时候,表示数据开始,反则...
相位
一个时钟周期会有两个跳变,而相位就是表示SPI从哪个跳变开始采样数据。
- CPHA = 0 表示从第一个跳变沿开始
- CPHA = 1 表示从第二个跳变沿开始
所以排列出了四个模式: 就举个例子,不全写了:比如CPOL = 1 CPHA = 0: 说明,空闲电平是高电平,时钟信 号过来第一个跳变是从高到低,CPHA又是0,也就是从第一个跳变开始