SPI串行外设接口(serialperipheralinterface)DanielSong2012.4.12一SPI接口简介SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。如图1MasterSlaveMOSISCLKMISO/SS•(1)MOSI–主设备数据输出,从设备数据输入•(2)MISO–主设备数据输入,从设备数据输出•(3)SCLK–时钟信号,由主设备产生•(4)/SS–从设备使能信号,由主设备控制•/SS(片选信号)是控制芯片是否被选中,也就是说只有片选信号为预先规定的使能信号时,对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。二SPI相关的寄存器(1)SCPR:控制寄存器:(SPI的大部分设置都在该寄存器)Bit3:CPOL(时钟极性);Bit2:CPHA(时钟相位)(2)SPSR:标志寄存器:(查看一些标志和设置SPI速度,主要是用到SPIF这个标志位,接收完成和发送完成都会置位这个标志,进入中断服务程序或访问SPDR寄存器都可以清零这个标志)。(3)SPDR:数据寄存器:三SPI主从器件间数据传输框图四SPI串行外设接口举例•SPI串行数据传输结构由MISO、MOSI、SCLK、/SS构成,主要是在SCLK的控制下,两个双向移位寄存器进行数据交换。•CPOL(时钟极性)=0;•上升沿发送、下降沿接收、高位先发送。•上升沿到来的时候,MOSI上的电平将被发送到从设备的寄存器中。•下降沿到来的时候,MISO上的电平将被接收到主设备的寄存器中。•假设主机和从机初始化就绪:并且主机的sbuf=0xaa(10101010),从机的sbuf=0x55(01010101),下面将分步对SPI的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)。Sbuf(串行接收和发射缓冲器)脉冲主机sbuff从机sbuffMISOMOSI01010101001010101001↑0101010X1010101X011↓0101010010101011012↑1010100X0101011X102↓1010100101010110103↑0101001X1010110X013↓0101001010101101014↑1010010X0101101X104↓1010010101011010105↑0100101X1011010X015↓0100101010110101016↑1001010X0110101X106↓1001010101101010107↑0010101X1101010X017↓0010101011010101018↑0101010X1010101X108↓010101011010101010五SPI时序图分析(1)CPOL=0,SCLK为低时总线空闲:•CPHA=0数据在SCLK的上升沿(risingedge)被读取;数据在下降沿(fallingedge)写入;•CPHA=1数据在SCLK的下降沿(fallingedge)被读取;数据在上升沿(risingedge)写入;(2)CPOL=1,SCLK为高时总线空闲:•CPHA=0数据在SCLK的下降沿(fallingedge)被读取;数据在上升沿(fallingedge)写入;•CPHA=1数据在SCLK的上升沿(fallingedge)被读取;数据在下降沿(risingedge)写入;六SPI优缺点SPI接口具有如下优点:1)支持全双工操作;2)操作简单;3)数据传输速率较高。同时,它也具有如下缺点:1)需要占用主机较多的口线(每个从机都需要一根片选线);2)只支持单个主机;3)没有指定的流控制,没有应答机制确认是否接收到数据;4)从器件不能主动传输,收发都有主控器件控制。END