SPI是英文SerialPeripheralInterface的缩写,中文意思是串行外围设备接口。SPI是Motorola公司推出的一种同步串行通讯方式,是一种标准的四线同步双向串行总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。SPI可以使微控制器(MCU)与各种外围设备(包括FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和微控制器等)以串行方式进行通信以交换信息。SPI总线使用同步协议传送数据,接收或发送数据时由主机产生的时钟信号控制。SPI接口可以连接多个SPI芯片或装置,主机通过选择它们的片选来分时访问不同的芯片1基本原理SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,设备之间有4线模式(双向传输时)或3线模式(单向传输时)。在4线模式下,它们是SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选);在3线模式下,SDI和SDO并为一根,定义为SIO。(1)MOSI–SPI总线主机输出/从机输入(SPIBusMasterOutput/SlaveInput)(2)MISO–SPI总线主机输入/从机输出(SPIBusMasterInput/SlaveOutput)(3)SCLK–时钟信号,由主设备产生(4)CS–从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI、SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。SPI总线系统有以下几种形式:1个主机和多个从机、多个从机相互连接构成多主机系统(分布式系统)、1个主机与1个或几个I/O设备构成的系统等SPI总线信号线基本连接关系,如下图SPI总线包括1根串行同步时钟信号线以及2根数据线。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI接口时序如图3、图4所示。SPI是一个环形总线结构由SS(CS)、SCK、SDI、SDO构成,其时序其实很简单,主要是在SCK的控制下,两个双向移位寄存器进行数据交换。假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候数据将会是SDO=1;寄存器=0101010x。下降沿到来的时候,SDI上的电平将所存到寄存器中去,那么这时寄存器=0101010SDI,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。例子:假设主机和从机初始化就绪:并且主机的SBUFF=0xaa,从机的SBUFF=0x55,下面将分步对SPI的8个时钟周期的数据情况演示一遍:假设上升沿发送数据脉冲主机SBUFF从机SBUFFSDISDO01010101001010101001上0101010x1010101x011下01010100**********上1010100x0101011x102下1010100101010110103上0101001x1010110x013下01010010**********上1010010x0101101x104下1010010101011010105上0100101x1011010x015下01001010**********上1001010x0110101x106下1001010101101010107上0010101x1101010x017下00101010**********上0101010x1010101x108下0101010**********这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,SDI、SDO相对于主机而言的。其中SS引脚作为主机的
SPI总线综述 来自淘豆网m.daumloan.com转载请标明出处.