江科大stm32 P11. SPI通信协议
SPI相对I2C的优缺点
1. 速度更快,SPI协议没有严格规定最大传输速率,取决于芯片厂商的设计需求(I2C用功能换性能)
2. 设计简单,实现功能没有I2C那么多,学习起来简单
3. 没有上升沿缓慢的情况
4. SPI硬件开销比较大,通信线的个数比较多,通信过程中会有资源浪费的情况(只发送,只接收时)
SPI通信简介
SS用来指定从机,一个从机一条,低电寻址
SPI没有应答机制
SPI硬件电路
- SCK完全由主机掌控,主机输出,从机输入
- SPI是单端,需要共地,从机没有电源的话还要接VCC
- SS线低电平有效,主机初始化后所有的SS都输出高电平
- SS输出高电平结束通信
- 同一时间主机只能选择一个从机
- 推挽输出使得SPI引脚信号上升沿和下降沿十分迅速,不像I2C上升沿缓慢
SPI的冲突点
多个从机输出共享一个主机输入,它们都为推挽输出,容易出现问题
所以SPI规定,当从机的SS为高电平时它的MISO(输出)引脚必须切换为高阻态(相当于引脚断开,不输入任何电平)
这个程序一般写在从机里,主机不用管
SPI移位示意图
波特率发生器输送到移位寄存器即为时钟输入端,每来一个时钟上升沿,主机从机寄存器向左移位(高位先行)移出的位放在引脚上。
时钟下降沿, 引脚上的位采样输入到移位寄存器最低位
此时MOSI是高电平
MISO是低电平
八个时钟主机和从机完成数据交换,所以SPI的数据收发都是基于字节交换
只发送时,忽略掉收到的数据就行
发送时,随便发但一般法0x00或0xff
SPI基本时序单元
CPOL(Clock Polarity)时钟极性
CPHA(Clock Phase)时钟相位
模式0 数据移出对齐ss下降沿,模式0用的更多
在第一个边沿之前就要移出数据,可以看出,在SS下降沿时主从机就将数据移出了。
SPI指令集模型
spi通信通常指令码加读写数据的模型,SPI第一个发送给从机的数据 是指令码,从机中会有对应的指令集 ,指令码后面可能会有多个数据,也可能没有,取决于指令集。
波形图示例(W25Q64)
W25Q64规定,写指令后是地址高位