1 系统总体设计
该系统总体结构图如图1所示,系统大致可分为3个部分。其中FPGA主要完成通信接收机的信号捕获跟踪、载波恢复、定时同步、图像数据下传、测控指令上传以及USB芯片端点FIFO的读写控制。PC端的控制终端主要完成图像数据的接收和处理、测控指令的生成、GUI交互界面的更新、重要参数的记录和备份。Cypress FX2LP芯片主要完成数据的双向传递以及与PC间的“问答”逻辑的实现。Cypress FX2LP芯片一方面要配置端点相关寄存器和读写缓存中的数据,另一方面通过端点0“回答”PC终端程序关于内部缓存中数据状态情况的查询,而且在数据不满足传输指定格式的时候,还要将数据包修改成符合传输设定的格式的数据包。
FPGA采用Xilinx公司的Spartan-6系列芯片,考虑到遥测指令和图像数据的优先级别,采用中断模式控制器对USB的端点FIFO进行读写控制。当没有遥测指令需要上传的时候,FPGA中的FIFO读写控制器不断的将图像数据写入到USB的端点FIFO中;当FIFO读写控制器检测到USB端有遥测指令需要上传的时候,即暂缓图像数据的写入,将图像数据缓存在内部RAM中,释放读写总线,然后开启读取FIFO的控制进程将遥测指令读入到FPGA的暂存FIFO中。
2 系统硬件设计
2.1 CY7C68013A芯片简介
CY7C68013A为Cypress公司的一款高性能的USB2.0微控制器,其内部集成了USB2.0收发器、增强型的8051核、智能串行接口引擎(SIE)、4个片上FIFO和16KBRAM、通用可编程接口(GPIF)。该芯片支持全速(12 Mbps)和高速(480Mbps)两种速率的数据传输。其内嵌的增强的8051处理器支持两个USART、3个定时器/计数器、扩展的中断系统以及I2C协议总线外设。CY7C68013A支持3种接口模式和外部器件进行通信,分别是:Ports模式,GPIF Master模式和Slave FIFO模式。
2.2 FPGA接口模块设计
在本系统中的CY7C68013A采用异步SlaveFIFO的工作模式。图2给出了CY7C68013A和Spartan-6的硬件连接图。其中,USB_FLAGA(B/C)为CY7C68013A输出的状态标志信号,在USB固件中可以灵活的将它们配置为端点FIFO的状态满、空或者任意可编程的标志位;USB_SLOE、USB_ SLRD、USB_WR组合完成对CY7C68013A端点FIFO的读写时序控制;USB_FD为双向的数据总线;USB_PKEND为数据打包控制信号。
FPGA接口模块设计主要包含上行缓存、下传缓存、双向FIFO逻辑控制逻辑设计。其中双向的FIFO逻辑控制完成对CY7C68013A的端点FIFO进行数据的读写操作,并且完成从下传缓存中读取数据以及把上传的数据写入到上传缓存的时序控制。本设计中采用两个并行的状态机来控制,两个状态机分别实现从USB端点FIFO读取数据并写入到上行缓存,从下行缓存中读取数据并将数据写入到相应的端点FIFO中。考虑到下行图像数据和上行遥测控制指令的优先级,将两个状态机之间的信息交互设计成在中断模式下运行,以此来解决对数据总线的共享问题。
读取USB端点FIFO控制状态机如图3所示。图中小圆圈标注的状态转换条件的意义为:a表示USB端点FIFO中没有需要读取的数据或者上行缓存阻塞;b表示没有检测到读取请求ACK的有效信号;c表示检测到USB端点FIFO中无待读取数据;d表示在状态S4的情况下,检测到USB端点FIFO中无待读数据的次数超过预先设定的阈值VT。该控制状态机共包含了8个状态。其中,Idle为初始状态;S2状态完成是否接收到读取请求ACK信号,如果收到则转入S3进入读取数据的流程,反之,则停留在该状态等待回应;S3状态为读取数据准备地址信号,并输出地址信号;S4状态再次确定是否有数据需要读取;S5完成从USB端点FIFO中读取数据到内部寄存器中;S6完成将内部寄存器的数据写入到上行缓存中;S7完成判断是否需要(能)继续读取数据,若需要(能)继续读取,转入状态S5,反之,回到Idie状态等待下次读取的启动。
写端点FIFO控制状态机如图4所示。图中小圆圈标注的状态转换条件的意义为:a表示读取USB端点FIFO的标志有效,说明数据总线被占用;b表示检测到USB端点接收数据FIFO中的数据已填满。该状态机中共包含了8个状态,其中Idle为初始状态,判断是否有读取数据请求信号,若有转入对读取请求中断处理状态S1,反之,转入状态S3开始数据的写入进程;S2状态等待读取数据结束,释放数据总线,转入状态S3;S4从下行缓存中读取数据,存入到内部寄存器中;S6将内部寄存器中的数据写入到USB端点FIFO中;S7判断是否需要(并且数据总线空闲、端点FIFO中未满)继续读取数据,若需要(能)继续读取,转入状态S4,反之,将打包信号USB_PKTEND置为有效并且回到Idle状态启动下一次写状态机的运行。
航空航天测控设备因为其特殊的应用环境,常常遭受强磁场、空间强粒子流或者单粒子翻转效应等特殊干扰的影响。所以在上面的状态机的设计中,对重要的触发信号和标志位信号进行了多次间隔性冗余保护确认。如在读取控制状态机中,在S4状态下再次对USB端点FIFO中是否有需要读取的数据进行判断,是为了防止因为PCB电气特性不稳定或者偶然的空间电磁干扰导致之前启动读取数据的进程为误判,而在此再次确定该信号的有效性,这样设计增强了系统的容错性和抗干扰能力。类似的容错思想在写端点FIFO控制状态机的S1状态也可以体现出来。
2.3 USB驱动程序
Cypress FX2开发包中提供了通用的驱动程序,通用驱动程序完成与外设和用户应用程序的通信和控制,微处理器根据新的设置安装通用驱动程序,重新枚举外设为一个新的USB设备。
3 系统软件设计
3.1 固件程序设计
CY7C68013A芯片的固件程序运行在芯片内部,主要完成对芯片工作模式的配置以及处理主机的USB设备请求。Cypress提供了固件程序的开发框架,开发人员只需要按应用背景和需求对所给框架内的程序做细化和修改即可。USB传输可分成数据传输和控制传输,其中数据传输由大端点(EP2/4/6/8)完成,控制传输由小端点(EPO)完成。在固件程序中,TD_Poll()为数据处理程序,处在主函数的While()循环中。该函数包含实现特殊任务的代码,设备运行时将被重复调用。
在本系统中,我们将EP2配置为Bulk传输模式的OUT端点,其端点缓存为512Byte,两级缓存;EP6配置为Bulk传输模式的IN端点,其端点缓存为512Byte,四级缓存。并且把EP6FIFO配置为AUTIN模式,其AUTOINLEN配置为512Byte。固件程序还必须完成对PC控制终端发送来的USB控制传输请求的响应。端点0是CY7C68013A中唯一的控制端点,它是一个可完成双向控制传输的端点,只有它才能处理SETUP指令。完成主机USB控制传输请求的固件程序段,只需要在所给固件框架下的函数DR_VendorCmnd()中返回EP2468STAT寄存器的值即可实现。
3.2 控制上位机设计
该测控接口的上位机软件设计采用MFC编程,MFC封装了大部分的windows API函数,采用消息循环机制处理事件。在MFC框架生成的工程中,添加上Cypress提供的CyAPI库文件,即可在工程中调用库中已经封装好的类的成员变量以及成员函数。在上位机的设计中采用了多线程编程,系统软件设计的流程图如图5所示。
在上位机软件设计中,主线程主要完成在消息循环机制下检测面板上的点击事件,以及对子线程做出的相应的控制。在主线程的初始化中,首先生成CCyUSBDevice对象,然后读取硬件配置信息以及设备的必要识别信息并显示在前操作面板上,最后建立RXfer子线程。在主线程中,当检测到Send按钮被点击时。即开始发送上行指令。此处采用同步数据传输,保证了数据传输的准确性。当主线程中检测到Start按钮被点击时,根据RXfer线程的不同状态,执行相应的操作。在RXfer子线程中,主要完成下行数据的接收、下行数据写入数据文档以及管理队列中的请求等工作。在下行数据接收线程中,我们采用了异步数据传输方式。在异步传输方式下,上位机软件发出数据请求之后,不需要等待回应,即可立即发出下一次的数据请求,这样可极大的提高上位机软件的数据吞吐速率,保证数据传输的高效率。多次的异步数据请求是利用数据请求队列来完成的,在线程函数的开始,开辟适当长度的数据请求队列,并且给他们分配相应的内存空间,然后进入到线程的循环体中。在循环体中,完成当前的队列元素中的请求数据传输并把相应数据写入数据文档之后,立即将新的数据请求塞入到该队列元素中,并且把指针更新到下一个队列元素。当数据请求失败、接受数据不成功或者循环接收数据标志位False时,首先完成队列中其他已经成功请求数据传输的数据,然后关闭文件句柄,释放相应的资源,最后终止线程。
4 系统测试结果
该通用测控通信接口用于实际测控数据的下传,实际测试面板如图6所示。
在进行测试时,首先运行该测试应用软件,完成初始化之后,在设备信息显示框中显示USB设备信息,其中包括设别的PID和VID、EndPoint配置情况、设备描述信息等信息。然后通过点击“start”按钮,建立起RXfer线程,开始接收下行传输数据。若需发送指令,在Send按钮左边的输入框中输入适当的遥测遥控指令,然后点击Send即可发送。测试系统中所接收到的数据如图7所示。
在此数据中采用了符合CCSDS航天测控标准数据格式,帧头为EB90,接下来的三个Byte为帧计数(图中显示的是000007),帧结尾标志位13AB,帧结尾标志的前两个Byte为RS译码报告输出(译码前数据是否出错,错误是否可纠)。
对该通用测控通信接口的速率和可靠性进行了测试,测试结果如表1所示。对比表中数据看出,该接口的最高的可靠的传输速率可达为8.1MB/s,对2.3MB/s和8.1MB/s的速率进行了可靠性测试,测试的结果都显示,在该速率下所设计的测控通信接口可以完成数据的可靠传输。
5 结论
该测控通信接口系统采用USB2.0协议芯片CY7C68013A和FPGA搭建了硬件平台,在FPGA状态机设计中采用中断模式的双状态机和关键标志冗余设计的思想,软件设计采用多线程的设计思想,提高了通信接口的可靠性和传输速率。该测控通信接口已用于实际测控通信系统中,实际应用表明该测控通信接口具有速率高、稳定可靠、人机界面友好等特点,达到系统设计要求,具有推广应用的价值。