USB開發中易混淆的概念剖析
摘要:隨著USB技術日趨成熟,USB開發者只需要關注頂層開發即可,這樣雖然戰少了工作量,但容易使開發者忽略USB基礎理論與概念,導致的弊端在于開發者一旦遇到問題,往往不知如何解決。作者基于多年USB開發經驗,針對當前很多USB開發者容易混淆的概念,進行深入淺出的剖析,針對枚舉和重枚舉的區別、不同啟動方式的區別等問題,進行了歸納總結。本文從對比的角度分析問題,有助于開發者理清USB的工作機理。
關鍵詞:USB;枚舉;重枚舉;重王;固件程序;EZ-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所示。
評論