导言
SPI(Serial peripheral interface——串行设备接口)是摩托罗拉公司推出的一种同步串行通讯接口。用于MCU和外围扩展芯片之间的串行衔接,现已开展成为一种工业规范 。一路SPI数据总线只占用3或4个I/O(Master Output Slave Input,MOSI; Master InputSlave Output, MISO;Serial Clock,SCK;Chip Select,CS)端口,能够简化电路规划,节约端口资源,进步规划牢靠性 。SPI总线首要特色:全双工;能够当作主机或许从机作业;供给频率可编程时钟;发送结束中止标志;写抵触维护;总线竞赛维护等。依据以上特色结合FPGA的特性,通过将SPI总线与FPGA相结合,可使SPI总线的运用愈加灵敏多变,为处理通讯技能问题供给更好的挑选和可行计划。
结合已交给的项目的经历(项目中主设备选用ARM芯片,从设备选用FPGA),讨论依据FPGA的SPI总线传输计划在实践中的运用,拓宽SPI技能的运用规模,一起对规划中遇到的具体问题提出了有用的处理计划。
1、体系剖析和规划
体系的SPI总线衔接如图1所示。体系中的各从设备能够依照实践需求,实时收集不同的状况数据信息,并按SPI总线通讯办法上报给主设备,主设备将终究的处理成果上报PC端,然后完结对体系的实时监控。
从设备需求收集的数据品种繁复,相关于运用单片机的单线程串行的作业办法来进行多种数据收集处理的作业计划,运用FPGA的作业办法显然是更优的挑选(并行处理才干、运转速度快、管脚多、体积小,一起具有处理杂乱问题的逻辑功用),从集成性、牢靠性、兼容性等方面归纳考虑,很明显最佳的规划计划便是从设备运用FPGA进行数据收集、处理。
主设备首要向从设备发送查询指令,一起将收集到的数据进行有用性判别并上传电脑。相关于从设备来说,主设备处理进程比较简单,挑选较灵敏、功耗低的ARM嵌入式最为适宜。而且ARM具有现成的SPI接口驱动供开发者运用,大大降低了开发本钱。
2、体系时序
时序是通讯体系中首要考虑的要素之一,时序无误才干保证数据在传输、处理进程中的有用性,使体系坚持正常的作业状况。依据时序的不同,SPI总线有4种作业形式(SPI0,SPI1,SPI2,SPI3),见图2,其间SPI0和SPI3两种作业形式运用的最广泛。通过装备体系的SPI总线的时钟极性(CPOL)和时钟相位(CPHA)可得到满意传输要求的作业形式。
当CPOL=0,串行同步时钟的闲暇状况为低电平;当CPOL=1,串行同步时钟的闲暇状况为高电平。可见,CPOL关于SPI总线传输协议没有较大的影响。
传输协议的形式挑选首要通过装备时钟相位(CPHA)完结。当CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;当CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。保证SPI主、从设备之间的正常通讯,就有必要满意二者的时钟相位和时钟极性共同 [4] 。
现以某项目(选用SPI0形式)为例,挑选其间1路SPI总线并对其时序进行具体论述。时序图如图3。
片选信号cs在主设备发送数据前跳变为低电平,使被选中的从设备SPI通讯端口敞开;从设备完结数据发送的一段时刻后,片选信号cs跳变回高电平,从设备SPI通讯端口封闭。主设备发送查询/操控指令的数据帧长度为a个字节,每个字节包括8位有用数据,每位数据占用一个时钟脉冲信号;当有数据发送时,sck伴有对应的同步时钟信号,无数据发送则无时钟脉冲信号。一起,相邻字节间存在时刻距离t,在t时刻内sck无时钟脉冲,即同步时钟信号是一份一份的,每份包括8个时钟脉冲。
因而,一帧完好的查询/操控指令,其数据中的每个字节占用8个时钟信号,主设备发送一条帧长度为a字节的数据需求8×a个时钟脉冲信号;假定从设备的缓存模块fifo和发送模块datatx完结对应的数据反应进程所需最少时钟脉冲信号个数为8×n。为保证体系的通讯功用正常,sck传输的时钟脉冲数应不少于该SPI总线完结一次查询/操控所需时钟信号个数(8×(a+n))。
3、技能难点及处理计划
3.1 数据同步
从图3的SPI时序图可看出,有数据才有时钟脉冲,总线的时钟不是接连而是一份一份的(每份为8个接连时钟信号),为了保证体系能正常通讯,有必要保证数据在主、从设备中同步传输,这就添加了体系在数据传输进程中的难度。
就从设备而言,有必要满意从设备在接纳/发送状况下,通过每一份时钟信号中接纳/发送的都是的一个完好且有用的字节。即主设备发送数据的每个有用字节的第1位都是在第(8×x-7)个时钟信号(x为整数,0《x《a)被从设备的接纳模块采样(上升沿采样,下同),然后顺次采样直至该字节的终究一位在第(8×x)个时钟信号被采样。一起,要求主设备接纳数据的每个字节的第1位都是在第(8×y-7)个时钟信号输出(y为整数,n》y》a),然后顺次采样直至该字节的终究一位在第(8×y)个时钟信号输出结束,如图5所示。
为了完结数据同步,能够选用如下办法:
(1) 从设备运用片选信号cs复位清零。通过片选信号cs的下降沿,触发从设备中的数据收集模块datarx、数据缓存模块fifo及数据发送模块datatx的计数清零,保证体系在片选有用后的第一个时钟脉冲开端计数,防止因计数过错形成数据采样失效。若选用第一个时钟脉冲进行计数清零,会使数据的收集滞后1位,致使收集到无效数据,形成通讯失效。
(2) 运用时钟信号sck计数。本文SPI总线选用SPI0作业形式,运用时钟信号sck的上升沿触发收集模块内部计数器计数,保证模块的数据采样同步,取得有用数据。
(3) 从设备中的数据发送模块datatx提早发送数据。
假定数据发送模块datatx在数据发送进程中,某字节的第1位在第(8×y-7)个时钟信号输出(y为整数,n》y》a,时钟信号的上升沿输出数据,下同),第八位在第(8×y)个时钟信号输出,那么将会呈现如图6所示的状况。
因为总线选用SPI0作业形式,那么主设备将通过同步时钟信号的上升沿触发数据收集,此刻收集到的数据正处于电平跳变中,致使主设备收集到不确定的无效数据。
结合图6能够发现,datatx模块通过提早发送数据,能有用的处理该问题,数据传输示意图如下。
当datatx模块在发送某个字节时,运用上一字节的终究一个时钟脉冲(第(8×y-8)个时钟脉冲)的下降沿触发该字节第1位的发送,第(8×y-7)个时钟脉冲的下降沿触发该字节第2位的发送,直至该字节第8位在第(8×y-1)个时钟脉冲的下降沿发送结束。运用这种办法,主设备在每个sck时钟信号的上升沿都能同步收集到正确的数据,保证总线通讯正常。
3.2 多个从设备并联的问题
笔者在调试进程中,体系衔接板上只接入1台主设备和1台从设备,体系能正常运转。但在接入多个从设备后(从设备的接口类型共同),会呈现一个或许几个从设备作业失效。具体表现为从设备没有任何信息反应,且毛病无规则可循:
a)与从设备刺进插槽的方位没有特定规则。例如,有A、B两台从设备,衔接板有5个插槽(编号1-5)。A刺进1,B刺进2,此刻B失效。将B顺次换至剩下插槽,或许会呈现B失效、A失效,乃至两者失效的状况。但是,在A、B都能正常运转的状况下,互调A、B方位,也或许呈现上述三种失效现象。或许将从设备B换成完全相同的从设备C,这种新的组合相较于之前A+B的组合,在接入办法完全相同的状况下又或许产生不同的成果。
b)与从设备的刺进数量没有特定规则。衔接板上从设备数量的添加或许削减,对整个体系的好坏并没有特定方向的影响。加上插槽方位对体系作业的影响也很杂乱。
为了处理这个问题,笔者做过如下顺次测验,但状况并没有产生好转,从设备仍旧没有任何信号输出:
a)将待机状况的从设备输出置高阻;
b)I/O设置上/下拉电阻;
终究笔者通过对设备内部的信号输入至信号处理部份选用SIGNALTAP进行实时剖析、调查,发现数据处理模块fifo在固定方位丢掉一个同步时钟脉冲(fifo的一切触发只与同步时钟sck有关)。通过剖析,决定在fifo中参加异步时钟参加触发和计数,毛病现象没有再次产生,多个从设备并联的问题得到了有用处理。
4、定论
运用ARM+FPGA形式搭建了SPI总线,使SPI接口技能的运用愈加灵敏多变,丰厚了体系的I/O数量,增强了体系的数据处理才干,拓宽了SPI技能的运用规模,完结了体系数据的长时间牢靠传输,为后端用户的决议计划供给了安稳牢靠的理论依据。
责任编辑:gt