关 闭

新闻中心

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

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

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

1.3 固件程序对枚举和重牧举的不同控制方式
固件程序是CPU要执行的程序代码,是芯片的核心部分,它不仅控制着设备的数据传输,同时控制着重枚举的实现。Cypress公司的EZ-系列芯片是使用RAM来存储固件程序的第一批芯片,也是目前市场上使用最广泛的一种功能芯片。在此,我们以这种芯片为例深入研究芯片对于不同的启动方式下重枚举与枚举的控制方法。

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

c.JPG


如图3流程图所示,固件程序的一个重要工作在于对重枚举的控制,在EZ-USB芯片的固件程序中,都需要以下代码来控制芯片的重枚举:
d.JPG
重枚举的控制主要依靠USBCS寄存器中的RENUM位和DISCON位,这两位的功能与作用分别如下:
1)RENUM位代表的是EZ-USB芯片使用默认状态或者固件程序来处理枚举过程,可用于判断这一位的值,来确定是否需要重枚举,RENUM位为0时,使用默认方式进行枚举,等待固件程序的下载,这一位为1时,使用固件程序与下载的设备描述符处理枚举过程;
2)DISCON位用来控制USB的断开与再连接,每次DISCON位的值变化为1时,芯片会自动与主机断开连接(其实是一种模拟断开的状态),这一位变成0的时候,芯片又会与主机进行重新连接。
这些RAM存储固件程序的芯片,包括EZ-USB,除了使用RAM外,也都是可以使用其他程序内存的,这种特性在芯片的开发过程与工程应用中非常完美的起到了互补作用。开发中,我们使用RAM每次下载固件程序便于调试,而应用中,又可将固件程序固化到例如Flash EPROM或者EEPROM等存储器。
然而,这种模式下,两种不同的下载固件程序方法对于固件程序的调用却不完全一样,许多开发人员很长一段时间内都没有理解清楚它们之间的区别,导致程序编写和运行中有时会出现各式错误,例如在重枚举的时候读取设备描述符的位置错误,或者多次通电、断电重复操作后部分控制重枚举的寄存器的值没有按照预期变化,导致突发状况。
了解固件程序对于枚举、重枚举的控制方式,有利于我们追踪错误并解决这些问题。在EZ-USB系列芯片中,固件程序对从主机下载固件程序和EEPROM存储程序的两种方式的控制区别,就主要体现在RENUM位的控制上;
1)从主机下载固件程序时,芯片通电后因为没有从任何方式读取到固件程序,所以RENUM位默认为0,使用默认方式进行枚举,然后通过主机下载固件程序,运行后,上述代码控制芯片与主机的模拟断开与再连接实现重枚举;
2)而EEPBOM存储程序时,芯片通电后从它的SCL与SDA两个管脚读取到存储在EEPROM中的固件程序,触发USBCS寄存器中的RENUM位由默认值变化为1,在执行上述程序时,不满足判断条件,不执行EZUSB_Discon()的模拟断开部分,并直接由现有固件程序和设备描述符进行枚举,一次枚举即可识别设备然后正常工作,此时不需要重枚举。
正是通过控制这些寄存器的值,各式USB功能芯片利用固件程序实现了对枚举或者重枚举的管理。开发者在固件程序的编写中,需要特别留意对于这样一些寄存器的控制,深刻理解USB功能芯片启动以及工作方式,这样才能避免或者解决在USB通信中出现的一些错误和缺陷。

2 结束语
文中深入探讨了USB传输当中几个非常重要而又容易被人忽视或者混淆的,针对枚举和重枚举的区别,重枚举和重置的区别进行了对比分析,并详细讲述了枚举与重枚举的流程和控制,有助于开发人员在USB项目中更好的理解并掌握开发流程。大量应用结果表明,USB传输的底层原理与,对于解决传输中的问题以及提升数据系统的效率有很大的帮助,值得开发者真正的重视。


上一页 1 2 3 下一页

关键词: USB 概念

评论


相关推荐

技术专区

关闭