SPI协议

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协议_第1张图片
时序波形图

SPI一般是有现成的可使用代码接口,今天介绍的是最简单的SPI协议,实际工作中需要定制SPI协议。了解了简单的原理,使用C实现一个SPI应该很简单了。


最后,谢谢阅读。不知道对于SPI,你看明白没?

你可能感兴趣的:(SPI协议)