




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 系统的软件开发 5.1 USB固件设计5.1.1 USB固件程序设计所有基于微控制器及其外围电路的功能设备的正常工作都离不开固件的参与,固件程序是基于微控制器设备运行的核心。固件设计的目标就是控制硬件来完成预期的设备功能。没有固件的参与和控制,硬件设备只是芯片的简单堆砌,不可能完成预期的功能。USB设备的正常工作同样也离不开固件的参与。虽然USB的控制芯片已经相当智能化了,但是也不可能完成所有的工作,所以还需要编写固件程序来辅助硬件完成USB的通信任务。CY7C68013芯片的固件程序负责处理PC机发来的各种USB设备请求,并负责控制CY7C68013与外围电路进行数据传输。主要包括以
2、下五项工作: 1.初始化工作,主要是给一些特殊功能寄存器的赋值以使设备具有某种属性或处于某种状态; 2.对设备进行重新列举(ReNumeration),主要的工作有:模拟设备的断开与重新连接、对接收到的设置包进行分析判断、对主机的设备请求作出适当的响应,完成主机对设备的配置任务;3.响应中断,并对中断作相应的处理。USB接口在设备列举、响应主机标准请求和厂商请求、数据传送等动作过程中都会向微控制器申请中断,因此微控制器必须正确处理这些中断才能保证USB传输的正常进行;4.数据的接收与发送。USB设备的主要任务就是进行数据的接收和发送,因此CY7C68013的固件程序必须要对接收和发送数据的端点
3、进行正确的配置及控制,才能正确地接收和发送数据。5.外围电路的控制。如果CY7C68013接收数据,在收到数据后需要进行相应的操作,这就要求CY7C68013对其外围电路进行控制。如果CY7C68013发送数据,那么它也要控制外围电路,从外围电路获得数据,并将数据发送给主机,所以固件程序中包含对外围电路进行控制的代码也是必要的。不同的USB设备实现的功能不同,固件代码的复杂程度也有所不同。但是上面这五部分的功能,是每一台USB设备的固件程序必须具有的。5.1.2 EZ-USB FX2固件和函数库 Cypress为了简化固件代码开发过程,特别设计一个固件程序框架。整个固件架构是按照结构化的程序设
4、计方法,将整个程序分为几个不同的功能模块。这样既易于编写调试,也增强了程序的可读性。其主要工作是完成初始化、USB标准设备请求的处理和USB挂起电源管理服务。用户只需要提供USB设备描述符表,添加其他端点接收和发送数据的通信代码,以及外围电路的程序代码。在本系统的USB固件的开发过程中,就是使用固件架构来进行固件的开发。另外,Cypress提供了简单的函数库,用户可以直接连接和调用,在FX2固件函数库中,定义了常数、数据结构、宏和函数,用户仅需要在文件的开头,包含fx2.h、fx2regs.h、fx2sdly.h三个头文件,再将它们所产生的二进制文件与Ezusb.lib函数文件和usb.jum
5、ptb.obj文件链接在一起即可。在本文中,固件开发使用的编译工具为德国Keil公司的C51编译器,集成开发环境为uvision2。该环境集成了项目管理器、Cx51编译器、Ax51汇编器、BL51/Lx51连接定位器、RTX51实时操作系统、源程序调试器,可以用来编译C51源程序和汇编源程序。5.1.3寄存器、缓冲区以及描述符的定义 在进行系统的USB固件开发时使用了Cypress公司提供的Firmware库对寄存器、缓冲区以及描述符的定义。Firmware库中寄存器和缓冲区的定义放在fx2regs.h头文件中,fx2.h头文件中存放的是描述符定义。CY7C68013内有非常丰富的寄存器和缓冲
6、区,开发人员可以方便地通过对一系列寄存器和缓冲区的控制来实现对CY7C68013的外部逻辑控制。这些寄存器种类包括特殊功能寄存器(SFR)、通用配置寄存器、中断寄存器、端点配置寄存器、输入/输出寄存器、端点缓冲寄存器等。 CY7C68013的特殊功能寄存器(SFR)的寻址范围为0 x800 xFF,其中有的是标准8051寄存器,有的是非标准8051寄存器。SFR是可以直接寻址的,因此固件程序可以很快地对这些寄存器进行访问。对于SFR寄存器,使用专门的C语言指令sfr进行定义。除SFR之外的其它寄存器和缓冲区的存储地址在0 xE6000 xFFFF范围之内,8051内核不能对些寄存器和缓冲区进行
7、直接访问,必须把它们作为外部储存器,使用外部储存器访问指令进行访问。这部分寄存器和缓冲区非常多,可以对CY7C68013绝大部分功能进行控制。 由于8051内核不能直接访问除SFR寄存器以外的其它的寄存器和缓冲区,所以这些寄存器和缓冲区的定义比SFR寄存器定义要稍微复杂一些。5.1.4固件程序的设计主线及框架结构 本设计中系统的功能是将采集到的图像数据送到计算机,可见,USB固件程序设计主要完成的工作:完成图像数据的传输,具体来说就是通过USB2.0接口负责将图像像传感器OV7620所采集到的数据传送到计算机。 在USB固件的开发过程中,使用固件构架来进行固件的开发。 USB固件架构是按照结构
8、化程序设计方法,将整个程序按功能划分成几个功能模块构成的。其主要工作是完成初始化、USB标准设备请求的处理和USB挂起电源管理服务。用户在这个固件架构的基本上只需要再提供一个USB描述符表,配置一些相关的寄存器,添加所使用的端点接收和发送数据的通信代码,以及控制外围电路的程序代码就可以完成USB设备的固件开发工作。CY7C68013固件程序架构会按顺序完成如下4个步骤的操作,如图5-1-4所示。设置所有的内部状态变量,即对这些变量进行初始化;调用用户的初始化函数TD_Init(),对用户自定义的变量进行初始化。然后,固件程序会在1秒钟间隔内开始重新列举(ReNumerate)设备,直到端点0收
9、到SETUP令牌包为止;一旦端点0收到一个设置包,固件架构就会启动任务分配器。图5-1-4:固件框架流程图在程序起始时,固件框架会顺序执行下列步骤:所有内部变量的复位;调用初始化函数TD_Init()。用户自定义端口、寄存器、端点工作方式等的初始函数就放在TD_Init()函数中调用。在完成TD_Init()函数调用后,固件程序设置USB接口为未配置状态,重新分配描述符表,使能中断;在紧接着的1s时间内,固件程序开始重新列举(ReNumerate)设备,直到端点0收到SETUP令牌包,表示USB设备已经被主机重新列举。当重新列举完毕,固件架构就会启动任务分配器,进入任务分配阶段,其实是一个无限
10、循环,每一个循环固件程序都顺序执行下列工作:. 调用用户工作函数TD_Poll(),本设计开发固件过程中,把用户自定义函数放在此函数体中执行;. 判断是否有等待处理的标准设备请求。如果有,固件架构的任务分配器会分析收到的请求,并作出响应;. 判断USB核心是否已经设置了USB闲置标志。没设置闲置标志,则固件架构返回步骤重新按顺序执行各步骤;若已经设置了闲置标志,则固件架构调用用户函数TD_Suspend()函数,若返回值为真,则挂起微控制器。当微控制器挂起后,任务分配器会一直检测是否有恢复事件发生。当检测到恢复事件发生,就使微处理退出挂起状态,调用恢复函数TD_Resume(),返回下一个循环
11、。本采集系统中CY7C68013固件程序对上位计算机发送的命令控制字的识别、图像数据的读取、数据的传送、IC接口的数据通信、USB中断的处理等都是通过在固件架构提供的函数中加入用户自定义函数来完成的。5.1.5用户函数 本系统固件程序设计中,主要涉及到了两个用户函数,初始化函数TD_Init()和工作函数TD_Poll();初始化函数TD_Init() 在固件架构被初始设置后,此程序被调用执行,它在整个固件的运行过程中只被调用一次。固件架构在运行此程序之后才执行重新设备列举和工作分配等工作。因此,此函数的目的就是初始化全局状态变量,用户可以把自己对各寄存器及变量的设置,包括端口的设置、端口寄存
12、器及缓冲区的初始化、FIFO的设置、GPIF的设置等以及用户定义的各种全局变量都添加到此函数中。本系统固件程序设计中,在此函数中对CY7C68013中的端点及其缓冲区进行了配置,并初始化GPIF工作方式。TD_Init()函数的代码形式如下: Void TD_Init(void) REVCTL=0 x03; /新片版本要求int I; /定义全局变量EP1OUTCFG=0 xA0; /配置EP1OUT端点为BULK传输方 /OUT方向SYNCDELAY; /系统延时SYNCDELAY;EP1OUTBC=0 x00; /清空EP1OUT端点缓冲区SYNCDELAY;EP2CFG=0 xDA; /
13、配置EP2端点工作于BULK传输 /IN方向,1024字节2倍缓冲区方式Gpifinit() /调用GPIF波形描述表,初始化GPIF工作函数TD_Poll()在USB设备运行时,此函数被不断的重复调用,也称USB轮询。正是因为此函数一直重复执行,本系统固件中把端点检测函数放在此函数体内,以实现对上位计算机发来的命令控制字的接收与处理。对GPIF的使用,数据的传输,都放在此函数中执行。需要注意的是,如果在此函数中放置的代码执行需要大量的处理时间,此函数返回时间过长,就会导致固件架构无法响应设备请求及USB总线设备挂起事件,因此,如果代码执行需要大量处理时间,就必须分为多次执行,多次调用此函数。
14、本设计中的自定义工作函数流程图如图5.2所示。 由于TD_Poll()实际上是在整个固件运行过程中被不断执行的,而自定义函数就放在TD_Poll()内部,因此,可以不断的查询端点数据缓冲区。当上位计算机对USB设备进行读写操作时,实际上就引起了相应端点数据缓冲区的数据变化。通常的设备请求是由0端点处理,一般用户请求不能使用0端点。本设计固件开发时,使用了端点EP1OUT来接收来自上位计算机的控制命令字,这样,每当检测到EP1OUT端点数据缓冲区有数据出现时,就说明是上位计算机发送的命令控制字,于是固件程序对其进行分析,设置对应的OV7620的工作方式;虚线框中为GPIF功能模块,可以利用Cyp
15、ress公司提供的GPIF Designer工具软件进行辅助设计。流程图最后标注了EP2端点发送数据,是为了叙述方便,实际中CY7C68013的FIFO设置为自动打包(Auto-In)方式,EP2端点数据缓冲区装满预设个数的数据后,会自动打包输出数据,不需要固件的干预。图5-1-5:自定义函数流程图5.2设备驱动程序及应用程序设计5.2.1设备驱动程序简介 驱动程序实际上可以理解为一系列控制硬件设备的函数。在早期的计算机系统中,驱动程序的概念并不明确,操作系统中运行的应用程序可以直接访问硬件设备,由于当时都是单任务操作系统,这种访问方式并没有太大问题,但随着计算机软硬件技术的不断发展,操作系统
16、向着多任务并行操作发展,系统中可能同时有若干个应用程序在运行,如果操作系统让这些应用程序随意直接访问硬件,就非常可能引起导致系统崩溃的混乱。在Windows系列操作系统中,系统出于安全与系统稳定性的考虑而对硬件采取了屏蔽的措施,使得用户应用程序不能直接访问计算机的硬件设备,只能通过访问底层设备驱动程序来操作硬件。Windows环境下包含的设备驱动程序类型有:VxD(Virtual Device Driver)主要应用在Windows98/Windows ME操作系统中;KMD(Kernel Mode Driver)主要应用于Windows NT操作系统中;WDM(Win32 Driver Mo
17、del)所谓的跨平台设备驱动程序模型,可以运行在Windows98及其以后版本的Windows操作系统中,是目前通用的设备驱动模式。WDM是Microsoft公司在1997年推出的一种跨平台的驱动程序模型,它属于操作系统内核模式,其驱动程序由运行于内核模式的系统级代码组成。WDM设备驱动程序实际上是一个包含了许多操作系统可调用例程的容器,这些例程可以使硬件设备执行相应的操作。5.2.2 USB设备驱动程序体系结构USB设备驱动程序属于标准的WDM设备驱动程序,其驱动程序接口及驱动程序栈如图5.3所示。图5-2-1:USBDI与USB驱动程序栈 其中,位于最上层的USB总线用户驱动程序仅包含了用
18、来控制不同USB总线外设的设备驱动程序,其功能是接收来自用户应用软件的硬件操作请求,创建URB(USB请求块),然后通过USB驱动程序接口(USBDI)将URB提交到USB驱动程序栈。而栈中最顶层的USB线根集线器驱动程序处理URB,然后与USBD通信。USBD调度总线时间,选择两种主控制器驱动程序之一同其下方的主控制器进行通信,最后由主控制器驱动程序直接实现对USB物理总线的访问。5.3应用程序设计 界面应用程序负责和USB设备驱动程序进行接口,以操纵USB设备,并向用户提供可视化的操作。用户只能看见向USB设备发送的原始数据和从USB设备接收的最终数据。本设计中,用户应用程序运行在Wind
19、owsXP操作系统下,应用程序实现与WDM通信是通过调用Win32API函数来实现的。应用程序实现对USB设备操作的流程图如图5.4所示。 图5-3-1:用户应用程序操作流程图首先利用CreateFile()函数来寻找连接到主机的USB设备,如果找到,就打开设备;当找到并成功打开连接到主机的USB设备后,就可以调用DeviceIoControl()函数与设备驱动程序进行通信,包括从设备驱动程序中读取或写入数据;应用程序完成对USB设备的读写操作后,使用CloseHandle()函数关闭USB设备。Windows系统的API函数CreateFile()的返回值是设备的句柄,在本系统应用中,如果检
20、测到并成功打开了USB设备,则该函数的返回值就是找到的USB设备的句柄。应用程序中应用CreateFile()函数的典型调用代码形式为:*hDeviceHandle=CreateFile(DeviceName, /驱动程序提供的设备名GENERIC_WRITE, /访问模式FILE_SHARE_WRITE, /共享模式NULL, /安全属性指针OPEN_EXISTING, /创建方式0,NULL), 其中DeviceName为驱动程序自动分配给连入主机的USB设备的设备名称。本系统使用的驱动程序EZ-USB GPD支持多个EZ-USB设备同时接入主机,对每一个连入主机的EZ-USB设备,驱动程
21、序都生成一个“ezusb-i”形式的链接符号,其中“i”是一个从0开始的顺序数列。 用户应用程序完成了对USB设备的操作后,需要调用API函数CloseHandle()来关闭设备。CloseHandle()函数的调用非常简单,它只需要一个参数,即设备的句柄。其调用代码为:CloseHanle(hDeviceHandle); 为了保证用户应用程序与USB设备之间数据传输的稳定性,应用程序需要建立两个线程,其中一个线程用来进行USB的控制通信,另一个线程用来进行图像数据的传输。 参考文献萧世文编著.USB2.0硬件设计.北京:清华大学出版社,2002朱正平,宁百齐等.基于USB2.0接口芯片FX2
22、的高速数据采集板的设计实现.微计算机应用,2006,Vol.27,No.3.p328-331袁祥辉著.固体图像传感器及其应用(修订版).重庆:重庆大学出版社,1996边海龙,贾少华编著.USB2.0设备的设计与开发.北京:人民邮电出版社,2004张弘.UBS接口设计.第1版.西安:西安电子科技大学出版社,2002Cypress.CY7C68013 EZ USB FX2 USB Microcontroller,High Speed USB Peripheral Controller.2006苏建坡、马海涛等.基于USB2.0及GPIF的CMOS图像传感器视频实时采集系统.仪表技术与传感器,2006,9期:p35-37Cypress.EZ-USB FX2 Technical Reference Manual Version 2.2 2007OmniV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于大数据的数字政府决策支持系统建设
- 医疗资源分布不均的解决策略探讨
- 蚝油制造中的传统工艺与现代技术融合考核试卷
- 盾构机施工中的施工进度监控与调整策略研究进展报告考核试卷
- 贸易代理国际商务合同翻译考核试卷
- 豆类批发商市场消费者行为与需求分析研究考核试卷
- 羽绒制品企业法律风险防范与合规经营考核试卷
- 茶叶功能性成分研究考核试卷
- 皮装饰制品的原料采购与供应链管理考核试卷
- 纺织品及针织品库存管理考核试卷
- 《中央空调系统培训资料》课件
- 2025年新兴际华集团有限公司招聘笔试参考题库含答案解析
- 中国干眼临床诊疗专家共识(2024年)解读
- 2025年华润电力招聘笔试参考题库含答案解析
- 2025年云南省广播电视局直属事业单位招聘62人管理单位笔试遴选500模拟题附带答案详解
- 人格与精神障碍-学做自己的心理医生-暨南大学2中国大学mooc课后章节答案期末考试题库2023年
- 2025届苏教版高考仿真模拟英语试卷含解析
- 【MOOC】美在民间-南京农业大学 中国大学慕课MOOC答案
- 食品配送服务质量管理制度
- 2024年青海省西宁市公开招聘警务辅助人员(辅警)笔试必刷经典测试卷(1)含答案
- 2mm土工膜长丝土工布检测报告合格证
评论
0/150
提交评论