SPI接口设计与实现
SPI(SerialPeripheralInterface)总线是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线应用广泛,已经成为很多器件的标准配置,可以直接和各个厂家生产的多种标准外围器件直接接口。其它常用的串行接口还有I2C、UART这两种接口,这三种接口互有优缺点。与I2C接口相比,SPI接口速度更快、协议更简单、并且是全双工的,但连线也相对多一些。与UART接口相比,SPI更灵活,因为其使用主设备的时钟进行同步,所以两个比特之间的时间间隔可以是任意的。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。 1SPI总线工作原理
SPI总线一般以主/从模式工作,通常有一个主设备和一个或多个从设备,数据传输由主机控制,典型SPI结构框图如图1所示。SPI总线包含四条信号线,分别是sclk、miso、mosi和cs,其中,sclk为数据传输时钟,由主机产生;miso是从机输出,主机输入数据线;mosi是主机输出,从机输入数据线;cs是从设备片选信号,由主机控制,当连接多个从设备时,通过该信号选择不同的从设备。SPI总线是按字节发送数据的,主机和从机内部都包含一个8位串行移位寄存器,在时钟信号控制下,寄存器内的数据由高到低输出至各自的数据线,8个时钟后,两个寄存器内的数据就被交换了。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。当主机发送一个连续的数据流时,可以进行多字节传输,在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平。 根据串行同步时钟极性和相位不同,SPI有四种工作方式。时钟极性(CPOL)为0时,同步时钟的空闲状态为低电平,为1时,同步时钟的空闲状态为高电平。时钟相位(CPHA)为0时,在同步时钟的第一个跳变沿采样数据,为1时,在同步时钟的第二个跳变沿采样数据。因为主设备时
钟极性和相位都是以从设备为基准的,所以主设备时钟极性的配置和从设备时钟极性的配置是相反的。
SPI工作原理:以寄存器CPOL=1、CPHA=0为例,当要传输数据时,主机控制cs信号有效,sclk管脚输出时钟信号,在时钟上升沿,主机将需要发送的数据锁存在mosi线上,同时从miso线上读取从机发送的数据;在时钟下降沿,从机将需要发送的数据锁存在miso线上,同时从mosi线上读取主机发送的数据,完成一次数据交换后,SPI总线重新回到空闲状态,等待下一次通信的发起。 2SPI总线硬件设计和软件实现
某项目的控制器硬件采用ARM+CPLD的技术方案,其中ARM为主控器,主要实现流程控制等,CPLD为从控制器。ARM与CPLD之间主要通过SPI接口进行通信,CPLD根据ARM发送的命令产生各模块的控制逻辑,完成一百多路IO控制,并且实现从一路UART接口到20路半双工RS485接口的收发切换。ARM与CPLD之间的硬件接口如图2所示。特别的,在ARM和CPLD之间设计了一个中断信号,用来提示SPI主机ARM,SPI从机CPLD有数据需要读取,请求发起SPI通信。当CPLD作为SPI接口从机使用时,需要在CPLD中实现sclk下降沿检测、SPI控制模块。
2.1sclk下降沿检测因为ARM在sclk的上升沿读取CPLD输出的数据,所以CPLD必须在sclk的下降沿发数,上升沿时数据稳定。同时为了在一个sclk时钟周期只接收或发送一个比特的数据,需要使该信号仅保持一个clk周期,该信号的产生方式如图3所示。在clk信号驱动下,当该下降沿检测信号有效时(定为高电平有效),CPLD采集miso线上的数据,并将需要发送的数据输出至mosi。
2.2SPI控制模块如图4为从机软件设计流程图。CPLD在系统上电后进入idle状态,idle表示空闲状态,当CPLD有数据需要传输时,通过int向ARM发送中断信号;当检测到cs信号有效时,进入spi数据传输状态;同步sclk信号,在下降沿,首先发送数据信息字节,通过数据信息字节通知ARM这次总共需要发送几个字节的数据,然后依次发送后续数
据,直到数据传输完成。在上升沿,接收ARM发送的数据,并按字节存入RAM。
3SPI接口软件的设计仿真
对该项目SPI控制程序进行了仿真,其仿真波形如图5所示。这个SPI接口每次只有8bit,8bit代表地址还是数据由用户自己的协议来定,每启动一次接口模块,无论是主设备还是从设备都会写出一个数据和接收一个数据。接收数据流程是:当cs下降沿到来时启动SPI接收控制模块,每个sclk下降沿读取1bit数据,ovalid有效时(高)读取odata数据(8bit)。发送流程是:先确定从设备要写出的数据,再给主设备中断信号,主设备响应中断,启动一个读取流程,就可以读取从设备的一个8bit数据。 4结语
SPI接口设计与实现