采用SPI接口实现双DSP双向通信和同步
在载人航天、无人机、火控雷达等尖端技术领域的作动系统中,常用双控制器余度技术来提高系统的可靠性。两个控制器之间就需要一种高效可靠的数据通信以保证在同一时间执行相同的周期任务。利用SPI接口可以实现数据双向通信,TMS320F2812 DSP芯片内部集成了一个SPI模块,方案提出了一种基于SPI通信接口的两片DSP的双向通信和任务同步,两片DSP中固定一片作为SPI通信主机,另一片作为SPI通信从机[1],最后提出通信故障的解决办法。
1 DSP SPI外设接口模块和SPI通信原理
1.1 SPI外设接口模块
TMS320F2812 DSP芯片内部集成了一个SPI模块,其数据传输速率和字符长度是可编程的,最高传输速率可达10 Mb/s ,支持主/从模式通信[2]。SPI外设模块和DSP CPU间的接口如图1所示,包括4个外部引脚,采用低速外设时钟LSPCLK作为时钟源,具有两个独立的外设中断请求信号(SPIINT/RXINT和TXINT),提供了12个寄存器实现SPI模块的配置和控制。
SPI之间的通信主要有以下4个外部引脚:
SPISOMI:对于主设备,该引脚为数据输入;对于从设备,该引脚为数据输出;
SPISIMO:对于主设备,该引脚为数据输出;对于从设备,该引脚为数据输入;
SPISTE:主设备向从设备发送的使能引脚;
SPICLK:SPI接口的串行时钟引脚,由主设备向从设备提供同步时钟。
1.2 SPI通信原理
SPI接口可配置为两种模式,分别为主控制模式和从控制模式。图2给出了两个控制器(主控制器和从控制器)之间采用SPI接口的连接关系。主控制器通过发出SPICLK信号来启动数据传输,主从控制器能同时发送和接收数据。
在主控制器模式下,SPI通过SPICLK引脚为整个串行通信网络提供时钟。此时,要发送的串行数据从引脚SPISIMO移出,并在引脚SPISOMI上接收数据。在系统应用中,主控制器的引脚SPISTE用来控制从控制器的片选信号。在主设备与从设备之间进行数据通信时,主设备将SPISTE置成低电平,使能从设备,此时,从设备的串行数据从SPISOMI 引脚移出,从SPISIMO引脚移入。当数据传输完毕后,SPISTE引脚置为高电平。
写数据到SPIDAT或SPITXBUF,启动SPISIMO引脚发送数据,首先发送SPIDAT寄存器的最高有效位MSB,接收到的数据通过SPISOMI引脚移入SPIDAT的最低有效位LSB。当传输完特定的数据位后,接收到的数据被存到SPIRXBUF寄存器中,以被读取使用。当设定数据长度不足16 bit时,SPIRXBUF寄存器中存放的接收数据采用右对齐格式;而发送数据则需要采用左对齐格式写入寄存器SPIDAT或SPITXBUF[3]。图3为SPI数据传输格式。
2 系统硬件接口设计
系统采用TI公司TMS320F2812 DSP芯片作为控制器,利用SPI接口实现控制器数据通信和任务同步,即同一系统在同一时刻执行相同的任务。其内部集成一个SPI外设模块,要实现SPI数据传输只需要配置几个相应寄存器即可。
SPI的传输只能由主控制器发起,主控制为从控制器提供时钟和使能信号。本设计利用DSP内部集成外设模块,当主控制器发送数据时,通过SPISTE使能从控制器,继而开始SPI的传输。如果在通信过程中,需要从控制器主动向主控制器发送数据,只能采用主控制器发送伪数据的形式为从控制器提供时钟和使能信号。
3 系统软件设计
3.1 软件实现的同步设计
实现任务同步的主要思想是网络通信中的应答模式,具体流程图如图4所示。通信过程中,SPI有可能受到外界干扰导致数据传输错误,而同步过程又是一个死等过程,采用SPI的软件复位可以解决这一问题,在通信过程中若发现接收不到正确ACK信号就进行软件复位重新开始发送,这种方法在实践中得到了验证,效果很好。
3.2 软件通信协议设计
基于SPI的通信有两种情况:由SPI主方发起通信,以及由SPI的从方发起通信。本方案中,采用主动发送数据,中断接收数据。通过配置SPI寄存器,设置数据长度和通信速率,使能增强型FIFO发送和接收,采用7级中断接收数据,即每接收完7个数据后触发一次中断,可以从中断中读取SPIRXBUF里面的数据。由于SPI本身并未规定数据的开始和结束,在实际通信过程中,需要对主控制器和从控制器之间的通信做一个接口通信协议[4]。
在设计中,采用包的方式发送数据,在前面发送一个包头,里面包含奇偶校验(1 bit)、数据类型(8 bit)和包长(数据长度4 bit),在包的后面发送实际应用数据,实际数据的长度和类型可以根据包头确定。图5所示为包的数据帧结构。
在这种情况下,一次SPI的传输过程可描述如下:主控制器首先发送包头,告知从控
- 基于TMS320F2812的SPI接口设计方案(12-19)
- SST25VF080B SPI接口FLASH STM32驱动(12-03)
- STC51单片机SPI接口单主单从模式通信-汇编语言(11-30)
- MSP430 SPI接口(模式)通信(11-25)
- 基于FPGA的可复用SPI接口设计(01-11)
- SPI接口基础上的各种串行通信工作方式配置及驱动编程(10-10)