关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > USB开发中易混淆的概念剖析

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

作者:时间:2012-12-15来源:网络收藏

然而,对于目前很多设备来说,它们与主机建立通讯的过程并不完全与上述过程一致,其原因在于当前各型号的功能芯片启动固件程序的方式有很大的区别,这些启动方式大致可以分为两种类型:
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所示。

本文引用地址:http://www.eepw.com.cn/article/202022.htm

b.JPG


从图2可以看出,第二类USB功能芯片启动方式每次都需要从主机下载固件程序,相比上述第一种类型,它具有两个明显的优势:
1)用户可根据需求自己编写固件程序,适应性很广;
2)开发中调试非常方便,断电即可重新下载固件代码。
因此,这种方式工作的USB功能芯片在工程中的应用越来越广泛,这样的方式下,芯片与主机建立通讯的过程我们称之为“重枚举”。
重枚举和枚举的最重要区别在于,重枚举需要两次读取设备的描述符,获取两次不同的PID/VID值然后安装不同的驱动,而枚举只需要读取一次描述符并只安装一次驱动。这其中,第一次是读取的是设备默认的描述符,用于建立默认状态下的USB通讯,然后下载固件程序,第二次读取的是根据需求自己编写或者从厂家下载而来的描述符,使得设备实现项目所需的通讯功能。
在使用不同的芯片或者不同的程序下载方式时,开发人员往往会遇到驱动安装不对导致通讯不上、设备描述符编写错误导致设备工作效率低下、固件程序无法正常启动等突发状况,例如,作为数据传输系统的USB设备在使用中,经常会遇到USB设备与数据源设备以及主机接收软件在不同的启动顺序下产生不同效果、甚至导致通讯错误的情况,如果不能深刻理解枚举与重枚举的过程和意义,这些问题很难得到根本的解决。
1.2 重枚举与重置的区别
需要特别指出的是,“重枚举”与枚举过程中的“重置”有重要区别,很多USB开发人员对这两个理解混淆,认为枚举中的“重置”就是我们所称的“重枚举”,但它们除了在现象上有点相似外,过程与意义上是有本质区别的:
1)“重枚举”指的是有些USB芯片或者外围设备在初次枚举后,通过某种方式更改了其提交给主机的描述符(包括VID/PID值)以及固件程序,从而引起了主机对设备的再次枚举,通过新的描述符再次识别设备的过程;
2)而“重置”是每次枚举过程中主机在设备刚连接后要求集线器将USB电缆中D+和D-两个信号都置为逻辑低位(正常时,这两信号有相反的逻辑状态),这个过程中主机与设备也类似断开再连接,与“重枚举”在现象上有点相似,但是它只是枚举中的一部分,它是为了确认设备与主机准备好了下一步配置通信而做的操作,不涉及描述符的变化也就不会使得设备请求再次枚举。



关键词: USB 概念

评论


相关推荐

技术专区

关闭