概述
SPI=SerialPeripheralInterface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。常规只占用四根线,节约了芯片管脚,PCB的布局省空间。现在越来越多的芯片集成了这种通信协议,常见的有EEPROM、FLASH、AD转换器等。
优点:
支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;
支持高速;
协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;
硬件连接简单;
缺点:
相比IIC多两根线;
没有寻址机制,只能靠片选选择不同设备;
没有从设备接受ACK,主设备对于发送成功与否不得而知;
典型应用只支持单主控;
相比RS232RS485和CAN总线,SPI传输距离短;
硬件结构
SPI总线定义两个及以上设备间的数据通信,提供时钟的设备为主设备Master,接收时钟的设备为从设备Slave;
信号定义如下:
SCK:SerialClock串行时钟
MOSI:MasterOutput,SlaveInput主发从收信号
MISO:MasterInput,SlaveOutput主收从发信号
电路连接如下:
单个主设备和单个从设备:
单个主设备和多个从设备,通过多个片选信号或者菊花链方式实现:
寄存器类型
Motorola定义的SPI寄存器包括:
SPIControlRegister1(SPICR控制寄存器1
SPIControlRegister2(SPICR控制寄存器2
SPIBaudRateRegister(SPIBR)波特率寄存器
SPIStatusRegister(SPISR)状态寄存器
SPIDataRegister(SPIDR)数据寄存器
通过往寄存器中写入不同的值,设置SPI模块的不同属性。
SPI传输模式
通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。
CPOL,即ClockPolarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。
=时钟低电平时有效,空闲时为高
0=时钟高电平时有效,空闲时为低
CPHA,即ClockPhase,定义SPI数据传输的两种基本模式。
=数据采样发生在时钟偶数边沿
0=数据采样发生在时钟奇数边沿
四种模式如下所示:
先看第一列两张,采样发生在第一个时钟跳变沿,即数据采样发生在SCK奇数边沿;再看第二列,采样发生在第二个时钟跳变沿,即数据采样发生在SCK偶数边沿。
第一行两张,第二行两张,SCK空闲状态为高电平。
主从设备进行SPI通讯时,要确保它们的传输模式设置相同。
其中mode0和mode3最为常见,SPI接口的flash中均会有标注。
读写操作
标准SPI读写为例
片选---读指令---地址---数据读出
片选---写指令---地址---数据写入
与IIC一样,是一种最常见的板内芯片间的串行接口。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点