EZ-USB 68013A开发指南

上一篇 / 下一篇  2007-03-26 10:29:41 / 天气: 晴朗 / 心情: 高兴

1.  元器件

CYPRESS68013A:支持USB 2.0协议,带增强型8051单片机,时钟频率48Mhz。支持串口通讯。

 

2.  文档

cy7c68013.pdf

68013外设手册

cy7c68013_5.pdf

68013外设手册

CY3684_A_SCH.PDF

68013A外围电路图

FX2 TechRefManual.pdf

EZUSB-FX2技术手册

fx2_to_fx2lp.pdf

FX2FX2LP的区别

CYAPI.PDF

CYAPI手册 高级类库

CYUSB.PDF

CYUSB手册 底层API

 

 

 

3.  开发环境

3.1 Keil C 7.0编译器

3.2 C++ Builder 6.0

3.3 VC++ 6.0

3.4 EEPROM烧写器

3.5 68013A的开发包(含CYPRESS CONSOLECYUSB.SYS、例程等)

3.6 BUS HOUND 5.0

 

4.  开发流程

4.1   硬件程序编写

1)根据CYPRESS的示例程序建立工程框架,一般由FW.C PERIPH.C和定义寄存器的几个头文件组成。如下图:

2FW.C负责了设备连接、重枚举、设备初始化等过程

3PERIPH.C负责响应各种中断事件。

4dscr.a51文件定义了USB设备握手时需要的各种描述符

5FX2REGS.H定义了USB中所有的寄存器

6FX2.H主要定义了各种二级中断向量和描述符的数据结构

7)编译后的二进制代码和工程同名,扩展名为HEX

8)相应的头文件和类库在KEIL Clibinc文件夹内,需在项目设置中设置路径。

 

4.2   硬件程序烧录

1)因为本产品要求将二进制代码和硬件PID/VID烧录在EEPROM,而不是使用CYPRESS推荐的在线下载方式,所以外部采用了8KEEPROM。上电后68013A会将EEPROM中的数据和程序加载到RAM中运行。

2)HEX文件只是68013A8051的程序代码,还要加上PID/VID等信息才能正确运行,CYPRESS在开发包中提供了HEX2BIN.EXE这个工具,可以根据HEX生成完备的IIC文件,将此文件烧录到EEPROM上即可。

3)HEX2BIN.EXE的使用方法如下:

XXX.HEX文件拷贝到HEX2BIN.EXE所在目录,打开CMD,按如下格式输入:

hex2bix -i -o xxx.iic xxx.hex -f 0xC2 -v 0x1234 -p 0x1234

-i     表示输出文件,也就是IIC文件

-o     表示输入文件,也就是HEX文件

-f     表示68013A发送PID/VID的方式,这里为C0,即从EEPROM上读取。

-v  表示VIDBCD码,开发阶段使用1234

-p  表示PIDBCD码,开发阶段使用1234

4)将生成的IIC文件用烧写器烧录到EEPROM上,本项目使用的是深圳思泰佳电子公司的NSP通用烧写器,此烧写器不支持IIC类型,选择BIN类型可替代。

 

4.3   驱动的识别

1)EEPROM连到68013A上后,接上USB线,上电。计算机提示找到新硬件,要求安装驱动。

2)CYPRESS针对68013A提供了全新的驱动程序CYUSB.SYS。这个驱动使用了新的API,所以上位机的编写上和旧的方式完全不同。底层的IOCTL控制字的定义也完全不同,详见CYAPI.PDFCYUSB.PDF

3)安装驱动之前,必须先根据VID/PID正确编辑CYUSB.INF文件,在文件中添加自己的PID/VID代码和设备描述,连接设备时,将根据硬件上的PID/VID查找INF文件中对应的驱动,如果找不到,在设备管理器中将显示“68013 EEPROM MISSING”的字样。

4)详细的INF配置方法参考CYUSB.PDF PART1/PART2/PART3。这里不在赘述。

5)安装驱动时候找到修改好的CYUSB.INF文件,驱动将被正确安装,此时设备可以正常使用。

 

4.4   测试过程

1)被正确识别的设备可以在CYPRESS CONSOLE上看到设备信息。如图:

 

2)CYPRESS CONSOLE的具体使用方法请参考CyConsole.chm

3)要注意的是,除EP0/EP1外,当其他端点Max Pkt Size大小为64字节时,表示工作在USB 1.1模式,有可能是软件的原因,也有可能是外围上拉电阻的问题。开发中要特别注意。

 

5.  推荐开发流程

5.1 看本介绍USB 2.0协议的书,对USB 2.0协议有所了解。推荐《USB 2.0原理与工程开发》

5.2 CYUSB.PDF文档。了解驱动安装方法。

5.3 KEIL C51的书籍,熟悉C51的编程方法,熟悉KEIL C编程环境。

5.4 CYPRESS提供的例程,了解68013A编程框架。推荐《EZ-USB 2100系列单片机原理、编程及应用》(基本框架类似,部分寄存器定义不同)。

5.5 对照USB 2.0协议,编写dscr.a51文件,配置各种描述符。

5.6 结合FX2 TechRefManual.pdf,研读FW.CPERIPH.CFX2REGS.HFX2.H,了解寄存器的定义。

5.7 根据系统需求编写响应代码,有开发板时,根据开发版上的LED来测试程序正确与否。

5.8 根据CYAPI.PDF CYUSB.PDF编写上位机通讯程序。

同步读取数据方法     XferData();

异步读取数据方法               BeginDataXfer()/WaitForXfer()/FinishDataXfer();

5.9 调试程序。

5.10              编写其他8051上的程序,并继续调试。

 

6.  发布时应提供的文件

1)CYUSB.SYS

2)CYUSB.INF

3)XXX.IIC

 

7.  重点讲解

7.1   如何理解CYPRESS68013A程序框架

CYPRESS提供了非常好的程序框架,免去了用户自己编写一些通用性比较强、模式化的程序(如果不提供,很少有人能写出如此高效,结构紧凑的程序,实际上此框架和68013A内部结构关系密切,一般人也没有足够的内部资料也不可能写出来)。在框架的基础上,用户只需在相应的地方写相应的代码即可完成USB工作。

一般来说框架可以分成3个部分。

1)             描述符文件。例如dscr.a51文件,里面定义了枚举设备的时候要用的各种描述符信息,这部分用户需要根据实际的情况自己编写。我写的时候发现一个最大的问题就是各种书籍协议版本不同,翻译质量不同,同一字段的意义表述不同,容易让人产生困惑。例如USB 1.1/2.0/2.13对设备类型的子类定义都不完全相同,所以写的时候最好几种文档对比起来写。由于USB官方网站的文档中字段解释过于专业化,所以对USB不是很熟悉的人比较难以理解其真正含义。所以要多参考不同的书籍,某种程度上降低了开发速度,但对第一次做USB开发的人来说,这也是值得的。

2)             固件文件,例如FW.C文件,这是硬件程序的函数入口。主要有以下这些方法:

void SetupCommand(void);   //握手命令处理

void TD_Init(void);  //初始化,完成配置,启动时调用一次

void TD_Poll(void);  //用户处理程序,循环调用

void IO_Init(void);  //8051 IO初始化

void REG_Init(void); //8051寄存器初始化

BOOL TD_Suspend(void);   //挂起处理

BOOL TD_Resume(void);    //唤醒处理

//以下为各种描述符的获取和设置函数,重枚举时自动调用

BOOL DR_GetDescriptor(void);

BOOL DR_SetConfiguration(void);

BOOL DR_GetConfiguration(void);

BOOL DR_SetInterface(void);

BOOL DR_GetInterface(void);

BOOL DR_GetStatus(void);

BOOL DR_ClearFeature(void);

BOOL DR_SetFeature(void);

BOOL DR_VendorCmnd(void);

3)             功能文件,处理各种中断。例如PERIPH.C文件。8051一般默认只有四个中断,这显然不够USB使用,所以CYPRESS引入了自动向量的概念,相当于软中断,大大扩展了现有的中断数量。主要的中断有:

void ISR_Sudav(void) interrupt 0 //收到setup

void ISR_Sutok(void) interrupt 0 //收到SETUP令牌

void ISR_Sof(void) interrupt 0 //收到起始帧

void ISR_Ures(void) interrupt 0 //收到RESET

void ISR_Susp(void) interrupt 0 //收到挂起信息

void ISR_Highspeed(void) interrupt 0 //高速模式

void ISR_Ep0ack(void) interrupt 0  //正常响应ACK

void ISR_Stub(void) interrupt 0

void ISR_Ep0in(void) interrupt 0

void ISR_Ep0out(void) interrupt 0

void ISR_Ep1in(void) interrupt 0

void ISR_Ep1out(void) interrupt 0 //EP1输入中断

void ISR_Ep2inout(void) interrupt 0    //EP2中断

void ISR_Ep4inout(void) interrupt 0

void ISR_Ep6inout(void) interrupt 0

void ISR_Ep8inout(void) interrupt 0

void ISR_Ibn(void) interrupt 0

void ISR_Ep0pingnak(void) interrupt 0

void ISR_Ep1pingnak(void) interrupt 0

void ISR_Ep2pingnak(void) interrupt 0

void ISR_Ep4pingnak(void) interrupt 0

void ISR_Ep6pingnak(void) interrupt 0

void ISR_Ep8pingnak(void) interrupt 0

void ISR_Errorlimit(void) interrupt 0

void ISR_Ep2piderror(void) interrupt 0

void ISR_Ep4piderror(void) interrupt 0

void ISR_Ep6piderror(void) interrupt 0

void ISR_Ep8piderror(void) interrupt 0

void ISR_Ep2pflag(void) interrupt 0

void ISR_Ep4pflag(void) interrupt 0

void ISR_Ep6pflag(void) interrupt 0

void ISR_Ep8pflag(void) interrupt 0

void ISR_Ep2eflag(void) interrupt 0

void ISR_Ep4eflag(void) interrupt 0

void ISR_Ep6eflag(void) interrupt 0

void ISR_Ep8eflag(void) interrupt 0

void ISR_Ep2fflag(void) interrupt 0

void ISR_Ep4fflag(void) interrupt 0

void ISR_Ep6fflag(void) interrupt 0

void ISR_Ep8fflag(void) interrupt 0

void ISR_GpifComplete(void) interrupt 0

void ISR_GpifWaveform(void) interrupt 0

特别是对于接受数据,一般都在中断中完成相应处理,“中断中适合进行少量简短的操作,不适合进行复杂操作”,这句话在此依然有效。如果要进行复杂的操作可以在TD_POLL()中进行(多数操作都是在这个函数中完成的)。

另外非常重要的一点是,中断程序的结尾应该让中断复位,允许下一次中断,有些端点的计数器也要清零并允许接受新的中断请求。例如:

   EP1OUTBC = 0;//清空计数

   EZUSB_IRQ_CLEAR(); //USB中断复位

   EPIRQ = 0x08;   //允许EP1中断请求

 

7.2   68013A端点寄存器介绍

68013A内部的寄存器约有300个上下,一次都记住是不可能的,而且每个寄存器都有8个位,也就是说一共有2000多个可以配置的位,一次都理解掌握这些位的含义也是不可能的,所幸地是开发中并不会用到所有的寄存器,但是依然强烈建议把FX2REGS.HFX2.H走读一边,这就像读书一样,没有学会识字,再看都是天书。结合FX2 TechRefManual.pdf走读这些寄存器大约需要一到两天时间,这点时间投入还是值得的。

FPGA/CPLD器件价格查询

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-22  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 3304
  • 日志数: 20
  • 建立时间: 2006-11-16
  • 更新时间: 2008-04-29

RSS订阅

Open Toolbar