USB开发中易混淆的概念剖析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
USB开发中易混淆的概念剖析

USB开发中易混淆的概念剖析USB(Universal Serial Bus)通讯具有传输速度快、可靠性高、支持即插即用等优点,已经逐步成为现代数据传输的主流方式,获得了广泛的应用。然而,在USB应用技术越来越成熟的同时,开发人员对于USB技术的运用越来越倾向于顶层使用,对于USB的底层原理与基础协议关注的很少,这会导致在实际开发过程中,遇到问题之后不知从何处着手解决。只有了解了USB的传输协议或者是底层传输通讯原理,才能很好的找出解决途径。文中基于作者多年的USB开发使用经验,并且结合目前研究与生产中广泛使用的几种USB控制芯片,包括Cypress公司的enCoRe系列芯片、EZ-USB芯片以及Netchip公司的NET2888芯片等等,总结了它们在开发使用中最容易遇到而又非常重要的几个问题:USB设备与主机建立通讯过程中枚举和重枚举的区别,这个区别体现在不同的USB控制芯片当中,它对于设备的启动以及连接主机都有深刻影响;重枚举与重置的区别,很多把这个概念混淆,导致在应用中出错;固件程序控制多种启动方式的区别,同样的代码控制着不同的启动方式,理解了这个过程才能很好地控制芯片的工作。1 USB通讯中的重要概念1.1 枚举与重枚举的区别在USB通讯协议中,有一个重要的概念是检测设备,也可称为枚举,它是主机在应用程序与USB设备通信之前,了解该设备的设置与能力并且给该设备指定一个驱动程序的过程,它是任何USB设备正常工作所必须的部分。对于普通的USB设备,主机通过枚举的过程获取设备的描述符,了解设备并根据设备描述符中的PID(产品识别码)与VID(供应商识别码)值选择合适的驱动程序安装,这样就与设备建立了USB连接,之后就可以进行正常USB通讯,枚举的过程如图1所示。然而,对于目前很多USB设备来说,它们与主机建立USB通讯的过程并不完全与上述过程一致,其原因在于当前各型号的USB功能芯片启动固件程序的方式有很大的区别,这些启动方式大致可以分为两种类型:1)固件程序从非易失存储器中启动:每次启动直接从程序内存中读取固件代码,然后在枚举时直接启动运行,这样的程序内存包括ROM(read-only memory)、EPROM(Erasable Programmed ROM)、EEPROM(Electrically Erasable Progra-mmed ROM)、OPT(One-Time Programm able)PROM或是FlashEPROM(闪存);2)固件程序从随机存储器中启动:每次启动后,从外部非易失存储器中读取固件程序并存储在RAM(Random-Access Memory)中,然后启动运行。RAM可以任意删减和重写数据,并且关机后RAM内的数据即告消失,所以在每次开机时,都需要从外部加载固件代码。正因为多了加载固件代码这个步骤,使得第二类芯片在启动时,如果从主机读取固件程序,那么建立USB通讯的过程与上述枚举有很大区别,它的流程如图2所示。从图2可以看出,第二类USB功能芯片启动方式每次都需要从主机下载固件程序,相比上述第一种类型,它具有两个明显的优势:1)用户可根据需求自己编写固件程序,适应性很广;2)开发中调试非常方便,断电即可重新下载固件代码。因此,这种方式工作的USB功能芯片在工程中的应用越来越广泛,这样的方式下,芯片与主机建立通讯的过程我们称之为“重枚举”。重枚举和枚举的最重要区别在于,重枚举需要两次读取设备的描述符,获取两次不同的PID/VID值然后安装不同的驱动,而枚举只需要读取一次描述符并只安装一次驱动。这其中,第一次是读取的是设备默认的描述符,用于建立默认状态下的USB通讯,然后下载固件程序,第二次读取的是根据需求自己编写或者从厂家下载而来的描述符,使得设备实现项目所需的通讯功能。在使用不同的芯片或者不同的程序下载方式时,开发人员往往会遇到驱动安装不对导致通讯不上、设备描述符编写错误导致设备工作效率低下、固件程序无法正常启动等突发状况,例如,作为数据传输系统的USB设备在使用中,经常会遇到USB设备与数据源设备以及主机接收软件在不同的启动顺序下产生不同效果、甚至导致通讯错误的情况,如果不能深刻理解枚举与重枚举的过程和意义,这些问题很难得到根本的解决。1.2 重枚举与重置的区别需要特别指出的是,“重枚举”与枚举过程中的“重置”有重要区别,很多USB开发人员对这两个概念理解混淆,认为枚举中的“重置”就是我们所称的“重枚举”,但它们除了在现象上有点相似外,过程与意义上是有本质区别的:1)“重枚举”指的是有些USB芯片或者外围设备在初次枚举后,通过某种方式更改了其提交给主机的描述符(包括VID/PID值)以及固件程序,从而引起了主机对设备的再次枚举,通过新的描述符再次识别设备的过程;2)而“重置”是每次枚举

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档