SPI的定义
SPI 是串行外设接口的英文缩写,是一种高速全双工通信总线。简单易用,最主要的是占用的管脚数量少,一般为4。
SPI基本概念
首先,介绍SPI通信中重要的四根线,分别是:CS,CLK,SDI, SDO,按照我个人理解的含义如下:
CS:片选标识,用来确定数据有效性;
CLK:时钟,越快读写也就越快;
SDI:数据输入端口;
SDO:数据输出端口。
这里也写一下比较官方的解释:
CS – 从设备使能信号,由主设备控制;
CLK – 时钟信号,由主设备产生;
SDI – 主设备数据输入,从设备数据输出;
SDO – 主设备数据输出,从设备数据输入。
SPI通信协议中有主从机的说法,主机产生时钟信号,控制片选信号。数据的输入输出是相对与主机从机来定义,主机的输入就是从机的输出。此外,CS片选高电平有效还是低电平有效取决于用户自身定义。
SPI如何工作
下面站在主机的角度简述SPI如何通讯,假定片选高有效。
1主机将CS片选管脚设置为高电平;
2CLK设置为高电平;
3CLK设置为低电平;
4写数据到从机,操作SDO为高电平或者低电平(读数据则是操作SDI),这里每个时钟脉冲只操作一个字节;
5重复234,直到需要操作的数据传输完毕;
6重新设置CS片选低电平。
再来个不生动的栗子:需要发送数据8到从机,8的二进制表示为1000,这时我们这么做:
set CS = 1;
set CLK =1;
set CLK = 0;
set SDO = 1;//第一个时钟 发送最高位数据
set CLK =1;
set CLK = 0;
set SDO = 0;//第二个时钟 发送次高位数据
set CLK =1;
set CLK = 0;
set SDO = 0;//第三个时钟 发送次低位数据
set CLK =1;
set CLK = 0;
set SDO = 0;//第四个时钟 发送最低位数据
set CS = 0;
至此数据发送完毕。这里有需要注意的问题就是数据的对齐格式,直接决定了数据的发送规则,是从左到右发,还是从右到左,主从机协调合理,数据不会错乱。
下面再上一张时序图(感谢设计师大人赞助的时序波形图,虽然没怎么上心),比较直观
SPI一般是有现成的可使用代码接口,今天介绍的是最简单的SPI协议,实际工作中需要定制SPI协议。了解了简单的原理,使用C实现一个SPI应该很简单了。
最后,谢谢阅读。不知道对于SPI,你看明白没?