天线|RF射频
直播中

颜珍可

7年用户 196经验值
私信 关注
[问答]

请问怎样去设计一种USB2.0数据传输系统?

怎样去设计USB2.0数据传输系统的硬件?
怎样去设计USB2.0数据传输系统的软件?

回帖(1)

冯媛媛

2021-6-3 11:07:24
  1 引 言
  USB支持主计算机与许多可同时访问的外设之间进行数据交换,使外设的连接具有单一化、即插即用、热插拔等特点,已成为个人笔记本电脑和台式机的标准配置接口。Cypress公司的EZ-USB FX2是一款集成 USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控 制器和可编程的外围接口。每条指令占四个时钟周期,在48M晶振下工作时,单指令周 期为83.3ns,执行速度远快于标准的8051单片机。本文的数据传输模块采用CY7C68013 高速芯片设计的USB接口可以实现外部的存储测试电路数据的快速下载,并且上传至计 算机保存,显示,处理。这里介绍CY7C68013的GPIF接口功能及其在设计中的实现机理。
  2 硬件连接设计
  2.1 系统连接框图及硬件各部分功能
  系统的连接框图如下图1所示:主要有计算机主机USB接口,程序存储EEPROM,内置MCU的USB接口芯片,电平转换部分组成。
  硬件各部分功能:
  设备接口:实现模块与测试电路的连接;
  电平转换:单片机的输出和工作电压为3.3V的电压值,而设备的电压是3.3~5V之间,电平转换器件实现电压值的匹配;
  USB总线控制器:采用CY7C68013接口芯片的GPI接口模式完成控制信号的发送和16bit宽度数据的读取;
  串行EEPROM:存储单片机固件,并被下载到单片机。
  
  2.2 硬件部分工作过程
  硬件工作过程:
  数据传输中核心器件是CY7C68013控制器芯片,主要完成USB的事务处理和单片机的控制功能。系统采用总线供电模式,数据传输模块连接到计算机后,上电复位后,USB功能设备以全速的模式进行设备的识别并枚举。设计中将程序存储到串行EEPROM中,主芯片首先检测I2C总线上的EEPROM,判断其首字节是0xC2,下载固件和USB的描述符标装入到自身的RAM中执行,并且根据信息设置定义设备,完成了重枚举。 CY7C68013包含8.5KB的片上RAM,可以用于“软配置”,4KB的FIFO存储器可以给4个端点共享。实现数据的高速读取和传输,根据实际的需要,设计中配置了端点2采用三缓冲,使用3KB,端点4采用双缓冲使用1KB。
  采用GPIF主机模式,EZ-USB FX2由软件编程输出读写控制波形,FD[15:0]双向数据总线12位与外部测试电路的静态存储器(SRAM)的相连,CTL[5:0]输出可编程控制信号,如SRAM的读写选通信号等。数据在GPIF控制下读入到CY7C68013后,在软件的配置下,完成1024字节的最大封包,输入计算机,由主机端的主控制器的串行接口引擎完成数据流串行化和解码。
  3 系统软件设计
  3.1 GPIF接口模式
  FX支持3种接口方式:端口、Slave FIFOs和可编程接口GPIF。
  根据系统需要,设计中采用GPIF接口模式将CY7C68013设为FIFO READ和SINGLE READ两种模式, 让GPIF中的端点FIFO与USB通信中端点缓冲直接建立连接, 数据的传送不再需要CPU 的参与。 根据外部测试电路的要求,适用于不同测试环境预设电路的CPLD编程信号,根据实际的测试信号的频率采用不同的采样频率,设定不同的触发电平,使用单次写模式可以完成编程数据的输出。针对的测试数据采用FIFO多次读模式,实现数据的批量传输。设计中采用48M晶振,由于静态存储器的在使能信号(OE)的上升沿后推地址(Adr),而数据在总线上的保持时间至少需要85ns,因此在波形设计中数据有效时间应该为4个时钟周期,才能够满足地址有效的要求。静态存储器读操作时序图如图2所示。
  
  3.2 固件程序设计
  固件是指存储在USB接口芯片或微控器中的代码,用于控制硬件系统运行,各种USB标准请求的处理,以及USB闲置模式的电源管理服务,实现主机与外设之间的通信和数据传输。主要是根据系统需求设计相应的程序框架图。Cypress 公司为FX2 固件开发提供了一个固件库和固件框架,都是在KeilC51集成开发环境下开发的,固件库提供了一些常量、数据结构、函数来简化用户对芯片的使用。C 语言环境, 同时保留了汇编代码高效、快速的特点,将代码在KeilC51环境中进行编译。编译通过后,将固件代码下载到USB单片机中,就可以实现GPIF多字节读等操作。在程序起始时,固件架构会执行下列步骤:
  (1)首先,设置所有的内部状态变量。
  (2)然后,调用用户的初始设置函数TD_Init()。待返回后固件架构就会设置USB接口成为未配置的状态,并且使能中断。
  (3)接下来,在1秒的间隔内开始重新设备列举(ReNumerate)设备,并直到设置(SETUP)封包收到端点0为止。
  (4)一旦SETUP封包被检测到,固件架构就会启动与PC主机合作的工作分配器。而这个工作分配器就会顺序重复执行下列的工作:
  ①调用用户函数TD_Poll()。
  ②判断标准设备请求是否决定。如果已决定,它将解析所收到的命令请求并加以响应。
  ③判断USB核心是否己经报告了USB中止(suspend)事件。
  用户需要编写TD_Poll()中的代码完成特定的功能,判断USB设备枚举的状态决定每次出发FIFO波形文件的次数,数据短包的处理方式等,实现数据的读取。
  3.3 应用程序的设计
  应用程序编写的关键是如何实现从USB设备读取指定数量的数据以及向其发送指定的数据。另外,还有向USB设备发送USB标准设备请求和特定的命令,包括厂商定义的命令和用户自定义的命令。
  大型的应用程序大部分是很多模块组成, 这些模块完成相对独立的功能,协作来完成整个软件系统的工作。部分模块的功能较为通用, 在构造其它软件系统时仍会被使用。测试系统的应用程序采用VisualBasic6.0编写,具有界面友好,操作简单的特点。
  动态链接库文件的使用,需要在应用程序的全局定义变量定义模块中调用。dll文件, 应用程序会在其所在目录和系统目录下查找。dll。在声明过程中需要注意数据类型的匹配问题。
  Public Declare Function
  BulkRead Lib “DLL68013.dll” (ByVal pipenum As Long, ByRef rec As Integer, ByVal length As Integer) As Integer
  Public Declare Function BulkWrite Lib “DLL68013.dll” (ByVal pipenum As Long, ByRef send As Byte, ByVal length As Integer) As Long
  Public Declare Function OpenDevice Lib “DLL68013.dll” () As Integer
  设计中结合实际需要,主要操作由动态链接库文件完成,应用程序的主要功能包括错误操作提示,接收由动态链接库读取的数据传回主界面实现数据的格式转换,数据的显示、处理等。
  利用Cypress公司的USB2.0专用接口芯片CY7C68013, 完成了采用GPIF模式的通用数据传输模块的硬件与软件设计。针对原有的人机界面需要,开发了动态链接库,可以提供给不同语言编写的主机端的应用程序使用。
  在系统测试中,利用信号发生器产生输入信号为正弦波,频率10Hz,测试系统的采样频率125Ksps,通过系统电路采样,存储,数据通过传输模块传入计算机,根据采集数据恢复的信号与原始信号比较,失真较小,噪声水平低,采集数据的有效位数达到12位,实验结果表明,实际的传输速率120Mbps,满足了测试系统的数据传输要求。与实验测试系统联合调试,实际采样波形如图3所示。
  
  芯片的可编程特性提高了系统工作的可靠性, 数据不会丢失,便于数据的传输和处理。另外,USB设备具有“热插拔”和即插即用的特性具有较高的实用价值,设计的USB数据传输模块适合于旧测试系统接口的改造。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分