SPI 背景知识
SPI(Serial Peripheral interface)是串行外设接口,是一种高速,全双工,同步的通信总线。是Motorola
首先在其MC68HCXX系列处理器上首次定义的
SPI 特征
全双工串行通信
高速数据传输速率
数据传输不限于8位,可以是任意大小的字节
非常简单的硬件结构,从机不需要唯一地址(与IIC不同)。从机使用主机时钟,
不需要精密的时钟振荡器(与UART不同)
SPI 总线的物理层
SPI是一个同步的数据总线,也就是说它采用单独的数据线和单独的时钟信号来保证发送端和接收端的同步。时钟是一个震荡信号,接收端在确切的时候对数据线上的信号进行采样
SS:片选引脚,SPI工作时片选引脚拉低,表示通信开始
SLK:时钟信号,由主机发送
MOSI:Mater Output Slave Input 主机发送数据从机接收数据
MISO:Mater Input Slave Output 主机接收数据从机发送数据
注:主机在同一时刻只能与一台从机进行通信
SPI时序图
注:
CPOL:时钟极性选择,为0时SPI总线空闲时,时钟线为低电平;为1时SPI总线空闲时,
时钟线为高电平
CPHA:时钟相位选择,为0时在SCLK在第一跳变沿,主机对MOSI采样,在第二跳变沿
从机对MOSI采样。为1时在SCLK在第一跳变沿,从机对MOSI采样,在第二跳变沿,
主机对MOSI采样。
在项目开发中,用的比较多的是模式0(MFRC)和模式3(SPI FLASH)
模式3
模式3
SPI FLASH时序图
SPI FLASH读取ID:
从时序图可以看出,SPI开始工作时,主机首先发送0x90命令,再发送24位地址,该地址全为零
随后接收到的第一个八位数据围为厂商id,第二个数据为设备id
SPI FLASH写使能/写失能:发送0x06,解除写保护,发送0x40,添加写保护
SPI读取busy位状态寄存器值:
发送0x05命令,接收到的数据,取其最低位既为状态寄存器数值
SPI FLASH页写入:
进行写使能,发送0x20命令,发送24位地址,发送数据,最多发送256个字节等待状态寄存器清零,结束通信。进行写使能前,必须保证该扇区被擦除过。
SPI 页擦除:
计算扇区首地址,发送24位地址,等待状态寄存器清零: