摘 要: SPI是一种简单高速的通讯接口。本文简要地介绍了使用F240的SPI同 步通讯接口的硬件设计和软件算法。该系统满足了试飞数据下载对通讯速率的要求,成本低、速度快。在同步通讯系统设计中具有典型性和实用性。
关键词: 同步通讯;串行外设接口
机载计算机一般对数据的后处理和分析能力不强,许多试飞数据需要下载到地面处理,这就需要一种实用而高速的通讯。尽管RS232串行通讯因硬件简单,各操作系统都提供标准支持函数,软件易行且应用广泛,但其致命弱点就是速率太低,理论上最大速率可以达到56Kbps,在实际应用中相去甚远。对于试飞记录的大数据量而言,近年兴起的SPI通讯就是一种简单实用的高速通讯。我们已经将它应用在机载试飞数据下载中,在此和大家共同磋商。
SPI接口简介
串行外设接口(SPI-Serial Peripheral Interface)是近年来新发展的一种高速同步串行通讯接口。新推出的许多嵌入式处理器都集成了SPI接口,用于DSP控制器和各种外设通讯。如图1所示是TMS320F240所集成的SPI接口通讯原理。
图1 SPI接口示意原理(略)
通讯分为主控方(Master)和从方(Slave)。整个通讯由主方控制,各信号含义如下。
.SPISTE - SPI Strob,即从方使能选通。只有 SPITE = L时,才允许从方收发激活。
.SPICLK- Clock,通讯同步时钟。激活状态下,一旦时钟启动,无论主从,必有数据传输。甚至可以是无用的空数据(Dummy)。接收数据是否有意义,由应用程序按约定的协议判别。
.SIMO--- Slave Input/Master Out,主方数据发送线,亦即为从方数据接收线。
.SOMI---Slave Output/Master In,主方数据接收线,亦即为从方数据发送线。
当然,根据具体应用,主从方在通讯过程中是可以动态互换身份的。
图2 机载方SIP数据流(略)
图3 PC机SPI接口(略)
SPISendByte: ;-- 激活 Slave. ----- LDP #00E0H : DP = E0H: 7000H-707FH
的页址. SPLK #0012H,SPIPC1 :SPIPC1= (704DH) = 52H = 0101.0010 :SPIPC1=
(704DH) = 12H = 0001.0010 ;D6 = SPISTE data out = H: 禁止从模块. ;D6
= SPISTE data out = L: 使能从模块.SACL SPIDAT ; 发出去.
WaitSPI: ; 等着收回来.
BIT SPISTS,BIT6
BCND WaitSPI,NTC ; (7042H) = 0000.0000 ; D7 = Receiver Overrun =
0: ; D6 = SPI INT FlagLACL SPIBUF ; 读接收数据. ;--禁止 Slave--
SPLK #0052H,SPIPC1 ; SPIPC1= (704DH) = 52H = 0101.0010 LDP #0000h
RET至于PC机一方的基本的、重要的函数,诸如复位ResetFIFO, 读取状态GetRxFIFOSta,接收数据ReadRxFIFO,发送数据WrTxFIFO等函数,可以采用在Delphi中嵌入汇编的方法实现。
通讯CPU管理SPI算法
SPI数据帧采用类似于SDLC协议,如表2所示。
表2 SPI数据帧结构(略)
不同之处在于标志字节需要软件发出、省略帧地址域、帧校验由软件计算并采用异或校验。其中帧长度L 是包括校验字节在内的数据帧长度,数据域为(L-1)个正式数据字节,而校验计算方法为
CS = B1 xor B2 xor … xor BL-1
主方发送SPI帧的算法如下:procedure SendSPIFrame;begin SPISTE := L; // 使能 SPISTE,激活从方Send
Opening Flag // 发开标志 Send Frame Length; // 发帧长度 CS := 0; i := 0;
while (i < L-2) dobeginFetch data from TxBuffer; //从发送缓冲区读取一字节CS
:= CS xor Bi;Send One Byte; // 发出去Wait Send/Receive Complete; //
等待发送/接收完毕Read Dummy from SPIDAT; // 读走空数据(Dummy)Inc(i);end;Send
CS; // 发校验字节Send Close Falg; // 发关标志while not TimeOut do // 在规定超时范围内,从方应返回
关标志
begin Send Dummy Data; // 发空数据,保持从方激活状态 Receive Close Flag; // 接收到关标志时,本次通讯成功。
end; end;
PC机SPI接收算法
从方的数据帧接收和主方相对应,当从方被激活并接收到开标志后,其算法如下procedure RxSPIFIFObegin10ms内应接收到帧长度
L;CS := 0;i := 0;while (i < L - 1) and (not TimeOut) do //L-1包括检验字节在内begin
读 RxFIFO 状态寄存器; if Received then beginBuf[i] := RxFIFO; // 读接收 FIFOCS
:= CS xor Buf[i]; // 校验计算 end;end;Received Clsoe Flag;if (CS = 0)
and (Flag is Ture) then Send Close Flag // 接收正确,则返回关标志else Send
Error Flag;end;
结束语
SPI接口以普通串口几十倍的速率运行,大大加快了试飞数据下载,简单而实用。串行设备接口SPI同步通讯技术在不断的发展。同步通讯和异步通讯相对立而存在,相比较而发展。这里只是抛砖引玉,介绍了同步通讯的一些方法和我们实际工作的做法。同步通讯将向更高速率发展,应用在更多的日常电子设备中。
|