原创 采用CY7C68013芯片的USB2.0系统固件程序设计

2009-6-9 17:17 5216 10 11 分类: 通信



武汉大学电子信息学院 金朝辉

USB总线是在1995年被提出,并由7个计算机和通信工业领先的公司所组成的联盟所定义并加以推广,1999年USB的第三个版本USB2.0发布,USB2.0利用传输时序的缩短以及相关的传输技术,将整个传输速度从原来12Mbps提高到480Mbps,整整提高了40倍。USB2.0除了有传输速度快之外,还有众多优点,如统一了各种接口设备的连接头并使用单一专用的接头型号,最多可以连接127个接口设备,最突出的优点是具有“热插拨”的特性,可以即插即用,并能自动检测与配置系统的资源。但其开发难度比较大,其中设备的固件设计即是难点之一。


在USB设备与主机正常通信之前,主机必须检测并配置设备,所以用户必须编写固件程序代码,响应主机的控制请求命令,并且能够提供描述符,使主机了解设备的功能,从而配置设备,开始与设备的正常通信。另外,固件还要完成正常的数据传输功能。


CY7C68013芯片简介


Cypress公司的EZ-USB FX2芯片CY7C68013是一款性能较高的USB2.0微控制器。在单片机上集成USB2.0收发器﹑SIE(串行接口引擎)﹑增强的8051微控制器和可编程的外围接口。EZ-USB FX2中的智能SIE可以处理大部分USB2.0协议,使得微控制器可以专注于应用功能,从而减少了开发时间﹑确保了USB的兼容性,其内部功能框图如图1所示。




xsj063012_1.jpg
(1) CY7C68013的主要特性如下:

a.带有加强的8051内核性能,可达到标准8051的5~10倍,且与标准8051的指令完全兼容;


b.集成度高, 芯片内部集成微处理器、RAM、SIE(串行接口引擎)等多个功能模块,从而减少了多个芯片接口部分需要时序配合的麻烦;
c.采用软配置,在外设未通过USB 接口接到PC机之前, 外设上的固件存储在PC上;而一旦外设连接到PC 机上,PC 则先询问外设是“谁”(即读设备描述符) ,然后将该外设的固件下载到芯片的RAM中,这个过程叫做再枚举。这样,在开发过程中,当固件需要修改时,可以先在PC 机上修改好, 然后再下载到芯片中;


d.具有易用的软件开发工具,该芯片开发系统的驱动程序和固件的开发和调试相互独立,可加快开发的速度。


(2) CY7C68013有三种可用的接口模式: 端口、GPIF主控和从FIFO方式。


a.在“端口”模式下,所有I/O引脚都可作为8051的通用I/O口。


b.在“从FIFO”模式下,外部逻辑或外部处理器直接与FX2端点FIFO相连。在这种模式下,GPIF 不被激活,因为外部逻辑可直接控制FIFO。这种模式下,外部主控端既可以是异步方式,也可以是同步方式,并可以为FX2 接口提供自己的独立时钟。


c.“GPIF主控”接口模式使用PORTB 和PORTD 构成通向四个FX2端点FIFO( EP2 ,EP4 , EP6和EP8)的16位数据接口。GPIF 作为内部的主控制器与FIFO直接相连, 并产生用户可编程的控制信号与外部接口进行通信。同时,GPIF 还可以通过RDY引脚采样外部信号并等待外部事件。由于GPIF 的运行速度比FIFO 快得多,因此其时序信号具有很好的编程分辨率。另外,GPIF 既可以使用内部时钟,也可以使用外部时钟。



固件程序的功能和基本架构


固件程序是所有基于微控制器及其外围电路的功能设备正常工作必不可少的部分,其作用就是辅助硬件,主要有以下几种功能:


a.初始化工作,包括设置一些特殊功能寄存器的初值以实现所需的设备属性或者功能,例如开中断,使能端点,配置端口等。 b.辅助硬件完成设备的重新列举过程,包括模拟设备的断开与重新连接,对接收到的设置包进行分析判断,从而对主机的设备请求作出适当的响应,完成主机对设备的配置任务。


c.对中断的处理。


d.数据的接收和发送。


e.外围电路的控制。


Cypress公司为了简化和加速用户使用EZ-USB FX2芯片进行USB外设的开发过程,提供了一个完整的固件程序的架构,用户只需要提供一个USB描述符表,添加其他端点接收和发送数据的通信代码,以及控制外围电路的程序代码。


固件程序框架的流程如图2所示。



xsj063012_2.jpg
固件架构是由Keil C51 C编译器与其整合开发工具所编写和构建出来的。其主要所含的文件有:

fw.c固件架构原始的程序代码


periph.c用户副函数钩子的相关定义,主要的用户函数应用代码


gpif.c含有GPIF波形描述符表,可以实现波形的传输


dscr..a51 USB描述符表的范例


fx2.h 共同的FX2常数,宏,数据类型以及函数库内副函数的雏形框架


fx2regs.h FX2寄存器的声明与位屏蔽常数



CY7C68013的固件程序编写实例


通过CY7C68013的GPIF方式下的单字节读写实例来说明固件程序的编写方法。图3是CY7C68013与SRAM的硬件连接图。




xsj063012_3.jpg

其设备描述符的格式和编写可以在参考文献中找到,这里不加详述。

其初始化程序代码如下所示:

xsj063012_4.jpg

xsj063012_5.jpg
USB描述符表和用户函数可根据所用的方式和需要的功能进行简单编写,在这不再详细的罗列代码。



结束语


本文结合实际工程应用,提出了USB2.0的固件设计方法和具体步骤,并给出了具体实例。本文所使用的范例代码是从实际项目中截取的,希望对读者设计设备固件程序能有所帮助。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2012-12-9 19:47

东西都看不到啊
相关推荐阅读
sealove518_112732726 2012-12-14 13:16
同時兩個surfaceview camera 中的一些開發問題
問題1: 如何將camera surfaceview 顯示在最上層:用了this.setZOrderOnTop(true);這個方法 問題2: 如何用一個BUTTON來自由控制came...
sealove518_112732726 2012-12-14 11:22
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法 Eclipse中,Android项目名称前有红叉,但项目内所有文件都无错误,通常发生在导入项目时。 先可以去...
sealove518_112732726 2012-09-05 10:29
android各种权限及说明
  android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allow...
sealove518_112732726 2012-09-05 10:27
android各种权限及说明
android各种权限及说明 android.permission.ACCESS_CHECKIN_PROPERTIES 允 许读写访问”properties”表在checkin数据库中,改值...
sealove518_112732726 2012-09-04 08:54
android 获取当前程序路径
//  获取当前程序路径     getApplicationContext().getFilesDir().getAbsolutePath();   //  获取该...
sealove518_112732726 2012-01-11 09:40
mt.exe:general error c101008d 最终原因已查明
mt.exe:general error c101008d(最终原因已查明)_算法的天空_百度空间   2011-05-27 16:22:41|  分类: 坑爹软件问题 |  标签: |字号大...
EE直播间
更多
我要评论
1
10
关闭 站长推荐上一条 /3 下一条