控制/MCU
通用串行总线(Universal Serial Bus,USB)作为计算机上的新型接口技术,越来越受到人们的青睐。与以前的RS 232,RS 485,ISA,PCI和并行接口等接口相比,USB避免了接口体积大、接口规范不统一、不支持热插拔等缺陷,具有使计算机与外部设备连接十分方便的优点。目前,很多设备都开始使用USB接口来实现,如鼠标、键盘、打印机等。在实际设计工作当中,也越来越多地采用了USB技术,如数据采集等。USB的设计和应用已经成为现代电子设计中一个非常重要的部分。
USB是一种高效、快速、价格低廉、体积小的新型串行通信接口,其最大的特点是支持热插拔,可以在不重新启动计算机的情况下直接将USB外部设备连接到计算机并开始通信。
USB具有以下主要特点:
(1)节省系统资源。在计算机中,系统为USB主控制器分配一根中断控制线和一些输入/输出地址,USB再为外部设备分配惟一的地址。
(2)可以提供电源。计算机上的USB接口可以向外部设备提供一定的电力支持,其输出电流最小值为100 mA,最大值为500 mA,输出电压为5 V。
(3)良好的兼容性。USB规范已经有USB 1.O,USB 1.1,USB 2.O,无线USB等多个版本的协议,这些协议都有很好的向下兼容性。
(4)共享式接口。USB采用“菊花链”式的连接方式,同时支持多个设备的连接,一个USB主控制器最多可以连接126个外部设备。
CY7C68013A是Cypress公司的EZ-USB FX2LP系列低功耗版本单片机,具有和8051兼容的CPU和指令系统,同时包括USB接口和完整的USB 2.0协议引擎,并且提供了完善的固件及主机程序开发包。该单片机的CPU采用的是增强型805l内核,比标准的8051的速度快,硬件资源更为丰富,功能更强大。主要具有以下特点:
(1)具有第二个数据指针;
(2)具有第二个USATRT;
(3)I2C总线接口;
(4)8个额外的中断(INT2~INT6,WAKEUP,T2,USARTl);
(5)CPU时钟可以运行在12 MHz,24 MHz,48 MHz。
基于USB的控制系统设计主要包含两个方面的内容,分别为固件程序的开发和上位机(主机)控制界面的设计。CY7C68013A芯片采用的是一种软配置模式,即程序和数据都存放在内部RAM中,并从RAM中开始执行。
EZ-USB在没有固件的情况下列举为一个缺省的USB设备,并且将其固件和描述符等下载到EZ-USB后,开始执行固件程序,此时模拟一个物理上的断开重新连接过程。在列举为一个USB设备时,根据芯片有没有连接E2PROM,以及E2PROM中第一个字节值的不同,其处理方式有很多。主要有:不连接E2PROM的缺省设备列举、CO加载、C2加载等启动方式。在此系统的设计过程中,采用第一种方式,即芯片没有连接任何片外存储器,USB的描述符以及VID,PID和DID等均由芯片内置的逻辑提供,然后根据驱动程序中提供的VID,PID和DID把主机上对应的固件程序下载到片内的RAM中,并执行固件代码。该方式具有硬件连接简单,节省器件等特点。
整个系统的硬件框图如图1所示。可以看出USB控制系统在整个系统中起到桥梁作用,用于连接上位机和外部设备。
上位机发送控制指令给USB设备,信息处于下行状态,解码后用来控制外围设备执行相应功能。上位机需要从外设获得信息(如数据采集),信息处于上行状态,由USB设备负责控制外设并将数据传送到上位机,由上位机分析、显示。
在固件中,主要实现芯片外围设备的控制,以及对USB设备的功能描述等任务,同时负责与上位机通信,响应上位机的标准请求和自定义请求。
描述符主要是让上位机了解USB功能设备的基本配置信息和能力,如端点、接口等。在此主要使用标准描述符来说明USB设备,如设备描述符、配置描述符、接口描述符、端点描述符、设备限定描述符等。在该设备中,这些描述符的层次结构如图2所示。
系统中使用了2个配置描述符,分别为高速配置和全速配置,每个配置使用1个接口,并对应1个接口描述符,每个接口应用了4个端点,对应4个端点描述符。同时端点配置为块传输模式,2、4端点为OUT,6、8端点为IN,最大数据包长度为512 B,上位机通过O端点来操作、控制USB设备。设备描述符中VID=Ox04B4,PID=0x1304,用于指示设备供应商和产品信息,并用于上电时帮助主机加载合适的驱动程序,进而下载相应的固件程序。固件中对标准请求的响应部分,主要是让上位机能够对描述符进行读取和写操作。自定义请求响应主要实现上位机发送控制命令,来使能USB功能设备、以及执行相应的功能的目的,如DR_SendData,DR_ReadData。
固件设计流程图如图3所示。
用户初始化设备部分放在TD_Init()子程序中,负责整个USB设备的初始化过程。在定向描述符之后,需要把所用中断打开,并开启8051全局中断EA=1。由于EZ-USB设备启动需要重列举,因而需要通过设置和判断USBCS寄存器的RENUM和DISCON位来模拟设备物理上的断开和连接过程。用户外围设备控制功能的实现放在TD_Poll()子程序中,同时主循环中的SetupCommand()子程序用于接收、分析上位机的控制信号,响应上位机请求(标准请求和用户自定义请求)。
为了能够很好地控制USB设备,需要编写上位机控制界面。界面程序在VC++6.O环境下开发,该环境具有编程简单、快捷等的特点,便于开发可视化程序。Cypress公司为EZ_USB系列芯片提供了开发库CyAPI.lib,使用其中的控制函数类,可以在VC++6.0环境下开发界面程序。建立MFC(exe)工程后,在工程中加入CyAPI.lib,并且在主文件头部添加EZ-USB开发环境中提供的CyAPI.h,cyioctl.h头文件。利用库中的控制函数,如VendorID,ProductID等,可以获取USB设备的描述信息,同时也可以编写相关的控制功能程序。
(1)一个设备只能有一个设备描述符,可以有多个配置描述符,多个接口描述符,以及多个端点描述符。
(2)设备描述符中VID,PID要与驱动中的相一致,否则不能自动加载相应的固件程序。
(3)固件程序必须转换为.spt格式,用于固件加载的驱动程序和固件程序应放在一个文件夹。
(4)端点0为缺省控制端点,其可设置最大数据包长度为64 B,在设备描述符中wMaxPacketSize字段描述。
(5)传输模式有中断传输、块传输、同步传输、控制传输四类,需根据自己设计需求选择,同时注意最大数据包长度的设置。
对于USB设备,Windows操作系统要想对其实现操作,必须借助于驱动程序来实现。主机和驱动程序直接通信,交换数据,而驱动程序则和硬件资源进行通信,从而很好地控制USB设备。Cypress提供的开发环境中自带了相关的驱动程序CyLoad.sys和CyUSB.sys,可以直接使用,缩短了系统的开发周期。其中CyLoad.sys用于主机向USB设备下载固件程序,CyUSB.sys实现主机和固件程序通信。为了在CyLoad.sys的帮助下实现固件的自动下载,固件程序CyLoad.HEX必须转换为适合自动下载的CyLoad.spt文件,并且与CyLoad.sys一起放在CyLoad文件夹下,拷贝到系统system32目录下。在安装文件CyUSB.inf中设置的PID,VID必须和描述符中的一致,使得能够自动加载对应固件。
实验系统,采用CY7C68013A-56pin作为USB设备芯片,实现控制LED和读取I/O数据功能。由于芯片采用3.3 V电压供电,因此可以从主机USB口取电,经LM317电压调整芯片转换为3.3 V,也可外接3.3 V电压供电。在PD口接LED,显示TD_Poll(void)实现的功能(灯亮/灭间隔300 ms),而PA口LED用于显示判断主机发送数据。PB口接高/低电平,用于主机读取该口数据,可以验证主机接收数据的正确性。
初始化子程序:
主机控制界面运行如图4所示。
界面中的USB Information分类框中为USB描述相关信息,由主机通过标准请求获得。Operation分类框中为主机向USB设备PA口发送数据,以及从USB设备的PB读取数据的情况。
采用CY7C68013A实现USB控制系统,无论在固件程序编写、主机控制界面开发,以及设备驱动程序的使用等方面,都具有简单、方便的优点。系统采用设备固件存放在主机上的方法,不但简化了硬件设计,节约元器件成本,而且也提高了设备的可靠性。同时,此法对以后固件升级或更改设备功能,也十分简便,只需把固件修改好并放到主机相应位置,在USB设备再次插入主机时,就可以实现固件自动更新。文中给出一些设计过程中需要注意的关键问题,对于USB控制设备的设计具有一定的指导作用。上述系统和程序经过实际运行,工作稳定、可靠。
全部0条评论
快来发表一下你的评论吧 !