SPI接口
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。外围设备包括FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。 应用 SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 特点
SPI一共有11位有用信号,每位信号差分成两个信号用来提高传输抗干扰性,在物理连接上用标准25芯D型插头座(DB25)传输,因此连线多且复杂,传输距离短,容易出现故障。而ASI(异步串行接口)用串行传输,只需要一根同轴电缆线,连线简单,传输距离长。
接口信号
(1)MOSI – 主器件数据输出,从器件数据输入 (2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK –时钟信号,由主器件产生,最大为fPCLK/2,从模式频率最大为fCPU/2
(4)NSS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)
在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。
SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的上升沿上数据改变,同时一位数据被存入移位寄存器。
原理图
图1
工作模式
SPI有四种工作模式,各个工作模式的不同在于SCLK不同, 具体工作由CPOL,CPHA决定
CPOL: (Clock Polarity),时钟极性
当CPOL为0时,时钟空闲idle时候的电平是低电平; 当CPOL为1时,时钟空闲idle时候的电平是高电平; CPHA:(Clock Phase),时钟相位
当CPHA为0时,时钟周期的前一边缘采集数据; 当CPHA为1时,时钟周期的后一边缘采集数据;
CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:
四种工作模式下的SCLK表现:
接口定义
Spi接口连接示意图
传输时序
图2
SPI时序图详解
SPI 是一个环形总线结构,由ss(cs)、sck、sdi、sdo 构成,其时序其 实很简单,主要是在sck 的控制下,两个双向移位寄存器迚行数据交换。 上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。 下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。 假设主机和从机初始化就绪:并且主机的sbuff=0xaa (10101010),从机 的sbuff=0x55 (01010101),下面将分步对spi 的8 个时钟周期的数据情冴演示一遍(假设上升沿发送数据)。
脉冲主机sbuff 从机sbuff sdi sdo 0 00-0 10101010 01010101 0 0 1 0--1 0101010x 10101011 0 1 1 1--0 01010100 10101011 0 1 2 0--1 1010100x 01010110 1 0 2 1--0 10101001 01010110 1 0 3 0--1 0101001x 10101101 0 1 3 1--0 01010010 10101101 0 1 4 0--1 1010010x 01011010 1 0 4 1--0 10100101 01011010 1 0
5 0--1 0100101x 10110101 0 1 5 1--0 01001010 10110101 0 1 6 0--1 1001010x 01101010 1 0 6 1--0 10010101 01101010 1 0 7 0--1 0010101x 11010101 0 1 7 1--0 00101010 11010101 0 1 8 0--1 0101010x 10101010 1 0 8 1--0 01010101 10101010 1 0
这样就完成了两个寄存器8 位的交换,上面的0--1 表示上升沿、1--0 表 示下降沿,sdi、sdo 相对于主机而言的。根据以上分析,一个完整的传送周期 是16 位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的 名准备数据,主机在下一个8 位时钟周期才把数据读回来。
SPI 总线是Motorola 公司推出的三线同步接口,同步串行3 线方式迚行 通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU 与各种外围器件迚行全双工、同步串行通讯。SPI 主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
SPI 总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0 和SPI3 方式。
SPI 模块为了和外设迚行数据交换,根据外设工作要求,其输出串行同步时