微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 存储测试系统USB接口的设计与实现

存储测试系统USB接口的设计与实现

时间:07-10 来源:3721RD 点击:

0 引言

存储测试是指在对被测对象无影响或在允许范围的条件下,在被测体内置入微型数据采集与存储测试仪,现场实时完成信息的快速采集与记忆,然后回收记录仪,由计算机处理和再现测试信息的一种动态测试技术。经过近三十年的发展,存储测试技术不断成熟,已成功应用于火炮膛压测试、弹载全弹道参数测试、车辆机械运动部件工况参数测试、石油井下压力测试、爆炸冲击波场测试、人体运动及生理参数测试、载人航天测试等诸多领域,在军工测试领域和国民经济建设中发挥着重要作用。

接口电路是测试系统与外部计算机进行数据传输的通道,是存储测试系统的重要组成部分。文献表明南京理工大学和北京理工大学研究的存储测试系统主要采用串行接口,而文献表明中北大学研究的存储测试系统串口和并口兼而有之,视实际使用情况而定。众所周知,串口使用受波特率的限制,制约了存储测试系统与计算机数据传输的效率。并行传输是一种效率较高的传输方式,利用计算机并口的EPP模式可以实现大于300 KB/s的稳定传输率,然而现在大多数计算机已不再配置并口,USB接口成为计算机对外数据传输的主要通道。因此,开发适于存储测试系统集成的USB接口成为存储测试技术发展的一项重要内容。

1 USB协议及集成芯片

USB全称是通用串行总线(Universal Serial Bus),目前以USB 2.0规范应用最为普遍。USB 2.0规范的理想传输速率为480 Mb/s(60 MB/s),足以满足大多数外设的速率要求。USB 2.0是一种复杂的传输协议,这给USB接口的设计和开发带来很大难度。文献的研究表明,在应用层对数据采集系统进行USB接口设计时,可以选择集成USB协议的专用芯片进行二次开发,从而降低了系统开发难度。通过查阅大量文献,本文选用FTDI公司的FT245R芯片进行USB接口设计。

FT245R符合USB 2.0规范,具有功能强、体积小、传输速度快、易于与微处理器接口等特点,非常适合在嵌入存储测试系统中进行接口设计。FT245R可以方便地实现USB主机与外设MCU,CPLD的接口,其数据传输速率可达1 MB/s。FT245R内部集成了256 B的接收FIFO和128 B的发送FIFO,大大提高了USB主机与外设的通信质量。另外,FT245R还具备3.3 V的LDO调整器、USB数据时钟恢复PLL及USB数据收发器,且E2PR OM接口逻辑单元可外接串行存储器,以实现VID,PID,序列号和设备描述符的存储。FT245R大大简化了外围电路,使接口设计更趋于小型化,符合存储测试系统微小体积的要求。

2 接口硬件设计

USB接口设计以单片机和FT245R为核心器件,原理如图1所示。由于FT245R将涉及USB协议的高速信号全部集成在芯片内部,从而降低了系统对单片机性能的要求。本设计选用了Microchip公司的中档单片机PIC16F877,该单片机最高工作时钟为20 MHz,有5个并行I/O端口,13个中断源,完全满足同时对FT245R和存储测试系统进行控制的要求。

图1中,SRAM是集成于存储测试系统中的静态存储器,测试过程结束后,SRAM存满了测试数据。单片机在USB接口中起到桥梁的作用,其I/O端口中的PORTD以及PORTC的低四位与SRAM中的12 b数据位相连,作为数据总线。同样,单片机的PORTB端口与F245R中的8b数据位相连,成为另外一条数据总线。SRAM中3个与存取操作有关的控制信号分别与单片机的RA0,RA1和RA2相连,而FT245R的4个与数据传输有关的控制信号则与单片机PORTC端口的高四位相连。在硬件设计中,两条数据总线是有区别的。SRAM到单片机的数据总线是单向的,数据只能从存储器传向单片机。单片机与FT245R间的数据总线是双向的,既能完成测试数据的上行传输,又能完成计算机指令的下行传输。

另外,存储测试系统都是使用电池供电,为了节省有限的电源,USB接口电路可以采取由计算机供电的方法。计算机的USB口能够提供5 V电源,最大负载电流可达500 mA,完全可以满足本文设计的USB接口的用电需求。

图2是USB总线供电原理图。5 V电源自USB口的1脚输出,经电容C1和铁氧体滤波后进入DC-DC变换器LP2987,经电压变换后输出3.3 V直流电压(负载电流200 mA),供应单片机、FT245R及其外围元件。

3 软件编程

3.1 固件编程

读取数据时首先要通过计算机发送读数指令,该指令经USB接口传输至FT245R。FT245R经内部串/并转换,输出并行数据至FIFO控制器,同时将RXF信号置为低电平。单片机通过查询RXF状态判断FT245R是否有数据等待读取,RXF由高变低后,单片机将读数控制信号RD置低。FT245R在检测到RD信号变低后,迅速将FIFO控制器中的数据放在数据总线上。单片机从总线上读取数据后,首先进行判断,若为渎数指令,则单片机进入从测试系统读数的子程序。图3是单片机从FT245R读取数据的流程图。

从SRAM读取存储数据时,单片机首先置片选信号CE和读控制信号OE为低电平,测试系统的时序控制电路在OE信号的作用下推动SRAM的地址,SRAM则将对应地址的数据放在总线上。单片机读取数据总线后,判断FT245R的写允许信号TXE是否为低电平,若为低电平则进入向FT245R发送数据子程序,若为高电平说明FT245R忙,不能写数据,单片机继续判断TXE信号,直到变低为止。发送数据时,单片机首先置FT245R的写控制信号WR为高电平,然后将读取的PORTD端口的数据发送至PORTB端口,接着将WR变回低电平。之后,继续判断TXE的状态,变低后发送从PORTC端口读取的数据,完成12 b数据自测试系统读取并经FT245R发送的过程,流程如图4所示。在编程时,根据测试系统SRAM的存储容量,重复上述操作即可实现测试数据经USB接口发送至计算机。


3.2 计算机编程

计算机端程序采用VB 6.0编写,通过调用FTDI提供的动态链接库,进行读、写函数等的调用与操作。在VB程序中,首先需要在模块里声明动态链接库"FTD2XX.DLL"。然后,在主程序里需要先对FT245R进行初始化,包括打开设备、复位设备、清理缓冲区、设定等待时间等步骤,初始化流程如图5所示。其他工作参数如波特率、奇偶校验、溢出控制等使用默认设置即可。

对FT245R初始化完成后,就可以进行数据发送和接收。发送数据时,将数据赋值到发送数组,调用发送函数FT_Write,然后判断函数返回值是否等于1。若为1说明数据发送成功,否则需要重新发送。接收数据时,首先需要设定接收超时时间。然后调用FT_Getstatus函数读取接收缓冲区的状态,判断接收队列中是否有数以及是否满足设定的读取字节数阈值。若满足渎取条件,则调用读数函数FT_Read,读取当前缓冲区的数据并存入数组,否则就一直等待,直到满足读取条件或产生接收超时。若产生超时,程序自动跳出接收程序,避免陷入死循环。接收流程如图6所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top