目录
前言
本文为作者对SPI通信协议的知识总结以及简单应用,通过软件翻转GPIO电平模拟SPI实现读写W25Q64。
提示:如有错误请尽情指出,希望对广大读者有所帮助。
一、从0开始讲清SPI通信协议
(1)简介
SPI是一种通信速率极高的全双工同步通信协议,它是一主多从的模式。
共有四根及以上根信号线,分别是SCK时钟线、MOSI主机输出从机线(Master Output Slave Input)、MISO主机输入线(Master Input Slave Output)和SS片选信号线。
有多少个从机,则配置多少根SS信号线,空闲状态时,SS信号线默认处于高电平。当需要与某一从机进行通信时,拉低相对应的SS信号线即可。由此可知,SPI通信的起始条件和终止条件分别是拉低SS线和拉高SS线。
SPI的输出引脚(MOSI、SS、SCK)应配置为推挽输出,从而使得高低电平驱动变化十分迅速,达到更高的传输速度。
当有多个从机时,从机输出也有多个,但主机输入只有一个,所以当从机的SS引脚为高电平时,也就是从机未被选中时,它的MISO引脚必须为高阻态,相当于引脚断开,不输出任何电平,这样就可以防止一条线有多个输出,而导致电平冲突的问题了。
(2)通信本质
SPI的通信本质就是主机和从机之间通过移位寄存器交换字节数据。
主机的移位寄存器会将一个字节的8位通过MOSI逐次放在从机的MOSI上。
同理,从机的移位寄存器也会将一个字节的8位通过MISO逐次放在主机的MISO上,由此即可完成数据的交换。
当我们只需要一个设备的数据时,那么我们可以只对一方的数据进行操作,舍弃另一方的数据即可。
(3)通信时序
SPI的通信时序主要由三大部分组成,分别是起始条件、交换字节、终止条件。
1.起始条件
SS从高电平切换到低电平
2.终止条件
SS从低电平切换到高电平
3.交换字节
SPI的交换字节时序共有四种模式,它们之间的区别在于不同电平时期,移入/移出数据。
由于模式0最常用,所以本文只对模式0进行讲解。
在模式0中,空闲状态时,SCK默认为低电平。
在SCK由高电平切换为低电平时,主机和从机会移出数据,在由低电平切换为高电平时,主机和从机会移入数据,也就是读取数据,如下图所示。
4.完整时序
在从机的芯片手册中,一般会有相对应的指令集,其中的每个指令所对应的数据称为指令码。
SPI的通信时序一般为<