原创 CYPRESS CY7C68013A(FX2LP系列)开发手记——USB部分

2011-2-27 19:34 10303 7 7 分类: 工程师职场
USB外设器件系列 主要器件 生产情况一览 FX2LP 68013A 在产,高速/全速 FX2 68013 停产 FX1 64713等 在产,AN21XX换代产品,全速/低速 FX 64613 停产,EZ换代产品,全速/低速 EZ AN21XX 停产,全速/低速 M8 CY7C63XXX 部分在产,低速可以看出,目前还是有低速、全速、高速三个产品线,全速和高速只有FX1和FX2LP在产,其它都已OVER。。。从开发板的情况看,FX1和FX2LP的开发板分别是CY3674 kit和CY3684 kit,二者硬件上除了CPU换了之外,外围全部一致。二款CPU,内存管脚等等外部特征完全一样,新版的说明书也只有一本(EZ-USB TRM)。从驱动程序上看,不管是全速还是高速,它们的驱动已经高度统一,都是CYUSB.SYS。这给我们一个启示,开发USB,已经无需在芯片级花费过多心思,只要掌握一款,即可通吃。 手册TRM的唯一性造成了一个困扰,即对FX1和FX2LP未加区分,如CPU时钟频率的章节,手册说默认的时钟是12MHz,实际上这是FX1的时钟吧,而FX2LP的默认时钟是48MHz。诸如这些细分还是要仔细甄别,不要盲目相信手册。 此外,CYPRESS的USB外设产品线除了EZ系列还开发了另外的品种,因为少见,所以不提。 CYPRESS USB资源安装新版的开发工具,支持FX1和FX2LP,不要安装早期版本支持AN3131/FX1的工具包。现在很多USB开发板都在使用早期的开发工具和例程,这是不可取的。 USB涉及到下列内容,必须掌握: 1)Cypress USB Studio 主机应用程序和设备驱动程序(.SPT) 2)Cypress Generic USB Driver 主机对USB的驱动程序EZUSB.SYS 3)Cypress USB Class Library API 主机端与驱动程序的接口库CyApi 4)Cypress USB Console 主机端控制面板程序CyConsole 5)Cypress GPIF Designer GPIF波形设计工具,单独安装 关于开发工具的说明,见C:\Cypress\USB\doc\General\DvkUsersGuide.pdf。 开发板的PID/VID缺省设置如下: Cypress FX2LP default ID: VID_04B4&PID_8613,"Cypress EZ-USB FX2LP - EEPROM missing" Cypress FX1 default ID: VID_04B4&PID_6473,"Cypress EZ-USB FX1 - EEPROM missing" Cypress FX2LP Example Device: VID_04B4&PID_1004,"Cypress EZ-USB Example Device" CYPRESS USB支持文件开发一个USB项目,需要在C51编辑环境中添加下列头文件: #include <fx2.h> #include <fx2regs.h> 这两个头文件包含在KEIL的头文件目录中,也可以将CYPRESS头文件目录中的所有文件拷贝到KEIL的目录,覆盖它。 USB头文件信息 CYPRESS提供了几个头文件,可以在.H和.C文件中加以引用。位置:C:\Cypress\USB\Target\Inc FX2.H EZ-USB FX2/FX2LP/FX1常量、宏、数据类型、全局、库函数原型 FAX2REGS.H EZ-USB FX2/FX2LP/FX1寄存器声明、位屏蔽(掩码)定义 FAX2REGS.INC 前一文件的汇编语言版本 fx2sdly.h EZ-USB FX2同步延迟(SYNCDELAY)宏 syncdly.h 功能同上,貌似用哪个都行 USB库文件信息除了包含头文件,还需要在项目中添加下列两个库文件,从而引用CYPRESS自己的库函数: EZUSB.LIB USBJmpTb.OBJ 库文件位于C:\Cypress\USB\Target\Lib\LP目录中,由以下文件编译生成: resume.c void EZUSB_Resume(void) USB唤醒函数 discon.c void EZUSB_Discon(BOOL renum) USB设备重枚举,将设备假脱机并联机 delay.c void EZUSB_Delay(WORD ms) 延迟N毫秒 delayms.a51 void EZUSB_Delay1ms(); 延迟1毫秒 ezregs.c 仅仅引用两个头文件,没有函数可供调用 i2c.c void EZUSB_InitI2C(void) 初始化 void EZUSB_WaitForEEPROMWrite(BYTE addr) 写EEPROM BOOL EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata *dat) BOOL EZUSB_ReadI2C_(BYTE addr, BYTE length, BYTE xdata *dat) void i2c_isr(void) interrupt I2C_VECT get_strd.c STRINGDSCR xdata * EZUSB_GetStringDscr(BYTE StrIdx) i2c_rw.c BOOL EZUSB_ReadI2C(BYTE addr, BYTE length, BYTE xdata *dat) BOOL EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat) susp.a51 void EZUSB_SUSP() USBJmpTb.a51 USB中断跳转矢量表,不直接引用,其实现函数在下文论述(该函数仅仅编译成OBJ,没放入LIB中)建立USB项目的过程 1,手工建立,相关文件分别拷贝过来。 2,由CYPRESS的模板建立模板位于C:\Cypress\USB\Target\Fw\LP目录中,将该目录拷贝到用户自建的目录,改名。打开项目,设定CPU,编译,可以欣喜地看到,一个新的USB项目已经初具雏形了。对相关文件的理解: FW.C 主程序,固件框架任务调度,以及设备请求解析 PERIPH.C 实现USB外围功能框架 DSCR.A51 汇编程序,记录了高速和全速设备的设备描述符,接口描述符,端点描述符等配置信息, USBJmpTb.OBJ 前文已述 EZUSB.LIB 前文已述在DSCR.A51文件中,设备的PID/VID/DID等信息可以修改,使之与EEPROM的数据相差异,设备重枚举时,会重新生效,以使主机搜寻修改后的驱动程序。 关于PERIPH.C的解读按惯例,在一个新项目的开始,会将PERIPH.C文件改名,使之与项目名称一致。如,项目名Bulkloop,则该文件命名为Bulkloop.c。 该文件包含下列部分: 1)实现用户调度程序(Task Dispatcher hooks),一般有四个函数: void TD_Init(void); 启动时调用一次 void TD_Poll(void); 设备闲置IDLE时,重复调用 BOOL TD_Suspend(void); 设备进入挂起状态时调用( suspend mode) BOOL TD_Resume(void); 设备回复后调用 2)实现端点0的设备请求函数,包括: 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); 1)和2)的声明罗列在FW.C中,供MAIN函数调用,这里是它们的实现。 3)USB中断管理,下列函数由USB中断跳转表调用(即,由USBJmpTb.a51引用,无需再次声明) void ISR_Sudav(void) interrupt 0 // Setup Data Available Interrupt Handler void ISR_Sutok(void) interrupt 0 // Setup Token Interrupt Handler void ISR_Sof(void) interrupt 0 void ISR_Ures(void) interrupt 0 void ISR_Susp(void) interrupt 0 void ISR_Highspeed(void) interrupt 0 void ISR_Ep0ack(void) interrupt 0 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 void ISR_Ep2inout(void) interrupt 0 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 关于监控程序位于C:\Cypress\USB\Target\Monitor目录中,可以下载到目标板,建立与Keil debugger的接口,用于查看目标存储器、单步执行、设置断点等操作。 FX2LP共有4个监控程序可供使用,目录中README.TXT文件罗列了6个,第一个不适用FX2LP,第六个是针对FX系列的SIO0用的SYS文件,用以替换缺省的SIO1。FA2LP经确认不存在此问题,所以不予理睬。 2) mon-ext-sio1-c0.hex -- 64K监控程序用于KEIL调试器。 FX2启动时自动装入。因为FX2监控程序不许加载在0xe000(FX2寄存器所在),所以由该文件代替它加载于此。你可以不必明确地加载监控程序,KEIL调试器将帮你完成它。你也可以使用控制面板程序手工下载它。这个版本使用串口SIO1,外部存储器范围0xc000-0xcf75。 -- mon-ext-sio1-c0.m51 -- 对应的MAP文件 3) mon-ext-sio0-c0.hex -- 使用串口SIO0的外部存储器版本。使用这个文件调试之前要用控制面板下载该文件。这个版本使用串口SIO0,外部存储器范围0xc000-0xcf75。 -- mon-ext-sio0-c0.m51 -- 对应的MAP文件 4) mon-int-sio1.hex (formerly mon-8k.hex) -- 使用串口SIO1的内部存储器版本。使用这个文件调试之前要用控制面板下载该文件。这个版本使用串口SIO1,内部存储器范围0x0000-0x1075。 -- mon-int-sio1.m51 (formerly mon-8K.m51) -- 对应的MAP文件 5) mon-int-sio0.hex (formerly mon-8k.hex) -- 使用串口SIO0的内部存储器版本。使用这个文件调试之前要用控制面板下载该文件。这个版本使用串口SIO0,内部存储器范围0x0000-0x1075。 -- mon-int-sio0.m51 (formerly mon-8K.m51) -- 对应的MAP文件通过上述说明,可以看出,在FX2LP开发过程中,第二个mon-ext-sio1-c0.hex缺省使用,第三个手工下载mon-ext-sio0-c0.hex可用,代码长度3975字节。第四第五个使用内部存储器,代码长度4213字节,占用用户空间不可取。由于第二第三个文件使用外部存储器0xc000-0xcf75,位于外部64K空间的上部,所以外部一定要扩充64K存储器才可用。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条