SY2100 EZ-USB开发板使用指南
随着计算机(PC)的广泛应用,它的外部设备也越来越多,例如常见的打印机、扫描仪、游戏机、甚至摄录机、数码相机以及控制领域各式各样的外接设备,这些设备都需要一个端口与PC相连接,过去常用的方法是通过串口或并口与其连接,外围设备多了,每个外设都需要一个I/O口,这样一来,I/O口就越来越不够用了。目前的PCI/O模式中,外设通常都被映射为CPU的I/O地址,同时被分配一个中断请求(IRQ)。在有些情况也可能是一个DMA通道。系统就将这些资源分配给指定的外部设设备。现在这种地址分配形式已经成为一种标准,应用系统开发者必须根据指定的设备进行访问。
一直沿用的这种模式,有其许多不完善的地方,对于不同的I/O端口,外设开发者在设计阶段就必须指定一个或几个地址给外设使用,这给开发者带来很多不便,系统运行时也会浪费很多资源,而且外设多的时候,有可能会造成IRQ冲突。特别是工业数据采集系统,一般均使用数据采集卡来完成,一个采集卡都要占用一个PC的插槽,如果采集的系统比较复杂,采集点多了就会出现PC插槽不够的问题,用户有可能还需自行设置IRQ,使用户感到很多不便。
近年来发展起来的USB(通用串行总线)就可以较好的解决这个问题,它不仅可以解决了I/O口不够的问题,而且这种模式建立了一种新型的PC和外设的访问形式,这种方法有效地减少系统资源的浪费,也提供了更好的PC与外设的交互访问形式,而且为终端用户提供更多数量的连接端口,简化了外设与PC的连接和配置。

USB接口具有以下特点:

[1].为外设连接到PC上提供了一种简单易行低成本的解决方案。
[2].可以热拔插,设备接到PC上,系统自动检测USB设备,并自行配置应用软件并立即生效,无需用户干预。
[3].USB提供了简单易行的连接器,它可以连接任何一个USB设备。设备数量多了还可以采用集线器扩展,一个USB总线可以支持127个USB设备的连接。
[4].USB支持高速(12Mb/s)和低速(1.5Mb/s)两种传输速率。
[5].外设可以直接由USB接口提供电源。并具有电源保护功能,如果3ms内没有总线活动的话,USB将自动挂起总线状态。
[6].需要系统资源(如内存、I/O地址空间和中断请求线路)。
[7].USB数据传输包括错误检测功能,可以准确无误地传输数据。
[8].支持块传输、控制传输、中断传输和同步传输。

Cypress公司USB接口单片机简述:

由Cypress公司推出的带智能USB控制内核的51系列单片机EZ-USB 2100系列芯片,在芯片上集成了USB和C51内核两个模块,这两个模块可以协助USB开发者完成USB协议中规定的大部分通信工作,是USB设备研制的较好的器件,EZ-USB强大的串行接口引擎,增强8051内核,优越的软件支持,大大降低了USB开发难度。
EZ-USB将USB接口控制内核与单片机集成到一块芯片上,USB收发模块与USB总线接口相连,串行接口引擎负责串行信号的编译码和错误检测、USB系列控制信号操作,由USB收发模块进行数据字节传输,功能强大的USB内核自动完成USB协议的转换,大大简化了8051代码。
增强的微处理器内核在标准的8051基础上增加了许多新特性,缩短了执行时间,它利用内部RAM和程序,使EZ-USB具有软配置特性,USB主机由总线将8051的程序代码和描述符表装入RAM中,EZ-USB芯片用已下载程序中定义的外设特性进行重连接,使其成为新的USB设备。
熟悉USB设备开发的人员知道,研制期间需要花费大量的时间去熟悉USB协议,使得USB好用但开发难度很大,这给一般的开发者设置了一道门槛。而EZ-USB芯片给开发研制提供了一条便利的途径,如果熟悉C语言的微处理器开发者使用EZ-USB研制USB设备,只需少量时间熟悉EZ-USB的特性,即可轻易开发出性能优越的USB设备。

EZ-USB 2100系列芯片的特点:

[1].改进增强的8051内核,时钟为24MHz,性能可达到标准8051的5-10倍,指令系统与8051完全兼容。空闲(wasted)的总线周期被消去,一个总线周期仅含4个时钟周期,而标准的8051则为12个时钟周期。
[2].USB内核为USB设备开发者完成协议中大部分的通信工作,使开发者不需要深入了解USB的低级协议即可顺利开发出所需要的USB设备。
[3].芯片集成了USB外设接口的硬件,包括非易失存储器(EPROM、EEPROM、FLASH、ROM)、微处理器、RAM、SIE(串口接口引擎)、DMA等全部功能模块。
[4].外设没有通过USB接口连接到PC机之前,外设的固件存储在PC机上。如果外设一旦连接到PC机上,PC机就会查询外设的属性,读取外设的设备描述符,然后将该外设的固件下载到EZ-USB的RAM中并执行,也即再枚举过程。
[5].易用友好的开发工具,固件可独立于驱动程序被测试,驱动程序和固件开发可独立进行,方便开发者工作,加块开发速度。
[6].快速外部数据块传输,指针自动增量和快速传输模式。
[7].自动向量中断。
[8].Control传输的Setup和Data部分有各自的缓冲区。
[9].除了以上的需要特性外,改进的8051内核还有如下优点:第2个数据指针可用于存储器块之间的传输。第2个UART。第3个16位定时/计数器。与非多路复用16位地址总线的高速存储器直接接口。增加了8个中断源(INT2-INT6、PFI、T2及UART1)。256字节的内部RAM,8kB的程序/数据复用SRAM。可变的MOVX执行时间,可适应高低速RAM的访问。3.3V的工作电压。
选择何种芯片来开发USB外围设备控制系统,一般要考虑外设任务的需求,编程的难易程度,芯片的性价比等几个因素。EZ-USB可较好地解决了以上问题,兼顾以上几个因素,使得USB外设的研制开发变得简单和廉价,大大提高开发效率,缩短产品的开发周期,是USB设备研制者比较理想的器件。

SY2100 EZ-USB 开发板提供完整的硬件和软件来加速固件与主机驱动程序的开发,与其它使用仿真设备的USB开发包不同的是,SY2100 EZ-USB开发包在整个开发过程中使用真正的设备,即AN2131QC。

软件的安装
将安装光盘放入光盘驱动器,运行EZ-USB devtools version 安装程序,将出现EZ-USB安装界面。
Cypress EZ-USB控制面板软件是一个用于EZ-USB芯片通信的Windows应用程序。安装中,按照提示说明一步一步地进行安装操作。在安装完成后,可以从开始菜单选择Start\Programs\Cypress 运行该软件。
要想卸载控制面板软件,在Windows的控制面板中用Add/Remove Programs来实现。
Keil开发环境用于编译、链接、调试8051C汇编程序,光盘中带的Keil是评估板,程序目标码限制在4kB以内。在安装完成Keil后,需要重新启动计算机。

硬件安装
硬件安装准循以下步骤:
(1) 通过USB连接线将EZ-USB开发板连接到主机上;即,连接USB电缆,连接串口线(默认连接开发板SIO-1串口)
(2) 主机装载开发板的设备驱动程序。该驱动程序是在安装Cypress EZ-USB 控制面板软件时同时自动安装到系统中的。在用Keil监控程序开发时,开发板上的绿灯变亮,表示监控程序已经经过USB电缆下载到了开发板上,并已经运行。
验证开发板是否安装成功,只要运行控制面板就可以知道了。

开发板硬件资源
SY2100 EZ-USB开发板为USB设备的开发提供了一个良好的工具。开发板使用的是80管脚的AN2131QC芯片,而且包含3个用于扩展接口的引出端。板上所有的电路均为3.3V,开发板板内由USB连接器供电。
EZ_USB开发板包括以下几个部分:
2131 EZ_USB集成电路,它包括一个高性能的8051内核;
32K扩展RAM;
两个8051 UART口;
DIP开关控制来选择EEPROM地址;
两个I2C总线的8位I/O扩展芯片,一个用于驱动七段LED,另一个用于读8位开关状态;
一个3.3V调节器,它可以把5V转换成3.3V;
电源和中断/监控指示灯(红色、绿色)。
值得一提的是在USB、D+和D-信号接有防止瞬变电压的浪涌保护芯片,防止热拔插造成的不良影响,在USB接口电路中,是十分必要的措施,增加了可靠性和安全性。
SY2100 EZ-USB开发板基于EZ_USB系列USB总线控制器,它包含标准的MCS51外设模块和USB模块。USB模块集成了USB的收发器、串行总线接口机制、功能接口单元和收/发缓冲区。通过内存配置开关可灵活地改变RAM的地址空间,并方便地进行内存扩充。
EZUSB的I2C总线上,接有两块8位I/O扩展芯片(PCF8574)和一块用于EZ-USB引导、标识USB设备的EEPROM。该片EEPROM采用8引脚DIP封装,可拔插。
按钮、选择开关和7段LED通过PCF8574接到I2C总线上。这样,一方面为用户调试固件程序提供了方便,另外一方面,空出A,B,C这三个I/O口以供开发使用。U10提供了到7段LED的8位输出;U12提供8位输出,分别来自:4个按钮、微动开关,以及主板上扩展口。U9输入引脚中的任意一个的状态改变都会激活AN2131QC的WAKEUP管脚。因此,按下任何一个按钮都会引发远程的USB唤醒。
AN2131QC片内有8KB的程序和数据共享的RAM存储器,另外,还增补了32KB的外部RAM。支持Keil Debag调试的监控程序被装载到外部的RAM区,以便空出内部的RAM调试用户程序。
EZ-USB的8051带有两个通用的异步收发器(UART),可以选择作为RS232通信或一般的I/O口使用。
SY2100 EZ-USB开发板下图所示。


DIP开关设置
4位DIP开关的的SW3,SW4用于选择EEPROM的地址线,同时,EZ-USB内部的8051可以通过I2C读取开关的状态(SW1,SW2)。
连接器
连接器包括:USB及其两个DB9串口连接器。
扩展连接器
SY2100 EZ-USB开发板提供了3个20脚的插针连接器,以方便与外部电路连接。
PCF8574扩展I/O
开发板上有两片PCF8574(U10、U9)提供调试I/O用。
从地址0100;
开发板上的开关和按钮连接到U9,其地址是0100000d,在读八位数据是先发送01000001到U9,然后读出数据。另外其13脚/INT是一个漏极开路输出引脚,当任何状态发生变化时,都会产生一个低电平,而/INT又和WAKEUP#相连,所以任何按钮按下时都会启动一次USB的远程唤醒。
控制7段LED的PCF574,其地址是0100000d,发送一个命令01000000到U10,然后写入字节。

地址分配
在调试程序装载后SY2100 EZUSB DK存贮器分配图如图所示。注意地址为1200H的存储器低端和8000H 的32k可用存储器是为用户程序留的可用空间。也要注意,在"空(Empty)"区域中没有安装程序,该部分地址可用于外部的硬件和EZ-USB总线扩展。

EZ-USB控制面板(Control Pannel)简介


控制面板(Control Pannel)支持如下的操作:
取描述符;
下载固件;
从屏幕或文件发送/和接收块数据;
收发同步数据;
循环测试。

启动控制面板的步骤:
通过USB连接电缆将开发板和计算机相连;
选择"开始"菜单"程序"中的"CYPRESS",运行(图1)。

当启动控制面板程序时,系统首先检查USB总线上是否存在EZ-USB设备,若有则会在主窗口生成相应的控制按钮,用户可以键入命令进行操作
1 主操作菜单
File菜单命令:Open All Devices:查询所有的有效USB设备,并将它们全部加入下拉列表框,然后打开一个进行操作。
如果一个EZ-USB设备是在控制面板启动后插入的,控制面板程序不能识别,此时应当选用Open All Devices来添加设备到device列表中。
程序的退出可选择File中的Exit或直接用鼠标点右上角的X,可推出程序。
Edit菜单命令:相应的编辑功能。
View菜单命令:相应的浏览功能。
Options菜单命令:
Properties对话框(属性)的General选项卡,其中
Verboss mode:允许选择更详细的观察传输信息的输出。
Pop up Command ToolBars: 允许选择想要观看的操作工具条,当选择时,弹出适当的工具栏,以便观察。当需要一个较大的屏幕观看区,或是更快的选择有效的操作时,可选择该项有效。


Automatically Hold During download, then Run: 自动处理内部事务代替使用HOLD/RUN按钮。
Use separate thread for each USB operation: 防止USB操作被控制面板悬挂。
Max Operations Pending limit: 指定悬挂操作的最多次数。如果运行超过了限制,那么以后的操作将无效,不会被启动。用户可以在任何时候增加限制量,以允许进行发送操作。
Paths选项卡:
The Monitor File Location: 允许选项默认的Monitor控制程序及其所在的位置,见Cypress\USB\Target\Monitor中有关监控文件选择的说明文件Readme.txt。用户可以用浏览按钮来选择默认的控制程序,当单击Load Monitor按钮时,所选择的控制程序被下载到目标系统中。
Windows菜单命令(略)
Help菜单命令(略)


2 应用程序工具栏
应用程序工具栏提供标准的按钮,如Cut,Copy,Paste,Save和Print,此外"About"按钮可得到软件的版本信息。"Select Target"按钮允许用户指定被使用的EZUSB器件或是FX2器件。
3 主屏工具栏
主屏工具栏包含一个标准USB请求的下拉子菜单和一个Send按钮来发起命令传输,该栏还包含与USB设备相关的设备和接口标识字符串;Clear按钮清除OUT缓冲区的内容;Load Mon按钮下载监控程序到USB设备。监控程序允许使用一个串行口来调试开发的8051目标代码。
4 操作工具栏
操作工具栏的下面是一个文本窗口用于调试USB传输所产生的输出。当一个命令被发送和接收时,用于诊断的文本参数添加到该窗口。这些USB命令和参数可以被打印输出。当从下拉菜单选择一个USB命令时,其它工具栏的参数随命令有效。
5 获取USB设备的描述符信息
取设备描述符
单击Get Dev按钮,获取设备描述符,屏幕显示如下:
取配置描述符
单击Get Conf按钮,获取配置描述符;
取管道信息
单击Get Pipes按钮,获取管道信息。该设备请求并不产生USB传输,而只是简单的查询设备驱动程序以取得管道的配置信息。
6 下载固件
单击Download按钮,将下载固件到USB设备上运行,此时,系统会提示要求输入一个文件名,选择一个.Hex文件作为设备目标代码文件。在Cypress\USB\examples\ezusb目录下有许多.hex文件的例子。
7 编程串行EEPROM
单击EEPROM按钮,选择一个EEPROM文件,并下载该文件到EEPROM中。EEPROM一般用来存放设备的VID/PID/DID号,以便在上电或插入时系统能知道设备的特性。因此,编程EEPROM可改变EZ-USB的枚举方式。
下面举例是基于SY2100 EZ-USB开发板,将ep_pair.hex对应的ep_pair.iic格式的文件写入EEPROM中,步骤如下:
用新的EEPROM替代开发板上的EEPROM;
选择DIP-4开关的SW3、SW4,于EEPROM相对应;
单击控制面板上的EEPROM按钮,选择..\examples\ep_pair\ep_pair.iic文件;
下载ep_pair.iic文件;
下载完成后,按一下Reset按钮;
单击控制面板的SetFace按钮;
单击Get Pipes按钮,查看管道信息,发现默认的管道信息变成了ep_pair例子中的管道信息,表明ep_pair固件已经在开发板上运行了。

利用Keil C调试程序
利用Keil Debuger的功能,必须首先下载Keil Debuger Monitor到开发板上运行。当EZUSB开发板插上主机时Keil Debuger Monitor就自动下载到了开发板上运行,因此,为了保证Keil Debuger Monitor在开发板上运行,最简单的方法是拔下USB连接电缆,再重新插上,或按下开发板上的Reset按钮。如果BKPT/Monitor绿色指示灯亮则表明Keil Debuger Monitor已经在开发板上正常运行。默认的Keil Monitor被装入片外的RAM空间,使用SIO1,通信波特率为19200。这里注意:按开发板上的Reset按钮,没有重新初始化LED,因此绿色指示灯保持原状态,可能不亮;但是Keil Monitor被重新装入。
还可以使用开发板上的控制面板的Download按钮下载Keil Monitor程序,该程序放置在..\Cypress\usb\target\monitor路径下,共有五个可以利用的文件。根据硬件配置选择文件。

通过RS232串行口建立从主机到开发板的连接。开发板上有SIO-0和SIO-1两个串口,默认使用SIO-1口。主机如果有多个COM口,则通过配置菜单进行设置。
这里..\Cypress\usb\example\dev_io目录下的例子,来说明如何使用Keil软件进行程序调试。步骤如下:
正确连接RS232串行口电缆和USB电缆;
一旦Keil Debuger Monitor在开发板上正常运行,则选择Start-Programs-Keil uVision2, 启动Keil uV2 IDE。
打开..\Cypress\usb\examples\ezusb\dev_io目录下的dev_io.uv2工程文件,如图2所示。
确认使用正确的串行口和波特率。选择projest-Options for Target 'Target1'菜单,如图3所示,选择Debug选项卡,单击Settings按钮,如图4所示。设置波特率为19200,并正确选择在主机PC上使用的COM口。单击OK按钮,关闭该窗口。
选择工具栏的Debug按钮,如图5所示。这时固件程序通过RS232串口下载到开发板中,如图6所示。
选择Keil Debug菜单中的单步(Step)、宏单步(Step Over)、连续运行(Run)、停止(Stop)等各调试命令,查看运行结果。
选择Keil Debug菜单中的单步(Step)、宏单步(Step Over)、连续运行(Run)、停止(Stop)等各调试命令,查看运行结果。

当分别按下开发板上的F1、F2、F3、F4按钮时将有不同的现象。七段LED可显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。按钮功能如下:
F1:七段LED置0显示;
F2:七段LED递减显示;
F3:七段LED递增显示;
F4:七段LED置F显示;

在光盘中的...\buttons and lights\dev_io目录下,提供了按钮和灯的源程序和编译好的结果,可以直接运行。方法是:连接开发板,启动控制面板程序,Download目录\buttons and lights\dev_io\下的dev_io.hex到开发板,就可以运行程序了。
EZ-USB程序设计应用举例

这里只是简单介绍一些例子,在examples目录里有更多的实例。

1. 块传输测试(ezbulk.hex)
这是一个用汇编语言编写的快传输测试的例子,使用端点2 IN和OUT来进行快传输。有关用C语言编写的快传输测试的例程请参阅14.2.5节和14.5.6节。该程序中首先用64至1的递减计数器的值填充端点2 IN缓冲区,保持对端点2 IN和OUT传输的计数,对端点2 OUT接受到的数据不作任何处理,但只改变端点2 IN缓冲区的前俩个字节,其中第一个字节(0)用端点2 IN传输次数的计数值代替,第二个字节(1)用端点2 OUT传输次数的计数值代替。
使用控制面板进行测试的步骤如下:
下装程序。既可以Keil的集成环境,也可以用控制面板的Download按钮来下载..\cypress\usb \Examples\EzUsb\ EzBulk_asm\ezbulk.hex文件。
设置Interface o, alternate aetting 1。确定EP2端点使用最大包长度64字节,按Get Pipes来更新设置。
在块传输按钮条中选择端点2 IN,单击块传输按钮,可看见64到1递减计数的64个字节。
再次单击块传输按钮以执行另一个EP2 IN传输,现在除了字节0的数值发生了变化外,其它的数值均相同。字节0用来指示IN传输的次数,每发生一次IN传输,其计数值加1。
在块传输按钮条中选择端点2 OUT,单击块传输按钮,发送64个字节到EP2OUT,该数据被忽略。
选择端点2IN,单击块传输按钮,发现第二个字节的数值发生了变化,字节1用来指示OUT传输的次数,每发生一次OUT传输,其计数值加1。
该程序使用查询法,不断地对端点忙位进行查询。比较好的方法是中断向量法。程序清单如下。

下载 ezbulk.hex


2. 利用块端点对进行环路测试(ep_pair.hex)
该程序使用端点2和端点3组成端点对,并将主机发送到端点2 OUT缓冲区的一组数据传输到端点2 IN缓冲区,在由主机读回。程序采用C语言编写,并使用EZ-USB的固件函数库和程序框架。通过控制面板可下载ep-pair.hex文件到EZ-USB 8501的内部RAM中并运行。
复位开发板上的Reset按钮;
用Download按钮下载..\cypress\ usb\ examples\ ep_pair.hex固件;
单击Get Pipes按钮;
选择端点2Out管道,Length=64,Hex Bytes参数为8,单击Bulk Trans按钮,64个字节的数据0x08被发送出去;
现在我们强制在usb总线上出现错误,怎么办?很简单,只需返回32字节的数据,而ep_pair总是要发送64个字节的数据,这将违反USB协议,导致错误发生。选择端点2 IN管道,Length=32,单击Bulk Trans按钮。
单击URB Stat按钮,将获得当前状态下的详细信息。
将Length改回到64,选择端点2 OUT管道,Length=64,Hex Bytes参数为8,单击Bulk Trans按钮。
选择端点2IN管道,Length=64,单击Bulk Trans按钮。这时会出现如图所示的出错信息,因为管道已经处于stall状态;
在Reset Pipe的Pipe条目中选择0:Endpoint 2 IN,然后单击Reset Pipe按钮清除该管道的stall条件,使得设备重新恢复正常。

下载 ep_pair.hex


3. USB同步传输(eziso.hex)
这是一个很简单的同步传输的例子,用汇编语言编写。程序从端口A,B和C读取数据,通过EP8IN连续发送5个字节的包:
;字节0:帧计算器H
;字节1:帧计算器L
;字节2:端口A引脚
;字节3:端口B引脚
;字节4:端口C引脚
通过该程序,可以学会如何传输I/O端口的数据到同步端点缓冲区EP8IN,以及如何采用自动地址指针。为了便于理解,程序未使用中断系统,代替以查询SOF位来探测是否有SOF令牌到达。
使用控制面板的步骤如下:
(1) 下载..\Cypress\usb \examples\ezusb\eziso_asm\eziso.hex文件;
(2) 在Iso Trans栏设置:
PiPe=7: Endpoint 8 IN
PktCount=1
PktSize=5
BuffCount=1
FrmPerBuff=1
单击Iso Trans按钮多次,帧计数器值和24个输入引脚的值将显示在数据窗口。

下载 eziso.hex


4.Vendor 专用命令程序(Vend_ax.hex)
通过EZ-USB控制面板的download按钮可下载该程序到EZ-USB开发板上运行。它主要解释执行vendor的几个命令:
A0下载:
A2读取EEPROM;
A3读取外部RAM;
A4设置IC地址;
A5读取IIC的类型(1字节或2字节);
A6读取芯片版本信息;
A8重枚举。
该固件程序是基于EZ-UEB固件框架开发的。

下载 Vend_ax.hex


5、ISO流传输程序(isostrm.hex)
该程序由3个部分组成:基于wendows的test应用程序(isostrm.exe)、EZ-USB通用目的驱动程序GPD(ezusb.sys)和执行简单的同步传输的EZ-USB固件(isostrm.hex)。主要目的是验证使用GPD执行ISO流的能力。ISO流使用下面的IOCTL:
IOCTL_EZUSB_START_ISO_STREAM
IOCTL_EZUSB_STOP_ISO_STREAM
IOCTL_EZUSB_READ_ISO_BUFFER
test应用程序用来启动或停止ISO流,Start Read Thread按钮启动流传输,调用IOCTL_EZUSB_READ_ISO_BUFFER,并保持对读出包的计数,因为ISO包的第一个字节是递增计数的,所以可以判断出是否有包丢失,记录丢失的包。
Isostrm.exe使用控制面板装入isostrm.hex到USB外设,然后单击Start Iso Stream 按钮,启动ISO流,再单击Start Read Thread按钮,开始连续读一个ISO流,等待一会儿,最后单击Stop Iso Stream按钮来停止ISO流的传输。通过Start Read Thread按钮,将会看到数据传输的几个缓冲区,可用来观看丢失的帧。
Isostrm固件是基于固件框架编写的,使用单个ISO IN端点。在每一个SOF帧,复制64个字节到ISO8IN缓冲区,缓冲区的前2个字节是当前USB传输的帧号,其余的是增量计数值。

下载 isostrm.hex


6 开发板SIO-0 RS232串行口演示
在光盘中..\ LoopRS232V1.0.1的目录下,提供了开发板SIO-0 RS232串行口演示程序。这是一个开发好的演示程序。首先,安装.. \ LoopRS232\ Host下的setup.exe程序进行安装,应用程序安装后可以在Windows的"开始"菜单中发现安装好的程序。用RS232串行电缆将开发板的SIO-1口和主机COM1口相连接,启动控制面板程序,Download目录..\ .. \ LoopRS232\Target下的LoopRS232.hex到开发板,然后,运行应用程序。详细情况可阅读Readme。

下载 LoopRS232.zip


7 按钮和灯
在光盘中的...\buttons and lights\dev_io目录下,提供了按钮和灯的源程序和编译好的结果。连接开发板,启动控制面板程序,Download目录\buttons and lights\dev_io\下的dev_io.hex到开发板,就可以运行程序了。
按钮和灯程序运行后,当分别按下开发板上的F1、F2、F3、F4按钮时将有不同的现象。七段LED可显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。按钮功能如下:
F1:七段LED置0显示;
F2:七段LED递减显示;
F3:七段LED递增显示;
F4:七段LED置F显示;

下载 dev_io.hex

EZUSB系列芯片都具有通过下载固件和重枚举的方式来动态改变设备特性的能力。下载固件到EZUSB芯片中有两种方法:1、使用EZUSB控制面板,通过USB口下载固件;2、用Keil 调试监控程序(Debug Monitor)通过RS232串口下载固件。在开发过程中,两种方法均可采用。但是我们希望最终作出的产品能自动完成固件下载以及设备重枚举。这就需要一个特殊的、具有下载固件并完成设备重枚举功能的设备驱动程序,暂且称之为固件下载驱动程序。EZUSB软件开发包,提供一个固件下载驱动程序的模板,即EZ-Loader Driver。EZ-Loader驱动程序是一个非常简单的USB程序驱动模板,简化到用户只需要知道如何去干一件事情,即下载固件到USB外设。因此,可以使用该模板非常简单地开发出自己的设备驱动程序。
EZ-USB软件开发包提供的EZ-Loader驱动程序只需要很少的修改就可以支持一个专用的设备。因此,它不需要有较深的Windows驱动程序编程的知识背景,然而,用户应该非常熟悉Windows的即插即用、Windows INF文件、Windows的注册表和USB。
EZ-Loader驱动程序是一个设备驱动程序,因此它需要Windows98的设备驱动工具包(DDK)。DDK对用户来说并不友好,在尝试制作EZ-Loader驱动程序之前,应该验证所用的DDK有能力创建设备驱动程序。
一个典型的基于EZ-USB芯片的设备,如果它具有了固件下载驱动程序的功能,那么,它只需要有少量的固件存储器(EEPROM等)来存储设备的VID/PID。VID/PID与主机系统中指定的设备驱动程序相关联。该设备驱动程序的唯一功能就是下载固件到外设的EZUSB芯片中。


开发EZ-Loader设备驱动程序需要工具

Windows98 DDK;
Visiual C++ 5.0以上版本。在安装Windows 98 DDK之前必须首先安装Visiual C++。在运行DDK build时会自动调用Microsoft C编译器;
Intel HEX记录格式的文件转换为C文件的工具――hex2c.exe。该工具将Intel HEX记录格式的输入文件转换成C代码数组。Cypress EZUSB 软件开发包提供了该工具,该工具的命令格式如下。(在\Cypress\usb\bin中)
Hex2c <Intel_HexFile_name> <C_FileName> <Var_Name>
其中:Intel_HexFile_Name:为输出的Intel HEX文件名,由Keil工具生成。
C_FileName:是输出的C文件名。
Var_Name:是产生的C输出的文件中数组的名称。该参数为可选项,缺省时,数组名称为firmware。


创建EZ-Loader设备驱动程序的一般步骤

新建一个目录,将EZUSB软件开发包中..\drivers\ezloader目录下的所有文件连同子目录拷贝到该目录下。注意:\lib\i386\free和..\lib\i386\cheched目录结构必须完整,否则在编译过程中将会出错。
编辑该目录下的sources文件,在TARGETNAME=ezloader一行中修改目标文件名。这里的文件是指由Windows DDK产生的驱动(.sys)文件。
利用hex2c.exe将固件的Intel HEX记录格式的代码文件转换为C文件,打开C文件,用其中的firmware[ ] 数组代替EZ-Loader Driver中提供的firmware.c中的数组。
利用Windows DDK的build命令编译创建该驱动程序。
在修改EZ-Loader驱动程序之前,用户应该为定制的固件下载驱动程序创建一个新的目录,一旦产生了新的目录,则复制EZ=Loader下的所有源文件到该目录,使用DDK的build命令编译生成EZ-Loader驱动程序。
Sources文件和EZ-Loader source 一起告诉DDK build如何创建驱动程序。指定的源文件由驱动程序和驱动程序输出文件名组成。已提供的sources文件将产生一个名为ezloader.sys的驱动程序。根据build环境,该文件将产生于..\lib\i386\checked 或 ..\lib\i386\free目录下。这些目录将在build驱动程序产生或build报告一个错误之前产生。当定制EZ-Loader驱动程序时,需要改变驱动程序的输出文件名,而不是ezloader.sys。那么,可以通过改变sources文件中的TARGETNAME=filed到一个新名字来实现。


设计应用举例(1)

这里举例讲述生成EZ-Loader固件装载驱动程序的详细过程,所选取的例子是"按钮和灯",在目录..\buttons and lights\dev_io\下的目标程序,它由Keil软件工具编译、链接后生成。设计的目标是在设备插上后,主机能通过USB总线自动下载该固件到EZ-USB外设芯片中,并自动运行该固件程序。
首先,需要分配设备的VID/PID号。采用重枚举的设备需要两个VID/PID,一个绑定到固件下载之前的设备驱动程序,另一个绑定到固件下载之后的设备驱动程序。在此,前一个驱动程序等待我们开发,后一个驱动程序采用EZ-USB软件开发包提供的ezusb.sys驱动程序。我们将PID=0X1004绑定到前一个驱动程序;PID=0X1005绑定到ezusb.sys驱动程序。VID均为0x0547。注意:这里的USB设备的PID为0x1004。
开发固件装载设备驱动程序按照如下步骤进行:
(1) 新建一个目录,假设为dev_io。将cypress\ usb\ drivers\ ezloader 目录下的文件和子目录的内容全部复制到该目录下。
(2) 用任何一个文本编辑器打开该目录下的sources文件,修改如下一行
TARGETNAME=ezloader

TARGETNAME=dev_io
这一名称将影响到最后产生的.sys文件的名称。
(3) 利用hex2c.exe,将dev_io.hex文件转换为dev_io.c文件。
Hex2c dev_io.hex dev_io.c
现在,dev_io.c包含一个Intel HEX记录结构的数组,被称为firmware.
(4) 打开bal.c和firmware.c文件,将firmware.c中的firmware[ ]数组用dev_io.c中的firmware[ ] 数组替换;
(5) 利用windows DDK创建目标驱动程序。运行build.exe,选择DDK的free或者是checked环境,进入到bal子目录,键入
build -c
开始创建驱动程序。这取决于所选的编译环境,编译成功的话,将在\\..\dev_io\lib\i386\checked或..\dev_io\lib\i386\free目录下产生一个dev_io.sys文件,这就是我们需要的固件装载设备驱动程序(目标驱动程序),将该驱动程序复制到c:\windows\system32\drivers目录下。
(6)最后,要使得该驱动程序正确工作,还必须为它写一个安装信息,即.inf文件。它将设备的VID/PID绑定到特定的设备驱动程序上。该inf文件可存放在任何一个指定的目录下,当该USB设备首次被连接时,系统会自动询问该文件的位置。我们创建一个dev_io.inf文件。该文件内容如下:


下载 dev_io.inf文件
(7)修改开发板的VID/PID为0x0547/0x1004。将该USB外设的PID号写入到串行EEPROM中。有两种方法:
第一种:使用EEPROM编程器。将B0 47 05 04 10 01 00 七个字节编程到串行EEPROM的前7个单元中。
第二种:使用EZUSB控制面板。单击Download按钮,选择\\…\Cypress \usb\ Examples\ EzUsb\ Vend_Ax\ Vend_Ax.hex文件,几秒后该文件将下载到EZ-USB芯片中,接着修改ezusb开发板的PID为上一步中.inf文件所指定的PID的值,设置Req=0xA2,Dir=OUT,最后,单击Vend_Req按钮,即可将新的PID值写入到串行的EEPROM中。
(8) 重新插上开发板,Windows提示找到新硬件,并要求提供该设备的驱动程序。按照windows添加新硬件向导的提示,将dev_io.inf提供给windows.
(9) 查看结果,发现驱动程序装入后,dev_io.hex固件就开始在开发板上运行了。


设计应用举例(2)

对于上面的例子,只是编制了固件程序,对于用户来说,往往需要编制应用程序,对开发的USB设备进行管理和操作。在我们的开发套件的光盘上提供了这样的例子,固件程序类似于dev_io,同时在vb下编制了应用程序。在光盘SY2100 Examples目录下“EZUSB\按钮和灯主机控制”中。(这是一个标准的HID设备,无需编制驱动程序)

1)在“控制面板”中下载运行SY2100 Examples\EZUSB\按钮和灯主机控制\GPHID 下的GPHID.HEX固件,运行后LED显示0~F,如下图所示。

2)运行SY2100 Examples\EZUSB\按钮和灯主机控制\VBhid\VBhid应用程序,界面如下图所示;
可以通过应用程序对HID设备进行操作,同时在开发板上的操作也同时反应在应用界面上。

F1,F4按钮控制增加和减小数码的显示速度;F2,F3控制是否显示小数点。该设备的VID和PID为0547和7450。