目录
一、SPI简介
SPI有四根通信线:
SCK:串行时钟线 (别称:SCLK,CLK,CK)
MOSI:主机输出从机输入 (别称DO)
MISO:主机输入从机输出 (别称DI)
SS:从机选择 (别称NSS,CS)
SPI的基本特性:同步,全双工
二、硬件电路
- 所有SPI设备的SCK、MOSI、MISO分别连在一起
- 主机另外引出多条SS控制线,分别接到各从机的SS引脚
- 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
- 1. SCK时钟线完全由主机掌控,所以对于主机来说时钟线为输出,对于所有从机来说时钟线为输入,这样主机的同步时钟就能送到各个从机了。
- 2. MOSI主机输出从机输入,图中左边是主机对应MO,主机输出。下面三个都是从机,所以就对应SI,从机输入。数据传输方向是,主机通过MOSI输出,所有从机通过MOSI输入。
- 3. MISO主机输入从机输出,左边是主机,对应MI,主机输入。下面三个都是从机,所以就对应SO,从机输出。数据传输方向是,所有从机通过MSIO输出,主机通过MSIO输入。
- 注:SPI在MISO这里有个冲突点,主机一个是输入,三个从机都是输出,如果三个从机始终是推挽输出,势必会导致冲突,所以在SPI协议里有一条规定,当从机的SS引脚为高电平,也就是从机未被选中时,它的MISO引脚必须切换成高阻态,高阻态就相当于引脚断开,不输出任何电平,这样就可以防止一条线有多个输出,而导致的电平冲突的问题了,在SS为低电平时,MISO才允许变为推挽输出。
- 4. SS从机选择控制线,SS线是低电平有效,主机想指定谁,就把对应的SS输出线置低电平就行了。当主机需要和从机1进行通信了,主机就把SS1线输出低电平,这样从机1就知道主机在找它,然后主机在数据引脚进行的数据传输,就只有从机1会响应,其他从机的SS线是高电平,所以它们都会保持沉默,当通信完之后就会把SS1置回高电平。
三、移位示意图
SPI的基本收发电路就是使用了这样一个移位的模型,左边时SPI主机,里面有一个8位的移位寄存器,右边是SPI从机里也有一个移位寄存器。移位寄存器里面有一个时钟输入端。
因为SPI一般都是高位先行的,所以每来一个时钟,移位寄存器就会向左进行移位,从机中的移位寄存器也是同理,移位寄存器的时钟源时由主机提供的在图中叫做波特率发生器,它产生的时钟驱动主机的移位寄存器进行移位,同时这个时钟也通过SCK引脚进行输出,接到从机的移位寄存器里。
主机移位寄存器左边移出去的数据通过MOSI引脚,输入到从机移位寄存器的右边,从机移位寄存器左边移出去的数据MISO引脚,输入到主机移位寄存器的右边。