




已阅读5页,还剩65页未读, 继续免费阅读
(控制理论与控制工程专业论文)嵌入式数据采集系统的usbhost设计.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 u s b 具有的即插即用,可热插拔,扩展方便等特点使其在数据采集系统、工控行 、i e 和嵌入式用户中的需求越来越大;同时随着应用范围的不断扩大,存掌上电脑, p d a 和许多工业应用方面提出了新的要求:在嵌入式系统中集成u s b 主控模块。 u s b 使用方便,但开发非常困难。整个u s b 的协议框架非常复杂,在p c 机 上有足够的资源实现其三部分组件h o s t 控制器、u s b 堆栈及u s b 类驱动程序, 但在嵌入式系统中要困难的得多,必需解决u s b 圃件与嵌入式应用及其基础计算 平台集成为体时所形成的复杂问题。 本文将嵌入式采集系统和u s b - - h o s t 功能结合起来,设计实现了一个问时 具备便携式存储和以太网实时监控两种方案的系统:在工控领域,基于u c o s 一1 i 嵌入式操作系统通过以太网进行实时的数据监控;在野外脱离p c 机或无网络覆盖 的条件下,对采集的数据进行记录,支持u 盘或移动硬盘等便携式存储设备。 论文的第一部分介绍了u s b 的相关技术,包括u s b 主机协议、u s bm a s s s t o r a g e 类协议等。 第二部分介绍了本系统使用的嵌入式操作系统u c o s 一1 1 和嵌入式t c p i p 协议 栈u l p 。 第三部分进行本系统的结构规划和硬件设计,包括数据采集模块、s l 8 11 h s 的控制模块、以太网接口控制模块和l c d 显示模块的设计等。 第四部分进行软件设计和实现,包括s l 8 11 h s 的通信、r t l 8 0 1 9 a s 的驱动、 u s b 系统软件设计、m a s ss t o r a g e 类协议程序设计及u l p l 办议栈的实现等。 论文的最后部分进行了总结。 关键词:u s b - h o s t ;数据采集;u c o s i i ;t c p i p t h eu s b h o s t d e s i g no f e m b e d d e dd a t ac o l l e c t i n gs y s t e m a b s t r a c t t h eu n i v e r s a ls e r i a lb u s ( u s b ) i n t e r f a c ei st h em o s ts u c c e s s f u li n t e r f a c em p e r s o n a lc o m p u t i n g t h i ss u c c e s si s d u ei nl a r g ep a r tt ot h el o wc o s t ,e a s e o f - u s ea n d p l u g a n d p l a yo fu s b i ta p p l i c a t i o nh a sa t t r a c t e dm o r ea n dm o r ea t t e n t i o n sa n di th a s b e e ne m p l o y e di nav a r i e t yo ff i e l d ss u c ha st h ed a t ac o l l e c t i n gs y s t e ma n de m b e d d e d u s e ra n ds oo n w i t ht h ep o p u l a r i t ya n dd e v e l o p m e n to fc o m p u t i n gt e c h n o l o g y ,t h ea r e a o fi t s a p p l i c a t i o n si s s t i l lb e i n gw i d e n e de a c hy e a ra n dt h en e wr e q u i r e m e n tt h a t u s b h o s tm o d u l ec a l lb ei n t e g r a t e di nt h ee m b e d d e ds y s t e mh a sb e e np r o p o s e di nm a n y f i e l d s g e n e r a l l y ,t h ee x p l o i t a t i o n o ft h eu s bi s v e r yh a r dt h o u g h i th a s m a n y d i s t i n g u i s h i n gf e a t u r e s t h ep r o t o c o lf r a m eo fe n t i r eu s bi sv e r yc o m p l e x ,w h i c hh a s e i l o u # r e s o u r c e s t oa c h i e v ei t st h r e es e c t i o nm o d u l e s ,h o s t c o n t r o l l e r ,u s b s w a r e h o u s ea n du s b sd r i v e ri np c h o w e v e r ,w h e ni ti sc o n s i d e r e di nt h ee m b e d d e d s y s t e m ,t h ep r o b l e mb e c o m e sm o r ec o m p l e x t h ec o m p l i c a t e dc i r c u m s t a n c em a i n l y c o m e sf r o mt h em e r g i n go ft h eu s bf i r m w a r e ,a p p l i c a l i o no fe m b e d d e ds y s t e ma n d h a r d w a r e i nt h i sp a p e r ,w ed e s i g na n dr e a l i z et h ee m b e d d e dd a t ac o l l e c t i n gs y s t e m w h i c hp o s s e s sp o r t a b l em e m o r ya n dt h ee t h e r n e ts c h e m eo f u c o s i i t h ef i r s tp a r to ft h et h e s i sd e s c r i b e st h ec o r r e l a t i o nt e c h n i q u eo fu s bm a i n l y i n c l u d i n gt h eu s bh o s tc o m p u t e rp r o t o c o l sa n d u s bm a s ss t o r a g ec l a s sp r o t o c o l s t h es e c o n dp a r ti n t r o d u c e st h ee m b e d d e do p e r a t i o ns y s t e mu c o s 一1 ia n dt c p 佃 p r o t o c o ls t a c ku l pi nd e t a i l t nt h et h i r dp a r tt h es y s t e m a t i cc o m p o s i t i o np l a n n i n ga n dh a r d w a r ed e s i g na r e i n t r o d u c e d ,w h i c hc o n s i s to ft h e d a t a c o l l e c t i n gm o d u l e ,t h e c o n t r o lm o d u l eo f s l 8li h s ,e t h e m e ti cm o d u l ea n dt h el c dd i s p l a ym o d u l ea n ds oo i l t h ef o u r t hp a r to ft h i sp a p e r , t h es o f t w a r ed e s i g na n dr e a l i z e ds c h e m ei sg i v e n , i n c l u d i n gt h ec o m m u m c a t i o no fs l 8 1i h s ,t h ed r i v eo f r t l s 0 1 9 a s ,t h ed e s i g no f t h e u s bs y s t e ms o f t w a r e ,m a s ss t o r a g ep r o t o c o lp r o g r a m m i n ga n dt h ep r o t o c o ls t a c ku l p r e a l i z a t i o i l t h el a s tp a r to f t h i sp a p e rs u m m a r i z e st h ed e s i g no f t h es y s t e m k e yw o r d s :u s b :d a t ac o l l e c t i n g ;u c t o s - i i ;t c p f l p 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成博士硕士学位论文 :送式塑垣墨堡丕筮曲堕旦二h q 墨! 退让:。除论 文中已经注明引用的内容外,对论文的研究做出重要贡献的个人和集体,均已侄 文中以明确方式标明。本论文中不包含仟何未加明确注明的其他个人或集体已经 公开发表或未公开发表的成果。 本声明的法律责任由本人承担。 论文作者签名:冬扫一年弓月2 z - 学位论文版权使用授权书 本学位论文作者及指导教师完全了解“大连海事大学研究牛学位论文提交、 版权使用管理办法”,同意大连海事大学保留并向国家有关部门或机构送交学位 论文的复印件和电子版,允许论文被查阅和借阅。本人授权大连海事人学可以将 本学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或 扫描等复制手段保存和汇编学位论文。 保密口,在年解密后适用本授权书。 本学位论文属j i :保密口 不保密口( 请在以上方框内打“”) 论文作者签名:亳 导师签名 t y p e h t o n s ( 0 i p 唧吖p e - i p ) ) u i p _ a r p _ i p i n o ; u i p _ p r o c e s s ( u i p _ d a t a ) ; i f ( u i pl e n 0 1 u i p _ a r po u t o ; r t l 8 0 1 9 d e v _ s e n d 0 ; , e l s ei f ( b u f - t y p e h t o n s ( u 耻_ e t h t y p t a r p ) ) u i p _ a r p _ a r p i n o ; i f ( u i p _ l e n 0 ) f r t l 8 0 1 9 d e vs e n d 0 ; ) ) ) 最后一个任务是t a s k _ u i p t i m e o u t 0 ,它是用来处理数据包的超时重发,周 期计时是用于驱动所有u l p 内部时钟事件,当周期计时激发,每一个t c p 连接应 该调用u l p 函数u i p a 3 e r i o d i c 0 来处理周期计时事件,当u i p _ p e r i o d i c ( ) 函数返回,输 出的i p 包要放在包缓存晕,然后调用r t l 8 0 1 9 d e v _ s e n d 0 将口、包发送到以太网一卜。 这里重发的实现并不是将已经发送的还没应答的数据包保存在一个队列中,而是 不保存包的内容采用设置一个标忐表示重发包,应用程序榆查这个包并产生先前 发送过的包同样的数据,这样可以有效的节省资源。任务t a s k _ u i p t i m e o u t 0 是实现如下所示: v o i dt a s k 。u i p t i m e o u t ( v o i d * p p d a t a ) r e e n t r a n t i n t g u i ; p p d a t a = p p d a t a ; w h i l e ( 1 ) o s t i m e d l y ( t o o ) ; f o r ( i = o ;i o 、 u i p a r po u t o ; r t l s 0 1 9 d e v _ s e n d 0 ; ) ) ) 其中调用u c o s i i 的o s t i m e d l y 0 i 茧1 数足延时1 秒。 第4 章结构规划和硬件设计 4 1u s b 主机硬件规划 从理论上来说,任何一种c p u 都町以成为摔制u s b 主机系统的核心,虽重要 的要求就只是其外扩总线能够满足u s b 总线的数据传输速度要求。基于实验室条 件及成本考虑,本设计采t l j 增强型5 1 c p u 。硬件设计中除了u s b 主控模块外,还 添加了以太删模块、数据采集模块、为实现片上编程( i s p ) 扩展的r s 一2 3 2 串行 接口模块以及为获得一个与用户交互的界面而扩展的l c d 模块。从完成情况看, 这个设计基本满足要求。 图4 i 系统模块图 4 2 嵌入式u s b 主机接口芯片s l 8 1 1 h s c y p r e s s 公司的s l 8 1 1 h s 芯片是一种嵌入式的u s b 土,从控制器。其数据手册 见参考文献0 9 1 。 4 2is l 8 11 h s 的功能模块及特点 s l 8 1 l l l s 实现了u s b 主机结构中的总线接u 层的功能。s l 8 1 l h s 的功能模块 框图如图4 2 所示。 s i e 用来实现数据并、串转换的任务。处理器接口提供了数据、地址和控制信 号线。中断控制嚣通过检测各种u s b 总线的状态变化,以中断信号的方式报告给 外部的核心c p u 。r a m 一方面提供了存储数据的缓冲区,另一方而又定义了各种 寄存器用于控制s l s l l h s ,并对u s b 的各种状态进行检测。时钟发生器模块需要 外接晶振为整个s l 8 1 i h s 提供时钟。集成的根h u b 提供u s b 设备的连接点。 外接晶振为整个s l 8 1 i h s 提供时钟。集成的根h u b 提供u s b 设备的连接点。 d + d x l x 2 图4 2s l 8 1 1 h s 的功能模块框图 s l 8 11 h s 主要特点: 可用于u s b 主机和设备接口控制器; 支持u s b 坍议1 1 ,提供全速、低速u s b 总线速度方式; 片上集成了s i e 、单端口根h u b 、u s b 收发器和2 5 6 字节的s r a m 3 3 v 工作电压,接口兼容5 v ; 硬件自动产生帧起始包s o f 和c r c 5 1 6 校验。 4 2 2s l 8 11 h s 管脚说明 表4 1s l 8 1 1 h s 引脚描述 d 7 4 2 3s l 8 11 h s 寄存器 c p u 对s l 8 1 1 h s 的状态进行检测和控制等的操作都是基于寄存器实现的, s l 8 1 1 h s 片内带有2 5 6 字节的r a m ,其片内寻址范围是0 x 0 0 2 0 x f f 。其中低地 址的1 6 个字节是s l 8 1 1 h s 定义的寄存器,而其余的2 4 0 字节则是存储缓冲区。 u s b ah o s t 和u s b bh o s t 是2 套完全并行的寄存器,用于实现“乒乓”的数据 处理机制。两套寄存器可以完全进行交替的操作,即其中一套正在配置时,另一 套可以进行数据的传输。这样互相交替,就可以提高系统处理数据的效率。 表4 2s l 8 1 1 h s 寄存器袭 4 3 系统硬件设计 4 _ 3 1c p u 模块 系统采用w 7 8 e 5 1 6 b 是w i n b o n d 生产的与i n t e l 的8 0 5 2 指令集兼容的8 何微 控制器,内部含有两部分呵在线更新的f l a s he p r o m ,6 4 k 的主f l a s he p r o m 和 4 k 的辅f l a s he p r o m ,用于在系统编程。这一功能可以大大简化系统调试的工作, 完全脱离模拟器。 w 7 8 e 5 1 6 b 具有以下特性: ( 1 ) 全静态设计,最高工作频率为4 0 m h z ,必要时外部时钟可降至0 h z 。 f 2 ) 6 4 k bf l a s he p r o m 存储应用程序( a p r o m ) ,4 k b f l a s he p r o m 内的程 序可用来更新应用程序( u ) r o m ) :单片机正常启动时,运行6 4 k bf l a s he p r o m 内的应用程序。 f 3 ) 5 1 2 字节的片内r a m ( 包括2 5 6 字节a u x r a m ,可由软件选择) ,分成 2 个存储单元:2 5 6 字节高速暂存和2 5 6 字节辅存,通过不同的寻址方式来访问。 r a m 中的0 h - - 1 2 7 h 同8 0 5 2 一样直接或间接寻址,地址指针是被选中的寄存器 单元中的r 0 和r 1 。r a m 中的1 2 8 h 2 5 5 h 同8 0 5 2 一样只能间接寻址,地址指 针是被选中的寄存器单,中的r 0 和r 1 。a i7 x r a m 中的0 h 2 5 5 h 采用外部数 据存储器的方式间接寻址,用m o v x 指令,地址指针是选中寄存器单元的r 0 和 r 1 以及d p t r 寄存器。在c h c o n 寄存器中的第4 位置位后,a u x r a m 有效, 访问a u x r a m 使用“m o v x r i ”指令。当执行内部程序存储器的指令时,访 问a u x - r a m 不会影响p o 、p 2 、w r 和r i b 。a u x r a m 在复位后失效。 f 4 ) 程序存储器和数据存储器可寻址空间范围都是6 4 k b 。 ( 5 ) 4 个8 位双向口:p 0 p 3 ,1 个4 位双向多用途编程口p 4 ( 只有p l c c 4 4 封 装和p q f p 4 4 封装的具有、。 ( 6 ) 3 个1 6 位的定时器计数器:t o 、t l 、t 2 。t o 和t 1 功能与8 0 5 1 相同,t 2 是一个1 6 位定时器计数器,它由t 2 c o n 配置和控制,t 2 能作为外部时钟计数器, 也能作为内部定时器,这取决于t 2 c o n 的c t 2 位的配置情况。t 2 有3 种操作方 式:清零、自动重写、波特率发生器,在清零和自动重写方式时,时钟频率与t 0 和t l 相同。 ( 7 1 具有一个全双工串行通讯口。 f 8 1 具有6 个中断源和2 级中断能力。 ( 9 ) 具有编程后的编码保护功能。 由于本系统扩展的模块较多,使得控制线比较紧张。p 4 端口的4 个引脚伞部利 用上,其中,p 4 - 3 脚作为在系统编程线和i n t 2 ,缺一不可,只得采取跳线的办法 让i s p 和a d i n t 共用一根。 4 3 2u s b 主控模块 由于s l 8 1 1 h s 的读写时序与5 1 单片机有很大不同,不能利用单片机的w r 和r d 线通信,只好重新分配通信引脚。详细的w 7 8 e 5 1 6 b 的i o 端口情况如表 4 3 所列。 表4 3w 7 8 e 5 1 6 b 的通信引脚分配 4 t 3 - 3 以太网卡模块 系统的以太网卡模块围绕r t l 8 0 1 9 a s 芯片实现,这是个获得广泛应用的成熟 的芯片,其具体参数可参考文献 4 2 1 、 4 3 。 w 7 8 e 5 1 6 b 与r t l 8 0 1 9 的硬件接口电路图如图4 3 所示。 l i x 2 3 2 r x d t x d 亦、 m c u 暑f l l w 7 8 e s l 6 b x t a l 2 i 盯2 p 35 6 2 2 s 6 c e 、 r d w r d a t a :de 0 ,7 a d d r :a 0 ,1 5 a d c t l :r d ,w r ,a l e s d 0 ,7 s a 0 ,4 3 s 8 ,9 】 s 5 ,7 n o ,1 9 r t l 8 0 1 9 i o r b i o w r 锄 s 衄l t n t 0 i o c s l r s t d r v a 图4 3w 7 8 e s l 6 b 与r t l 8 0 1 9 的硬件接口电路图 r x t x 图中,数据线和地址线均采取总线方式:8 位数据线和1 6 位地址线,p o 口8 位端口为复用a d 端口。读数据时,d 0 ,7 3 数据直接送到w 7 8 e s l 6 b ;写数据时, d o ,7 1 送到r t l 8 0 l g a s 。i o r b 、 o w r 接到单片机的r d 、w r ,s a 0 一s a l 9 为网 卡的地址线,s a 0 一s a 4 接单片机的p 2u ,s a 8 、s a 9 接高电平,其他的接地。 r t l 8 0 1 9 a s 与w 7 8 e 5 1 6 1 3 同时复位,p 3 5 直接与8 0 1 9 a s 的r s t d r v 引脚相联, 单片机用p 3 5 来复位网卡,i o c s l 6 脚的电平一直为低,决定了8 0 1 9 a s 采用8 位 数据总线宽度( 高电平时为1 6 位总线方式,低电平时为8 位总线方式) 。i n t 2 中断接到r t l s 0 1 9 a s 的i r q 9 。在程序中,以i o 方式访问r t l s 0 1 9 a s , s m e m r b 、s m e m w b 接高电平关闭其m e m o r y 方式。 4 3 4 数据采集模块 数据采集部分在本系统中处于次要地位,仅仅作为实际应用的演示。因此, 采用了常用的a d c 0 8 0 9 作为a ,d 转换器件。 表4 4 单片机与a d 0 8 0 9 管脚的连接 w 7 8 e 5 1 6 b 管脚 连接的芯片管脚说明 4 3 5 l c d 模块 l c d 采用带中文宁库图形的y m l 2 8 6 4 。可显示4 行,每行8 个汉字。有串行 和并行两种数据传输方式。为减少控制线的使用,本系统采用串行接l j 传输数据。 因为5 l 单片机没有同步串行外部接几,只好利用p 4 门模拟s p i 的时序信号。在 硬件上用p 4 0 模拟同步时钟信号,用p 4 1 输出串行数据分别接到y m l 2 8 6 4 的6 、 5 两个引脚。 4 5 第5 章软件设计和实现 本章主要介绍了课题巾涉及的软件编程方面的内容,与硬件相关部分可以与 第四章对照了解。课题中使用的c 交叉编译器是k e i lc 5 1 集成丌发工具。 5 1u s b 主机系统软件设计 u s b 系统的通信是由u s b 主机来控制的。设计嵌入式u s b 主机要深入把握、 理解u s b 系统和主机的通信。简单的u s b 主机的软件流程如图5 1 所示。 一k 否 。虽丕磐儿出簖9 、 := 竺! 一一 是 ,断处理:1 发送设备命令:2 接受设备状态信 :3 配置设备:4 分配地址;5 供给电源 溪爹一 i 是 发送接受数据命令, 允许外设发送数据 苣诲硬蕃i ;i 暮残话动一 否 、懒逞耍! 至至垫妙一一 盘 罔5 1 简单的u s b 主机的软件流程 5 1 1 单片机与s l 8 11 h s 的通信 这是整个u s b 体系软件的根基,包括单片机对s l 8 11 h s 的读、写和设定地址 等函数。 ( 1 ) 读数据:由于s l s l l h s 的外接总线的地址和数据信号是复用的,通过 a 0 信号来区分地址和信号。因此,w 7 8 e 5 1 6 b 读取或写入s l s l l h s 内存的时候首 先要发送地址,然后再发送数据。此外,由于s l 8 1 1 h s 采用了地址自动增址的机 制,因此,如果需要读取或写入连续地址内的数据时,只需要发送起始地址即可, 然后每读取或写入一次数据,s l s l l h s 就会自动将寻址地址加i 。 在编写时序来模拟总线传输时,首先要明确s l 8 11 h s 的读写信弓的时序要 求。图5 2 所示是s l 8 1 1 h s 的读数据时序。详细的时间周期上的要求这罩不再详 细讨论,重点是保证各种信号时序上的先后顺序达到要求。 二0 一一# j 严= e 2 竺一 、厂1 一一一 弋二二二 艺兰厂 t ,a 。一- 一_ 厂 t w d s u 一一一1 卜川川1 r ”卜t r d h l d 、! 严瓦! 二! 产“l d l 一_ t c s cs 图5 2s l 8 11 h s 的读信号时序 根据时序的要求,读取数据前首先发送地址。 v o i ds e t h o s t a d d r e s s ( e h a ra d d r e s s p ) r e e n t r a n t p 0 = a d d r e s s p ;数据线发送地址,但此时地址还不会被s l 8 11 h s 接收 4 7 m 姆 咖 瞄 p 1 = o x e a :设置总线控制信号为s l 8 1i h s 接收地址信号 u s bn w r 2 t ; u s b _ n c s = 1 ;地h k 传输完毕,关闭片选、写等信号 p i = 0 x f e ; ) 地址发送完毕之后,s l 8 1 1 h s 就接到了需要读取数据的内存单元地址f 包括寄 存器的地址) ,紧接着w 7 8 e 5 1 6 b 就可以读取数据。 i n t 8 uh o s t r e a d ( v o i d ) r e e n t r a n i f u s b _ a o ;l : u s b _ n c s = o ; p 1 = 0 x e 7 ; r e l u mp 0 ; ( 2 ) 写数据:与读数据类似,w 7 8 e 5 1 6 b 要往s l 8 1i h , s 的内存单元写数据时, 也要首先发送地址,然后再发送数据。可以放入同一函数执行。 v o i dh o s t w r i t e ( c h a rh o s t w r i t e a d d r e s s ,c h a rw r i t e c o n s t e n t ) r e e n t r a m p 0 = h o s t w r i t e a d d r e s s ; p 1 = o x e a ; u s b _ n w r = 1 ; u s bn c s = i ; p 0 = w r i t e c o n s t e n t ; p 1 = 0 x e b ; p 1 = o x f e ; ) 在此基础上参考s l 8 1 1 h s 数据手册,进行s l s l l h s 初始化。 5 1 2u s b 主机最底层数据包的发送 u s b 最底层的数据结构是包。这些包按照传输要求的不同,按照设置s e t u p 事务、输入事务和输出o u t 事务的3 种方式进行主机和设备之间的传输。而 这3 种事务的不同组合,又构成了u s b 的4 种传输方式,本课题只支持u s bm a s s s t o r a g e 类设备,并大量采用单批量b u l k - - o n l y 了类。因此只需支持u s b 的控制 传输与批量传输。在软件设计方面,分为两个步骤来实现: 1 构建函数u s b t r a n s a c t i o n ( ) 来实现u s b 的3 种事务。 v o i du s b _ t r a n s a c t i o n ( u n s i g n e dc h a rp i d ,u n s i g n e dc h a re p _ a d d r e s s ,u n s i g n e dc h a ra d d r e s s ,i n t l e n g t h ,c h a r4 p d a t a b u f ) ; ( i ) 函数的输入参数 参数1 是令牌包阶段的p i d ,用于区分这3 种事务。 # d e f i n ep i d _ s e t u p 0 x 2 d 设置包p i d # d e f i n ep 1 d i n 0 x 6 9 输入包p i d # d e m ep i d0 u t o x e l 输出包p 1 d 参数2 是端点号e p a d d r e s s ,u s bm a s ss t o r a g e 类设各一般具备端点0 、批量 输出b u l k o u t 端点、批量输入b u l k 一1 n 端点。主机在对设备枚举阶段,通过端 点描述符来获取b u l ko u t 和b u l ki n 端点的端点号。程序把p i d 和e pa d d r e s s 组合在一起写入s l 8 11 h s 的e p o s t a t u s 寄存器。 u n s i g n e dc h a rp i d e p a ;佃l d e p a 为定义的中间变晕,用于储存p i d 和e p a d r e s s 的组合值 p i de p a = p i d & 0 x 0 f ;胛i d 的高四位为校验码,低四位为有效值 p i d _ e i p a = 口i d _ e p a m a x p a e k e t s i z e ) s l 8 11 h s _ b u f l 2 s l 8 11 h s _ b u f 0 + m a x p a c k e t s i z e ; j h o s t w n t e ( e p o a d d r e s s ,s l 8 1 1 h s b u f 0 ) ;当前的数据发送从s l 8 1i h s b u f 0 开始。如果有 大量数据发送就需要启动s l 8 11 h s _ b u f l ( 2 ) 数据包的命令字c m d w o r d 在准备好s l 8 1 1 h s 的发送接收缓冲区之后,就可以进行数据的收发了。这 时就需要给s l 8 11 h s 的e p o c o m r o l 寄存器发送命令字c m d w o r d 来启动数据的发 送或接收。 批量传输玳事务的第一个数据包命令字c m d w o r d 的值是0 x 0 7 ; 批量传输o u t 事务的第一个数据包命令字c m d w o r d 的值是0 x 0 3 : 控制传输s t u p 事务的数据包命令字c m d w o r d 是的值0 x 0 3 ; 控制传输矾事务的第一个数据包的命令字c m d w o r d 的值是0 x 4 7 ; 控制传输o u t 事务的第一个数据包的命令字c m d w o r d 的值是0 x 4 3 。 ( 3 ) 启动发送接收数据包 h o s t w f i t e ( h a t s t a m s ,0 x f f ) ;,将i n t s t a m s 寄存器的所有位都置1 ,清除中断状态位, h e s i w f i t e ( e p o c o n r r o t ,c m d w o r d ) ;写入命令字,启动数据包发送接收, c a ) 查询等待发送接收完成情况 s e t h o s t a d d r e s s ( h a i s t a t u s ) ;将s l 811 h s 的地址指针定位于i n t s t a m s 寄存器 w h i l e ( ! ( h o s t r e a d 0 & i ) ) o d o 位置i 表示发牛了数据发送,接收完成的中断 s e t h o s t a d d r e s s ( i n t s t a u s ) ) ;采用自动地址加1 ,如继续有询需重新定位 ( 5 ) 事务的握手包阶段 所有的握手包信息都是由硬件自动完成的,因此,软件不需要做任何的处理。 但是程序也需要知道包的发送接收情况,以此来确定数据包是否被正确的发送 接收。这时就可以通过查询s l 8 1 i h s 的e p o s t a t u s 寄存器获取相关信息。 2 实现u s b 的数据传输方式 实现了u s b 事务后,在这个基础上就能构建u s b 的各种数据传输方式。 ( 1 ) 控制传输 构建函数c o n t r o l _ t r a n s f e r o 来实现控制传输。分为3 个步骤,即初始设置步骤、 可选数据步骤和状态信息步骤。 初始设置步骤中需要发送8 字节的请求命令: u s bt r a n s a c t i o n ( p i d _ s e t u p ,0 , d e v i c ea d d r e s s , 0 x 0 8 ,( c h a r + ) r e q u e s t c m d ) ; 产发送的令牌为p i d _ g e t u p ,端点号为0 ,设备地址为d e v i c e a d d r e s s ,发送的数据长 度为8 字节,发送的内容即为相应的请求命令章 可选数据步骤的实现: 请求命令的w l e n g t h 字段指明了需要交换的数据长度,当值为0 时表示没有 可选数据步骤。如果需要交换数据,则同批量传输类似,实现过程如下: i f ( r e q u e s t c m d - w l e n g h ) ( i f ( r e q u e s t c m d 一 h m r e q u e s t t y p e o x 8 0 + 数据发送方向是主机发送给设备,p r do u m + u s bt r a n s a c t i o n ( p i d _ o u t ,0 ,d e v i c e _ a d d r e s s ,r e q u e s t c m d 一 w l e n g t h ,p d m a b u fa ) ,+ 数据发送方向是设备发送给主机即p i d i n + , u s b _ t r a n s a c t i o n ( p i d i n ,0 ,d e v i c e a d d r e s s ,r e q u e s l c m d 一 w l e n g t h ,p d a t a b u f _ a ) ) 其中,缓冲区p d a t a b u fa 是w 7 8 e 5 1 6 b 的内部r a m 缓冲区,它由函数的调 用者提供,作为c o n t r o lt r a n s f e r 0 的输入参数。 ( 2 ) 批量传输 批量传输的实现较为简单,仅相当于控制传输的可选数据步骤的实现过程。 这里,把批量传输分为批量传输和批量传输o u t ,分别由函数b u l k _ t r a n s f e r _ i n ( 1 和b u l k _ t r a n s f e r _ 0 u t 0 实现。 5 1 3u s b 标准请求命令的实现 u s b 定义了1 1 种标准的请求命令,用户电可以自行定义各种请求命令。这些 命令就是基于控制传输实现的。这些请求命令函数的主要任务就是按格式填写需 要发送的请求命令的内容,然后调用c o n t r o l t r a n s f e r ( ) 函数即可。 获取描述符请求命令, v o i do e td e s c r i p m r ( u n s i g n e di mw v a l u e _ d ,u n s i g n e dc h a rl e n g t h _ d ,u n s i g n e dc h a r * p d a t a b u f _ d ) r e q i e s t c m dr e q u e s t c m d ; 严建立命令结构+ r e q u e s t c m d b m r e q u e s t t y p e = 0 x 8 0 ; + 填入请求命令的内容 r e q u e s t c m db r e q u e s t - = 3 e t _ d e s c r i p t o r ; r e q u e s t c m dw v a l u e - - w v a l u e _ d ; r e q u e s t c m d w n d e x = 0 ; r e q u e s t c m i ) w l e n g i l l = l e n g t h _ d ; c o n t i o l _ t r a n s f e r ( & r e q u s e t c m d ,p d a t a b u f _ d ) ;p 发送该命令+ 产设置设备地址请求命令幸 v o i ds e t _ a d d r e s s ( u n s i g u e di n td e v i c e _ a d d r e s s _ e ) 1 l e q i e s t c m dr e q u e s t c m d ; 产建立请求命令的结构吖 r e q u e s t c m d b m r e q u e s t t y p e = 0 x 0 0 ; 丰填入请求命令的内容+ r e q u e s t c m d b r e q u e s t = s e ta d d r e s s ; r e q u e s t c m d w v a l u e = d e v i c ea d d r e s s _ e ; r e q u e s t c m d w l n d e x = 0 ; r e q u e s t c m d w l e n g i l l 2 0 ; c o n t r o l _ t r a n s f c r ( & r e q u s e t c m d ,o ) ;p 调用c o n t r o lt r a n s f e r 0 函数发送该命令 5 1 4u s b 主机系统的实现 主流程,即u s b 主机运行期间所执行所有功能的宏观定义。比如主机需要对 接入的新u s b 设备进行配置,那么就需要找到该设备,给其分配地址,请求其功 能描述符等,所有这些功能都打包在一个宏观的主流程中。 当一个u s b 设备接人到主机上之后,主机就应该对设备进行枚举,包括获取 该设备的系列描述符。比如,主机需要获取设备的端点描述符,确认该设备提 供了哪些端点,确认端点号和该端点的最大包尺寸等。对于u s b 闪存盘来说,就 是要提供给主机批量输出b u l k o u t 端点和批量输入b u l k i n 端点的端点号,以 及相应的最大包尺寸。然后,主机在后来的批量传输中才能正确地进行一系列操 作。所以,设备的枚举过程是非常重要的。 从软件的角度来讲,枚举过程以及获取描述符的程序设计已经变得比较简便。 因为这些过程是通过发送u s b 的标准请求命令来实现的,在前面已经完全实现了 u s b 请求命令的函数,剩下的工作就足调用已经实现的函数,并把数据( 比如描述 符等) 存储在相应的缓冲区和变量中。 5 1 5u s b 主机协议框架的结构 到这里,就已经非常清楚地了解到整个u s b 主机的活动特性,由图5 3 所示, 层层推进,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论