SPI硬件知识
硬件连线
上图由三块硬件组成,左边是MCU主控制器,右边是SPI flash设备以及SPI OLED设备。右图是哪些设备和多少设备不重要,主要是为了介绍SPI协议中,设备的物理连接方式和通讯方式。
四根物理线:
- SCK:Serial Clock,时钟信号,由主机产生发送给从机。
- MOSI:Master Output Slave Input,主机输出信号线,从机接收数据。
- MISO:Master Input Slave Output,主机输入信号线,从机输出数据。
- CS:Chip Select,片选信号,由主机发送,控制与哪一个从机进行数据通讯,一般是低电平有效。
其中三根SCK,MOSI,MISO是公用的线,CS负责主机控制与哪一个从机进行通讯。
时钟信号
相比较UART的通讯方式,SPI是一个同步的数据总线。途中可以看到它有一根SCK的时钟信号和各个硬件模块相连,为了保证发送端和接收端的同步,告诉这根线上的设备,“我要开始同步(发送或接收)数据了”。一般产生时钟信号的称作主机,基本由主控制器产生,多个从机负责接收时钟信号。
SPI数据的传输速率由波特率寄存器来控制,最大传输速率由主控制器总线上的时钟频率来决定。
极性与相位
SPI的数据采集时机为边沿触发,即上升沿或者下降沿。这里由时钟极性(CPOL)和时钟相位(CPHA)两个变量来控制。
CPOL:表示SCK的初始电平,0为低电平,1为高电平。
CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿。
CPOL | CPHA | 模式 | 含义 |
---|---|---|---|
0 | 0 | 0 | SCLK初始电平为低电平,在第一个时钟沿采样数据 |
0 | 1 | 1 | SCLK初始电平为低电平,在第二个时钟沿采样数据 |
1 | 0 | 2 | SCLK初始电平为高电平,在第一个时钟沿采样数据 |
1 | 1 | 3 | SCLK初始电平为高电平,在第二个时钟沿采样数据 |
以上图为例,数据采集信号的时刻是时钟第二个边沿(上升沿),即CPHA为1,同时因为SCLK的初始电平为高电平,所以CPOL为1.
数据传输
假设现在主控芯片需要传输一个0x56的数据给SPI flash,时序如下图所示:
0x56的二进制也就是 0101 0110,最高位MSB为0,LSB为0,数据传输的方向是从MSB最高位到最低位LSB一位一位的移动进入SPI 的data register。