999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

USB開發中易混淆的概念剖析

2012-09-26 02:27:30周惠坤梁金寶
電子設計工程 2012年21期
關鍵詞:程序設備

周惠坤,張 鑫,梁金寶,牟 歡

(中國科學院 國家空間科學中心,北京 100190)

USB(Universal Serial Bus)通訊具有傳輸速度快、可靠性高、支持即插即用等優點,已經逐步成為現代數據傳輸的主流方式,獲得了廣泛的應用。

然而,在USB應用技術越來越成熟的同時,開發人員對于USB技術的運用越來越傾向于頂層使用,對于USB的底層原理與基礎協議關注的很少,這會導致在實際開發過程中,遇到問題之后不知從何處著手解決。只有了解了USB的傳輸協議或者是底層傳輸通訊原理,才能很好的找出解決途徑。

文中基于作者多年的USB開發使用經驗,并且結合目前研究與生產中廣泛使用的幾種USB控制芯片,包括Cypress公司的enCoRe系列芯片、EZ-USB芯片以及Netchip公司的NET2888芯片等等,總結了它們在開發使用中最容易遇到而又非常重要的幾個問題:USB設備與主機建立通訊過程中枚舉和重枚舉的區別[1],這個區別體現在不同的USB控制芯片當中,它對于設備的啟動以及連接主機都有深刻影響;重枚舉與重置的區別[1-3],很多把這個概念混淆,導致在應用中出錯;固件程序控制多種啟動方式的區別,同樣的代碼控制著不同的啟動方式,理解了這個過程才能很好地控制芯片的工作。

1 USB通訊中的重要概念

1.1 枚舉與重枚舉的區別

在USB通訊協議中,有一個重要的概念是檢測設備,也可稱為枚舉,它是主機在應用程序與USB設備通信之前,了解該設備的設置與能力并且給該設備指定一個驅動程序的過程,它是任何USB設備正常工作所必須的部分。

對于普通的USB設備,主機通過枚舉的過程獲取設備的描述符,了解設備并根據設備描述符中的PID(產品識別碼)與VID(供應商識別碼)值選擇合適的驅動程序安裝,這樣就與設備建立了USB連接,之后就可以進行正常USB通訊,枚舉的過程[4]如圖1所示。

然而,對于目前很多USB設備來說,它們與主機建立USB通訊的過程并不完全與上述過程一致,其原因在于當前各型號的USB功能芯片啟動固件程序的方式有很大的區別,這些啟動方式大致可以分為兩種類型[3-5]:

1)固件程序從非易失存儲器中啟動:每次啟動直接從程序內存中讀取固件代碼,然后在枚舉時直接啟動運行,這樣的程序內存包括 ROM (read-only memory)、EPROM(Erasable Programmed ROM)、EEPROM (Electrically Erasable Programmed ROM)、OPT(One-Time Programmable)PROM 或是 Flash EPROM(閃存);

圖1 枚舉過程圖Fig.1 Process of enumeration

2)固件程序從隨機存儲器中啟動:每次啟動后,從外部非易失存儲器中讀取固件程序并存儲在RAM (Random-Access Memory)中,然后啟動運行。RAM可以任意刪減和重寫數據,并且關機后RAM內的數據即告消失,所以在每次開機時,都需要從外部加載固件代碼。

正因為多了加載固件代碼這個步驟,使得第二類芯片在啟動時,如果從主機讀取固件程序,那么建立USB通訊的過程與上述枚舉有很大區別,它的流程如圖2所示。

圖2 從主機下載程序方式下重枚舉過程圖Fig.2 Process of re-enumeration downloading program from host computer

從圖2可以看出,第二類USB功能芯片啟動方式每次都需要從主機下載固件程序,相比上述第一種類型,它具有兩個明顯的優勢:

1)用戶可根據需求自己編寫固件程序,適應性很廣;2)開發中調試非常方便,斷電即可重新下載固件代碼。

因此,這種方式工作的USB功能芯片在工程中的應用越來越廣泛,這樣的方式下,芯片與主機建立通訊的過程我們稱之為“重枚舉”。

重枚舉和枚舉的最重要區別在于,重枚舉需要兩次讀取設備的描述符,獲取兩次不同的PID/VID值然后安裝不同的驅動,而枚舉只需要讀取一次描述符并只安裝一次驅動[4]。這其中,第一次是讀取的是設備默認的描述符,用于建立默認狀態下的USB通訊,然后下載固件程序,第二次讀取的是根據需求自己編寫或者從廠家下載而來的描述符,使得設備實現項目所需的通訊功能。

在使用不同的芯片或者不同的程序下載方式時,開發人員往往會遇到驅動安裝不對導致通訊不上、設備描述符編寫錯誤導致設備工作效率低下、固件程序無法正常啟動等突發狀況,例如,作為數據傳輸系統的USB設備在使用中,經常會遇到USB設備與數據源設備以及主機接收軟件在不同的啟動順序下產生不同效果、甚至導致通訊錯誤的情況,如果不能深刻理解枚舉與重枚舉的過程和意義,這些問題很難得到根本的解決。

1.2 重枚舉與重置的區別

需要特別指出的是,“重枚舉”與枚舉過程中的“重置”有重要區別,很多USB開發人員對這兩個概念理解混淆,認為枚舉中的“重置”就是我們所稱的“重枚舉”,但它們除了在現象上有點相似外,過程與意義上是有本質區別的:

1)“重枚舉”指的是有些USB芯片或者外圍設備在初次枚舉后,通過某種方式更改了其提交給主機的描述符(包括VID/PID值)以及固件程序,從而引起了主機對設備的再次枚舉,通過新的描述符再次識別設備的過程;

2)而“重置”是每次枚舉過程中主機在設備剛連接后要求集線器將USB電纜中D+和D-兩個信號都置為邏輯低位(正常時,這兩信號有相反的邏輯狀態),這個過程中主機與設備也類似斷開再連接,與“重枚舉”在現象上有點相似,但是它只是枚舉中的一部分,它是為了確認設備與主機準備好了下一步配置通信而做的操作,不涉及描述符的變化也就不會使得設備請求再次枚舉。

1.3 固件程序對枚舉和重枚舉的不同控制方式

固件程序是CPU要執行的程序代碼,是USB芯片的核心部分,它不僅控制著設備的數據傳輸,同時控制著重枚舉的實現。Cypress公司的EZ-USB系列芯片是使用RAM來存儲固件程序的第一批芯片,也是目前市場上使用最廣泛的一種USB功能芯片。在此,我們以這種芯片為例深入研究芯片對于不同的啟動方式下重枚舉與枚舉的控制[4-6]方法。

如圖3流程圖所示,固件程序的一個重要工作在于對重枚舉的控制,在EZ-USB芯片的固件程序中,都需要以下代碼來控制芯片的重枚舉:

圖3 EZ-USB芯片通用固件程序流程圖Fig.3 Process of universal firmware program of EZ-USB

重枚舉的控制主要依靠USBCS寄存器中的RENUM位和DISCON位[6],這兩位的功能與作用分別如下:

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)而EEPROM存儲程序時,芯片通電后從它的SCL與SDA兩個管腳讀取到存儲在EEPROM中的固件程序,觸發USBCS寄存器中的RENUM位由默認值變化為1,在執行上述程序時,不滿足判斷條件,不執行EZUSB_Discon()的模擬斷開部分,并直接由現有固件程序和設備描述符進行枚舉,一次枚舉即可識別設備然后正常工作,此時不需要重枚舉。

正是通過控制這些寄存器的值,各式USB功能芯片利用固件程序實現了對枚舉或者重枚舉的管理。開發者在固件程序的編寫中,需要特別留意對于這樣一些寄存器的控制,深刻理解USB功能芯片啟動以及工作方式,這樣才能避免或者解決在USB通信中出現的一些錯誤和缺陷。

2 結束語

文中深入探討了USB傳輸當中幾個非常重要而又容易被人忽視或者混淆的概念,針對枚舉和重枚舉的區別,重枚舉和重置的區別進行了對比分析,并詳細講述了枚舉與重枚舉的流程和控制,有助于開發人員在USB項目中更好的理解并掌握開發流程。大量應用結果表明,USB傳輸的底層原理與概念,對于解決傳輸中的問題以及提升數據系統的效率有很大的幫助,值得開發者真正的重視。

[1]Universal Serial Bus Specification Revision 2.0[M].USB Organization,2000.

[2]Axelson J.USB大全[M].陳逸,譯.北京:中國電子出版社,2001.

[3]陳啟美,丁傳鎖.計算機USB接口技術[M].南京:南京大學出版社,2003.

[4]蕭世文,宋延清.USB2.0硬件設計[M].北京:清華大學出版社,2006.

[5]薛園園.USB應用開發技術大全 [M].北京:人民郵電出版社,2007.

[6]錢峰.EZ-USB FX2單片機原理、編程及應用[M].北京:北

猜你喜歡
程序設備
諧響應分析在設備減振中的應用
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
如何在設備采購中節省成本
主站蜘蛛池模板: 四虎国产精品永久一区| 在线观看欧美精品二区| 亚洲日韩日本中文在线| 色综合狠狠操| 亚洲日韩国产精品综合在线观看| 四虎亚洲精品| 成人一级黄色毛片| 波多野结衣中文字幕一区| 欧美亚洲香蕉| 精品99在线观看| 成人毛片免费观看| 国产无码高清视频不卡| 国产永久在线视频| 国产成人禁片在线观看| 少妇被粗大的猛烈进出免费视频| 国产精品视频第一专区| 欧美中文字幕一区| 日韩欧美中文字幕一本| 亚洲国产成熟视频在线多多| 久久人妻系列无码一区| 国产成人毛片| 精品欧美视频| 二级毛片免费观看全程| 国产精品天干天干在线观看| 夜夜拍夜夜爽| 国产免费自拍视频| 亚洲综合在线网| 亚洲成网站| 国产精品部在线观看| 婷婷五月在线| 91成人试看福利体验区| 久久精品亚洲热综合一区二区| 欧美亚洲国产精品第一页| 亚洲人成人无码www| 久久精品人人做人人| 思思99热精品在线| 亚洲第一黄片大全| 国产二级毛片| 99久久国产自偷自偷免费一区| 亚洲国产理论片在线播放| 波多野结衣一区二区三区四区视频| 免费av一区二区三区在线| 精品无码一区二区在线观看| 欧美人人干| 国产视频久久久久| 精品五夜婷香蕉国产线看观看| 又爽又黄又无遮挡网站| 亚洲国产成人精品青青草原| 91欧美亚洲国产五月天| 精品久久久久无码| 精品1区2区3区| 最新国产午夜精品视频成人| 少妇精品在线| 国产精品无码影视久久久久久久| 香蕉视频在线观看www| 国产成人一区| 91在线一9|永久视频在线| 色婷婷久久| 国外欧美一区另类中文字幕| 欧美一级爱操视频| 制服丝袜 91视频| 久久成人免费| 国产精品林美惠子在线播放| 久久精品电影| 精品福利视频导航| 国产毛片一区| 一级毛片高清| 日本欧美一二三区色视频| 日韩成人在线视频| 国产精品欧美日本韩免费一区二区三区不卡 | 五月天天天色| 伊人激情综合| 亚洲欧美一区在线| 国产一级裸网站| 亚洲一级毛片| 777午夜精品电影免费看| 黄色网站在线观看无码| 欧美天堂久久| 玖玖精品在线| 国产精品一老牛影视频| 国产成人亚洲日韩欧美电影| 草草线在成年免费视频2|