SPI硬件电路设计
1 SPI简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据。SPI没有定义速度限制,通常能达到10-100M/bps。
SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的数据传输(对FLASH来说是读写操作)都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。
标准SPI通信接口包含以下四根线:
MISO(Master Input Slave Output):主设备数据输入,从设备数据输出;
MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;
SCLK(Serial Clock):时钟信号,由主设备产生;
CS/SS/NSS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电平或低电平,查找从设备Datasheet),主芯片对此从芯片的操作才有效。
2 SPI的特点和基本概念
2.1 SPI的特点
(1)主模式和从模式
(2)高速、全双工、同步通信
(3)双向模式,3线SPI,Dual SPI,Qual SPI(QSPI)
(4)多从机时,从选择输出
(5)模式错误标志,多主时报错,CPU中断功能
(6)双向数据缓冲寄存器,移位寄存器
(7)可编程的时钟极性(CPOL/CKP)和时钟相位(CPHA/CKE)
(8)在等待模式下对SPI的控制,等待模式是一种可配置的低功率模式
2.2 SPI的基本概念
2.2.1 SPI总线术语
SS/CS:Slave Select
SCK:Serial Clock
MOSI:Master Output, Slave Input
MISO:Master Input, Slave Output
MOMI:Master Output, Master Input
SISO:Slave Input, Slave Output
2.2.2 SPI控制器内部结构框图
SPI的主要部分是状态、控制和数据寄存器、移位器逻辑、波特率发生器、主/从控制逻辑和端口控制逻辑。此结构为摩托罗拉协议的结构,每个主控制器内部SPI结构可能略有差异。
2.2.3 SPI总线的运行状态
SPI有三种模式,即运行、等待和停止。
运行模式:这是最基本的操作方式。
等待模式:等待模式下的SPI操作是一种可配置的低功率模式,由位于SPICR2寄存器中的SPISWAI位控制。在等待模式下,如果SPISWAI位被清除,SPI进入运行模式。如果设置了SPISWAI位,则SPI将进入功率保守状态,而SPI时钟生成将被关闭。如果SPI配置为主服务器,任何正在进行的传输都将停止,但在CPU进入运行模式后恢复。如果SPI配置为从服务器,则字节的接收和传输继续,以便从服务器与主服务器保持同步。
停止模式:SPI在停止模式下处于非活动状态,以降低功耗。如果SPI配置为主服务器,任何正在进行的传输都将停止,但在CPU进入运行模式后恢复。如果SPI配置为从服务器,则字节的接收和传输继续,以便从服务器与主服务器保持同步。
更为详细的描述见协议文档,只需大概了解即可。
2.2.4 标准SPI和3线SPI,Dual SPI和Qual SPI(6线)的区别
(1)标准SPI:标准SPI通常就称SPI,有4根引脚信号:clk , cs, mosi, miso。
(2)3线SPI:在SPI控制寄存器2中设置SPC0位时,选择双向模式。在此模式下,SPI只使用一个串行数据脚。MSTR位决定使用哪个引脚。MOSI引脚成为主模式的串行数据I/O(MOMI)引脚,而MISO引脚成为从属模式的串行数据I/O(SISO)引脚。SPI不使用主模式下的MISO引脚和从属模式下的MOSI引脚。因此三线SPI包含3跟信号线,CLK,CS,MOMI(SOSI)。摩托罗拉的3线SPI是有CS的,数据线变成双向。
TI的3线SPI是没有CS信号,使用CLK、MOSI、MISO,不能多从操作。并且说明了不支持2线单向操作,即只使用CLK和MOSI或MISO。
(3)Dual SPI(Dual serial peripheral interface)双线串行外设接口
Dual SPI一般是对SPI Flash而言,不是所有SPI外设都支持该模式。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),miso变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输。只能半双工工作。
(4)Qual SPI(Quad serial peripheral interface)4跟数据线
与Dual SPI类似,也是对SPI Flash而言,Qual SPI Flash增加了两根I/O线(SIO2(WP),SIO3(HOLD)),目的是一个时钟内传输4个bit。
所以对于SPI Flash,有标准spi flash,dual spi , qual spi 三种工作模式。可以用3-wire, 4-wire, 6-wire工作,在相同clock下,线数越多,传输速率越高。