一种基于FPGA的SPI拓展应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通信与网络 Communications & Networks
SCK(CPOL=0) SCK(CPOL=1)
CS CPHA =0
1
2
3
4
5
6
7
8
MOSI
Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8
MISO CPHA =1
Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8
成为一种工业标准[2]。一路SPI数据总线只占用3或4个
机的单线程串行的工作方式来进行多种数据采集处理
I/O(Master Output Slave Input,MOSI; Master Input 的工作方案,使用FPGA的工作方式显然是更优的选择
Slave Output, MISO;Serial Clock,SCK;Chip Select,CS) (并行处理能力、运行速度快、管脚多、体积小,同时
责任编辑:毛烁
一种基于FPGA的SPI拓展应用
An extended application of SPI based on FPGA
阳胜波,谢嘉威,宋文生 (中国电子科技集团公司第三十四研究所 光纤通信部,广西 桂林 541004)
摘要:基于FPGA(现场可编程门阵列)的SPI(串行设备接口)总线,实现主从设备之间的状态查询及数据采 集。利用FPGA高集成、高速率、高可靠性及丰富的逻辑和I/O(输入/输出)资源的特点,解决现有的单片机 I/O不充裕,运行速度慢等问题。针对产品模块化、小型化的需求,采用FPGA+ARM(RISC微处理器)的嵌 入式数据采集方案,搭建SPI总线实现数据传输。设计满足了数据采集实时性高,传输数据准确性、稳定性的 要求,确保了系统长期可靠地运行,实现用户对整个系统状态的监控。 关键词:FPGA;SPI
结合已交付的项目的经验(项目中主设备采用ARM 动供开发者使用,大大降低了开发成本。
芯片,从设备采用FPGA),探讨基于FPGA的
SPI总线传输方案在实际中的应用,拓展SPI技术 的应用范围,同时对设计中遇到的具体问题提出 了有效的解决方案。
1 系统分析和设计
系统的SPI总线连接如图1所示。系统中的各
主设备主要向从设备发送查询指令,同时将采集到
FPGA的特性,通过将SPI总线与FPGA相结合,可使SPI 的数据进行有效性判断并上传电脑。相对于从设备来
总线的应用更加灵活多变,为解决通信技术问题提供更 说,主设备处理过程比较简单,选择较灵活、功耗低的
好的选择和可行方案。
ARM嵌入式最为合适。并且ARM具有现成的SPI接口驱
1
2
3
4
5
6
7
8
MOSI
Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8
MISO
Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8
图2 SPI总线通信4种工作模式时序图
1
t
2
a
sck
cs
mosi miso
a+n-2 t a+n-1
a+n
图3 某项目从设备SPI0模式总线时序图
66 ELECTRONIC ENGINEERING & PRODUCT WORLD 2019.5
Copyright©博看网 . All Rights Reserved.
责任编辑:毛烁
收数据的每个字节的第1位都是 在第(8×y-7)个时钟信号输出 (y为整数,n>y>a),然后依次 采样直至该字节的最后一位在第 (8×y)个时钟信号输出完毕, 如图5所示。
通信与网络 Communications & Networks
设备数量的增加或者减少,对整个系统的好坏并没有特 定方向的影响。加上插槽位置对系统工作的影响也很复 杂。
为了解决这个问题,笔者做过如下依次尝试,但情 况并没有发生好转,从设备依旧没有任何信号输出:
a)将待机状态的从设备输出置高阻; b)I/O设置上/下拉电阻; 最终笔者通过对设备内部的信号输入至信号处理部 份采用SIGNALTAP进行实时分析、观察,发现数据处 理模块fifo在固定位置丢失一个同步时钟脉冲(fifo的所 有触发只与同步时钟sck有关)。经过分析,决定在fifo 中加入异步时钟参与触发和计数,故障现象没有再次发 生,多个从设备并联的问题得到了有效解决。
错误造成数据采样失效。若采用
第一个时钟脉冲进行计数清零,会使数据的采集滞后1
沿触发该字节第1位的发送,第(8×y-7)个时钟脉冲的
位,以致采集到无效数据,造成通讯失效。
下降沿触发该字节第2位的发送,直至该字节第8位在
(2) 利用时钟信号sck计数。本文SPI总线采用SPI0
第(8×y-1)个时钟脉冲的下降沿发送完毕。使用这种方
合,在接入方式完全相同的情况下又可能产生不同的结
当datatx模块在发送某个字节时,利用上一字节
果。
的最后一个时钟脉冲(第(8×y-8)个时钟脉冲)的下降
b)与从设备的插入数量没有特定规律。连接板上从
2019.5 67
Copyright©博看网 . All Rights Reserved.
据发送模块datatx的计数清零, miso
1 2 3 4 5 6 78
miso
1 2 3 45 6 7 8 1 2 3 45 6 7 8
确保系统在片选有效后的第一个
图6 某字节的第1位在sck第(8*y-7)个 时钟脉冲开始计数,避免因计数 时钟的上升沿发送
图7 某字节的第1位在sck第(8*y-8)个时钟 的下降沿发送
ห้องสมุดไป่ตู้
datarx
fifo
图4 从设备FPGA模块结构图
datatx
串行同步时钟的第二个跳变沿(上升或下降)数据被采 样。确保SPI主、从设备之间的正常通信,就必须满足 二者的时钟相位和时钟极性一致[4]。
现以某项目(采用SPI0模式)为例,选择其中1路 SPI总线并对其时序进行详细阐述。时序图如图3。
片选信号cs在主设备发送数据前跳变为低电平,使 被选中的从设备SPI通信端口开启;从设备完成数据发 送的一段时间后,片选信号cs跳变回高电平,从设备 SPI通信端口关闭。主设备发送查询/控制命令的数据帧 长度为a个字节,每个字节包含8位有效数据,每位数据 占用一个时钟脉冲信号;当有数据发送时,sck伴有对 应的同步时钟信号,无数据发送则无时钟脉冲信号。同 时,相邻字节间存在时间间隔t,在t时间内sck无时钟脉 冲,即同步时钟信号是一份一份的,每份包含8个时钟 脉冲。
4 结论
利用ARM+FPGA模式搭建了SPI总线,使SPI接口 技术的使用更加灵活多变,丰富了系统的I/O数量, 增强了系统的数据处理能力,拓展了SPI技术的应用范 围,实现了系统数据的长期可靠传输,为后端用户的决 策提供了稳定可靠的理论依据。
参考文献 [1]Xilinx Limited.CoolRunner-II Serial Peripheral Interface Master.2002 [2]蔡向东。单片机软件模拟SPI接口的解决方案[ J ].信息技术,2006(6):18-20 [3]李大江,崔建明。一种基于FPGA的可配置SPI+Master接口设计实现[ J ].电子技术应用, 2010(10):60-62 [4]张经爱,许凯华,刘玉华。基于MSP430的模拟SPI串口通信的实现[ J ].计算机工程与设计, 2008 ,29(5):1169-1171
当CPOL=0,串行同步时钟的空闲状态为低电平; 当CPOL=1,串行同步时钟的空闲状态为高电平。可 见,CPOL对于SPI总线传输协议没有较大的影响。
传输协议的模式选择主要通过配置时钟相位 (CPHA)实现。当CPHA=0,在串行同步时钟的第一 个跳变沿(上升或下降)数据被采样;当CPHA=1,在
0 引言
数据信息,并按SPI总线通信方式上报给主设备,主设
SPI(Serial peripheral interface——串行设备接 备将最终的处理结果上报PC端,从而实现对系统的实
口)是摩托罗拉公司推出的一种同步串行通信接口[1]。
时监控。
用于MCU和外围扩展芯片之间的串行连接,现已发展
从设备需要采集的数据种类繁多,相对于使用单片
3 技术难点及解决方案
3.1 数据同步 从图3的SPI时序图可看出,有数据才有时钟脉冲,
总线的时钟不是连续而是一份一份的(每份为8个连续 时钟信号),为了保证系统能正常通讯,必须确保数据 在主、从设备中同步传输,这就增加了系统在数据传输 过程中的难度。
就从设备而言,必须满足从设备在接收/发送状 态下,经过每一份时钟信号中接收/发送的都是的一 个完整且有效的字节。即主设备发送数据的每个有效 字节的第1位都是在第(8×x-7)个时钟信号(x为 整数,0<x<a)被从设备的接收模块采样(上升沿采 样,下同),然后依次采样直至该字节的最后一位在 第(8×x)个时钟信号被采样。同时,要求主设备接
馈,且故障无规律可循:
在第(8×y)个时钟信号输出,那么将会出现如图6所
a)与从设备插入插槽的位置没有特定规律。例如,
示的情况。
有A、B两台从设备,连接板有5个插槽(编号1-5)。A
由于总线采用SPI0工作模式,那么主设备将通过同
插入1,B插入2,此时B失效。将B依次换至剩余插槽,
步时钟信号的上升沿触发数据采集,此时采集到的数据
sck cs mosi miso
x
1 2 3 45 6 7 8
y
1 2 3 45 6 78
为了实现数据同步,可以采 图5 SPI总线采样时序示意图
用如下方式:
y
(1) 从设备利用片选信号cs复
位清零。通过片选信号cs的下降 sck
y-1
t
y
sck
沿,触发从设备中的数据采集模
块datarx、数据缓存模块fifo及数
从 从设 设备 备n n-
1
从 从从 设 设设 备 备备 3 21
SCK
CS
主设备
MISO
MOSI
从设备可以按照实际需要,实时采集不同的状态 图1 系统框图
2019.5 65
Copyright©博看网 . All Rights Reserved.
2 系统时序
时序是通信系统中首要考虑的因素之一,时序无误 才能保证数据在传输、处理过程中的有效性,使系统 保持正常的工作状态。根据时序的不同,SPI总线有4种 工作模式(SPI0,SPI1,SPI2,SPI3),见图2,其中 SPI0和SPI3两种工作模式使用的最广泛。通过配置系统 的SPI总线的时钟极性(CPOL)和时钟相位(CPHA) 可得到满足传输要求的工作模式。
据。
备和1台从设备,系统能正常运行。但在接入多个从设
假设数据发送模块datatx在数据发送过程中,某字
备后(从设备的接口类型一致),会出现一个或者几个
节的第1位在第(8×y-7)个时钟信号输出(y为整数,
从设备工作失效。具体表现为从设备没有任何信息反
n>y>a,时钟信号的上升沿输出数据,下同),第八位
工作模式,利用时钟信号sck的上升沿触发采集模块内
法,主设备在每个sck时钟信号的上升沿都能同步采集
部计数器计数,确保模块的数据采样同步,获得有效数
到正确的数据,确保总线通信正常。
据。
3.2 多个从设备并联的问题
(3) 从设备中的数据发送模块datatx提前发送数
笔者在调试过程中,系统连接板上只接入1台主设
因此,一帧完整的查询/控制指令,其数据中的每 个字节占用8个时钟信号,主设备发送一条帧长度为a字 节的数据需要8×a个时钟脉冲信号;假设从设备的缓存 模块fifo和发送模块datatx完成对应的数据反馈过程所 需最少时钟脉冲信号个数为8×n。为保证系统的通信功 能正常,sck传输的时钟脉冲数应不少于该SPI总线完成 一次查询/控制所需时钟信号个数(8×(a+n))。
端口,可以简化电路设计,节省端口资源,提高设计可 具有处理复杂问题的逻辑功能),从集成性、可靠性、
靠性[3]。SPI总线主要特点:全双工;可以当作主机或
兼容性等方面综合考虑,很明显最佳的设计方案就是从
者从机工作;提供频率可编程时钟;发送结束中断标 设备使用FPGA进行数据采集、处理。
志;写冲突保护;总线竞争保护等。基于以上特点结合
可能会出现B失效、A失效,甚至两者失效的情况。然
正处于电平跳变中,以致主设备采集到不确定的无效数
而,在A、B都能正常运行的情况下,互调A、B位置,
据。
也可能出现上述三种失效现象。或者将从设备B换成完
结合图6可以发现,datatx模块通过提前发送数
全相同的从设备C,这种新的组合相较于之前A+B的组
据,能有效的解决该问题,数据传输示意图如下。
相关文档
最新文档