基于LabVIEW的SPI串行总线接口的实现
2014-07-24赵骁周斌赵华
赵骁+周斌+赵华
摘 要: 为了便于具有SPI串行总线接口设备的调试,使用美国国家仪器公司(NI)的标准模块化设备模拟SPI串行总线接口信号;采用图形化编程语言LabVIEW得到数字波形格式的SPI信号,并设计程序对此格式的信号进行解析,利用NI公司的硬件设备实现该信号的输入与输出。经过实验测试,输出SPI接口信号的频率范围是0.5 Hz~500 kHz,输入的频率范围是0.5 Hz~900 kHz,误差小于10 ns,该方法可以用于SPI串行总线接口设备的调试中。
关键词: SPI接口; 串行总线接口; LabVIEW; 测试
中图分类号: TN710?34; TP319 文献标识码: A 文章编号: 1004?373X(2014)14?0138?04
Implementation of SPI serial bus interface based on LabVIEW
ZHAO Xiao1, ZHOU Bin2, ZHAO Hua2
(1. Nanjing University of Aeronautics and Astronautics, Nanjing 210016, China; 2. National Space Science Center, Beijing 100190, China)
Abstract: In order to debug the device with SPI serial bus interface conveniently, the standard modular device of National Instruments (NI) was used to simulate SPI serial bus interface signals, LabVIEW was used to get the SPI signals in digital waveform format, a program was designed to analysis these signals, and the hardware equipments of NI was utilized to realize the input and output of these signals. The experimental testing result shows that the frequency range of the output signal from the SPI interface is 0.5 Hz to 500 kHz, the input frequency range is 0.5 Hz to 900 kHz, the error is less than 10 ns. This method can be used to debug SPI serial bus interface device.
Keywords: SPI interface; serial bus interface; LabVIEW; testing
SPI(Serial Peripheral Interface)[1]总线技术是Motorola公司提出的一种同步串行外设接口,是接线简单、通信效率高、全双工、同步的通信总线。美国国家仪器公司(NI)开发了一种基于LabVIEW的、可用于实验室或现场信号的、使用网络接口与计算机进行相连的cDAQ平台,采用高速I/O通用模块可进行数字I/O的输入和输出。本文使用NI公司的cDAQ平台和高速I/O模块实现了SPI信号的通信,以便于SPI接口的调试。
1 SPI接口的调试系统的总体设计
SPI总线主要应用在FLASHRAM,A/D或D/A转换器、网络控制器、MCU、实时时钟、EEPROM,还有数字信号处理器和数字信号解码器之间[2]。一般由四个信号组成:时钟信号(SCLK);从机选择使能信号(CS),数据输出信号(SDO);数据输入信号(SDI)[3]。典型结构如图1所示。当CS有效时,在SCLK上升沿t0时刻(或者下降沿t1时刻)SDO上的电平数据被发送出去,SCLK下降沿t1时刻(或者上升沿t0时刻)SDI上的电平被接收进来,其基本时序如图2所示[4]。
图1 SPI的典型结构
图2 SPI信号基本时序
本文的调试系统的总体实现框图如图3所示。硬件驱动函数构成的硬件控制程序,用于控制硬件接口输入/输出SPI信号,输出的SPI信号由LabVIEW产生,输入的SPI信号使用LabVIEW进行解析。
图3 调试系统的总体实现框图
2 SPI信号的硬件设计
本文的测试平台如图4所示,计算机与cDAQ平台相连,cDAQ平台的数字I/O口与外部SPI接口相连[5]。通过软件实现把串行SPI信号转变成并行信号进行输入/输出,如图5所示。
图4 测试平台
图5 串行信号转变成并行信号
选用NI公司的NI CompactDAQ硬件平台的机箱NI 9184,模块是可配置成8路数字输入或者8路数字输出或者4路数字输入、4路数字输出的NI 9401高速I/O模块,它的8路I/O口并行进行传输,自身具有同步性好的优点,特点如表1所示。
表1 NI9401的特点
由表1可知它的速率最高为100 MHz,即最快10 ns采样1次,理论上,如果2位为1个周期,那么它的最高输入与输出频率为5 MHz,可以满足大多数信号对频率的要求;输入/输出电平是基本的TTL电平;工作温度范围广。
NI 9401的驱动采用NI公司针对这种模块提供的官方驱动接口DAQmx。DAQmx驱动函数[6]是以下5个:DAQmx创建虚拟通道、DAQmx开始任务、DAQmx写入、DAQmx读取及DAQmx停止,如图6所示。各个函数功能如表2所示。利用DAQmx驱动接口可以构建SPI输入和输出的底层硬件驱动模块。
图6 DAQmx接口驱动函数
表2 DAQmx接口函数功能
3 SPI信号的软件处理
3.1 SPI信号的LabVIEW实现
本文使用NI公司的LabVIEW软件进行编程实现。LabVIEW是NI公司提出的一种图形化编程语言,使用各种函数模块代替传统的文本形式进行编程,分为前面板和程序框图,前面板放置直观显示的控件,程序框图使用内部的函数库实现数据流方式的编程[7]。LabVIEW具有强大的库函数,本文使用SPI库函数实现SPI信号,主要使用的函数有3个,初始化、发送和关闭,如图7所示。编程时需要对函数的变量进行设置,变量的意义如表3所示。
图7 SPI主要库函数
表3 SPI函数变量功能
“初始化”函数实现了两个功能,它使输入的时间值转换成需求的采样时钟并强制使参数符合输入的SPI时钟频率,创建了具有SPI波形成分的波形簇;“发送”函数模拟数据向外传输,可以自动匹配即将输出的无符号整型数据的位数;“关闭”函数将SPI波形簇转换成数字波形进行输出。程序需要对变量进行设置,其中采样率是SCLK频率的n倍,输出的数字波形的位数是输入数据位数的n倍。假设产生SPI信号的数据位数是16位,采样率是SCLK频率的2倍,数字波形产生的流程图如图8所示。
图8 SPI数字波形产生流程图
如图8所示,第一个时钟周期,首先按要求生成CS信号位,并按上升沿还是下降沿生成SCLK信号位,改变输出的第1个数据位,延时1位;改变SCLK信号位,延时1位;第2~16个时钟周期,首先改变SCLK信号位和数据位,延时1位,之后改变SCLK信号位,延时1位,数据输出完成;最后改变SCLK信号位和CS信号位,输出结束。使用SPI库函数实现的SPI信号的前面板和程序框图如图9所示,图中显示了生成的SPI信号。
3.2 数字波形格式的SPI信号的解析
解析数字波形SPI信号中的数据信息的设计思路如图10所示。由图10可知,首先检测CS信号是否有效,然后检测SCLK信号的上升沿,在上升沿到来时存储DATA数据,直到CS信号无效,结束存储,程序框图如图11所示,测试结果如图12所示。
图9 SPI信号LabVIEW实现
图10 解析数字波形格式的SPI信号的设计思路
图11 数字波形格式的SPI信号解析程序
图12 数字波形格式的SPI信号的解析结果
3.3 SPI信号的硬件控制程序
SPI信号的硬件控制程序的设计思路如图13所示[8?10]。输出SPI信号的硬件控制程序如图14所示,输入SPI信号的如图15所示。
4 SPI通信接口的测试
测试分为SPI信号的输出和SPI信号的输入,如图16和图17所示。
图13 硬件控制程序的设计思路
图14 输出SPI信号的硬件控制程序
图15 输入SPI信号的硬件控制程序
图16 500 kHz的SPI波形
图17 接收SPI信号结果
4.1 SPI信号输出
测试所使用的程序如图14所示,通过改变采样率的大小设置输出频率,示波器采集的最大频率输出波形如图16所示,其中通道1是CS信号,通道2是SCLK信号,通道3是SDO信号。
NI 9401理论上输出的最大频率范围为0.5 Hz~5 MHz,实际输出的结果不仅由NI9401的采样率决定,还与PC机的内存、写入模块的速率、模块的缓存等有关,需要测量实际输出的频率范围。改变采样频率,测试硬件可以输出的频率范围,结果为0.5 Hz~500 kHz,由图16中可以看到,在输出最大频率时,SPI信号的同步性依然非常好,误差小于10 ns,所以生成的信号可以很好地应用在工程实际中。
4.2 SPI信号输入
测试所用的程序如图15所示,使用3路数字I/O接收3路SPI信号,通过改变采样率接收不同频率的SPI信号,测试结果如图17所示,接收到的SPI信号是数字波形的数据格式,然后使用图11所示的解析程序进行解析。通过改变输入信号的频率,测试程序可以接收到的频率范围,测试结果频率范围为500 mHz~900 kHz,这也是由于硬件的传输速率、缓存等因素造成的。
5 结 论
为了便于具有SPI信号的接口的调试,本文在LabVIEW开发环境下采用SPI库函数,使用NI9184和NI9401实现了SPI信号的输入和输出。使用本文的方法,输出频率范围是0.5 Hz~500 kHz,误差小于10 ns,输入频率范围是0.5 Hz~900 kHz。本方法方便进行功能扩展,对cDAQ的输入/输出模拟具有参考价值,可以很好地应用于实际工程开发。
参考文献
[1] 易志明,林凌,郝丽宏,等.SPI串行总线接口及其实现[J].自动化与仪器仪表,2002(6):45?48.
[2] 左东广,魏瑞轩.SPI接口技术及应用[J].工业控制计算机,2001,14(2):9?10.
[3] 任志斌,车长征.串行外设接口SPI的应用[J].电子技术应用,2002,29(10):20?22.
[4] 孙丰军,余春暄.SPI串行总线接口的Verilog实现[J].现代电子技术,2005,28(16):105?106.
[5] 白云,高育鹏,胡小江.基于LabVIEW的数据采集与处理技术 [M].西安:西安电子科技大学出版社,2009.
[6] 张兰勇,孙健,孙晓云,等. LabVIEW程序设计基础与提高[M].北京:机械工业出版社,2013.
[7] 李庆亮,司徒忠,郑莹娜,等.基于LabVIEW和通用I/O卡的数据采集系统的实现[J].机械开发,1998(4):69?70.
[8] 吕向锋,高洪林,马亮,等.基于LabVIEW串口通信的研究[J].理论与方法,2009,28(12):27?30.
[9] 孟武胜,朱剑波,黄鸿,等.基于LabVIEW数据采集系统的设计[J].电子测量技术,2008,31(11):63?65.
[10] 廖传书,韩屏.基于LabVIEW的USB数据采集系统的实现[J].工业控制计算机,2004,17(17):23?24.
测试所用的程序如图15所示,使用3路数字I/O接收3路SPI信号,通过改变采样率接收不同频率的SPI信号,测试结果如图17所示,接收到的SPI信号是数字波形的数据格式,然后使用图11所示的解析程序进行解析。通过改变输入信号的频率,测试程序可以接收到的频率范围,测试结果频率范围为500 mHz~900 kHz,这也是由于硬件的传输速率、缓存等因素造成的。
5 结 论
为了便于具有SPI信号的接口的调试,本文在LabVIEW开发环境下采用SPI库函数,使用NI9184和NI9401实现了SPI信号的输入和输出。使用本文的方法,输出频率范围是0.5 Hz~500 kHz,误差小于10 ns,输入频率范围是0.5 Hz~900 kHz。本方法方便进行功能扩展,对cDAQ的输入/输出模拟具有参考价值,可以很好地应用于实际工程开发。
参考文献
[1] 易志明,林凌,郝丽宏,等.SPI串行总线接口及其实现[J].自动化与仪器仪表,2002(6):45?48.
[2] 左东广,魏瑞轩.SPI接口技术及应用[J].工业控制计算机,2001,14(2):9?10.
[3] 任志斌,车长征.串行外设接口SPI的应用[J].电子技术应用,2002,29(10):20?22.
[4] 孙丰军,余春暄.SPI串行总线接口的Verilog实现[J].现代电子技术,2005,28(16):105?106.
[5] 白云,高育鹏,胡小江.基于LabVIEW的数据采集与处理技术 [M].西安:西安电子科技大学出版社,2009.
[6] 张兰勇,孙健,孙晓云,等. LabVIEW程序设计基础与提高[M].北京:机械工业出版社,2013.
[7] 李庆亮,司徒忠,郑莹娜,等.基于LabVIEW和通用I/O卡的数据采集系统的实现[J].机械开发,1998(4):69?70.
[8] 吕向锋,高洪林,马亮,等.基于LabVIEW串口通信的研究[J].理论与方法,2009,28(12):27?30.
[9] 孟武胜,朱剑波,黄鸿,等.基于LabVIEW数据采集系统的设计[J].电子测量技术,2008,31(11):63?65.
[10] 廖传书,韩屏.基于LabVIEW的USB数据采集系统的实现[J].工业控制计算机,2004,17(17):23?24.
测试所用的程序如图15所示,使用3路数字I/O接收3路SPI信号,通过改变采样率接收不同频率的SPI信号,测试结果如图17所示,接收到的SPI信号是数字波形的数据格式,然后使用图11所示的解析程序进行解析。通过改变输入信号的频率,测试程序可以接收到的频率范围,测试结果频率范围为500 mHz~900 kHz,这也是由于硬件的传输速率、缓存等因素造成的。
5 结 论
为了便于具有SPI信号的接口的调试,本文在LabVIEW开发环境下采用SPI库函数,使用NI9184和NI9401实现了SPI信号的输入和输出。使用本文的方法,输出频率范围是0.5 Hz~500 kHz,误差小于10 ns,输入频率范围是0.5 Hz~900 kHz。本方法方便进行功能扩展,对cDAQ的输入/输出模拟具有参考价值,可以很好地应用于实际工程开发。
参考文献
[1] 易志明,林凌,郝丽宏,等.SPI串行总线接口及其实现[J].自动化与仪器仪表,2002(6):45?48.
[2] 左东广,魏瑞轩.SPI接口技术及应用[J].工业控制计算机,2001,14(2):9?10.
[3] 任志斌,车长征.串行外设接口SPI的应用[J].电子技术应用,2002,29(10):20?22.
[4] 孙丰军,余春暄.SPI串行总线接口的Verilog实现[J].现代电子技术,2005,28(16):105?106.
[5] 白云,高育鹏,胡小江.基于LabVIEW的数据采集与处理技术 [M].西安:西安电子科技大学出版社,2009.
[6] 张兰勇,孙健,孙晓云,等. LabVIEW程序设计基础与提高[M].北京:机械工业出版社,2013.
[7] 李庆亮,司徒忠,郑莹娜,等.基于LabVIEW和通用I/O卡的数据采集系统的实现[J].机械开发,1998(4):69?70.
[8] 吕向锋,高洪林,马亮,等.基于LabVIEW串口通信的研究[J].理论与方法,2009,28(12):27?30.
[9] 孟武胜,朱剑波,黄鸿,等.基于LabVIEW数据采集系统的设计[J].电子测量技术,2008,31(11):63?65.
[10] 廖传书,韩屏.基于LabVIEW的USB数据采集系统的实现[J].工业控制计算机,2004,17(17):23?24.