當(dāng)前位置:首頁 > 智能硬件 > 智能硬件
[導(dǎo)讀]摘要:隨著USB技術(shù)日趨成熟,USB開發(fā)者只需要關(guān)注頂層開發(fā)即可,這樣雖然戰(zhàn)少了工作量,但容易使開發(fā)者忽略USB基礎(chǔ)理論與概念,導(dǎo)致的弊端在于開發(fā)者一旦遇到問題,往往不知如何解決。作者基于多年USB開發(fā)經(jīng)驗,針對

摘要:隨著USB技術(shù)日趨成熟,USB開發(fā)者只需要關(guān)注頂層開發(fā)即可,這樣雖然戰(zhàn)少了工作量,但容易使開發(fā)者忽略USB基礎(chǔ)理論與概念,導(dǎo)致的弊端在于開發(fā)者一旦遇到問題,往往不知如何解決。作者基于多年USB開發(fā)經(jīng)驗,針對當(dāng)前很多USB開發(fā)者容易混淆的概念,進(jìn)行深入淺出的剖析,針對枚舉和重枚舉的區(qū)別、不同啟動方式的區(qū)別等問題,進(jìn)行了歸納總結(jié)。本文從對比的角度分析問題,有助于開發(fā)者理清USB的工作機(jī)理。
關(guān)鍵詞:USB;枚舉;重枚舉;重王;固件程序;EZ-USB

    USB(Universal Serial Bus)通訊具有傳輸速度快、可靠性高、支持即插即用等優(yōu)點,已經(jīng)逐步成為現(xiàn)代數(shù)據(jù)傳輸?shù)闹髁鞣绞?,獲得了廣泛的應(yīng)用。
    然而,在USB應(yīng)用技術(shù)越來越成熟的同時,開發(fā)人員對于USB技術(shù)的運用越來越傾向于頂層使用,對于USB的底層原理與基礎(chǔ)協(xié)議關(guān)注的很少,這會導(dǎo)致在實際開發(fā)過程中,遇到問題之后不知從何處著手解決。只有了解了USB的傳輸協(xié)議或者是底層傳輸通訊原理,才能很好的找出解決途徑。
    文中基于作者多年的USB開發(fā)使用經(jīng)驗,并且結(jié)合目前研究與生產(chǎn)中廣泛使用的幾種USB控制芯片,包括Cypress公司的enCoRe系列芯片、EZ-USB芯片以及Netchip公司的NET2888芯片等等,總結(jié)了它們在開發(fā)使用中最容易遇到而又非常重要的幾個問題:USB設(shè)備與主機(jī)建立通訊過程中枚舉和重枚舉的區(qū)別,這個區(qū)別體現(xiàn)在不同的USB控制芯片當(dāng)中,它對于設(shè)備的啟動以及連接主機(jī)都有深刻影響;重枚舉與重置的區(qū)別,很多把這個概念混淆,導(dǎo)致在應(yīng)用中出錯;固件程序控制多種啟動方式的區(qū)別,同樣的代碼控制著不同的啟動方式,理解了這個過程才能很好地控制芯片的工作。

1 USB通訊中的重要概念
1.1 枚舉與重枚舉的區(qū)別
   
在USB通訊協(xié)議中,有一個重要的概念是檢測設(shè)備,也可稱為枚舉,它是主機(jī)在應(yīng)用程序與USB設(shè)備通信之前,了解該設(shè)備的設(shè)置與能力并且給該設(shè)備指定一個驅(qū)動程序的過程,它是任何USB設(shè)備正常工作所必須的部分。
    對于普通的USB設(shè)備,主機(jī)通過枚舉的過程獲取設(shè)備的描述符,了解設(shè)備并根據(jù)設(shè)備描述符中的PID(產(chǎn)品識別碼)與VID(供應(yīng)商識別碼)值選擇合適的驅(qū)動程序安裝,這樣就與設(shè)備建立了USB連接,之后就可以進(jìn)行正常USB通訊,枚舉的過程如圖1所示。


    然而,對于目前很多USB設(shè)備來說,它們與主機(jī)建立USB通訊的過程并不完全與上述過程一致,其原因在于當(dāng)前各型號的USB功能芯片啟動固件程序的方式有很大的區(qū)別,這些啟動方式大致可以分為兩種類型:
    1)固件程序從非易失存儲器中啟動:每次啟動直接從程序內(nèi)存中讀取固件代碼,然后在枚舉時直接啟動運行,這樣的程序內(nèi)存包括ROM(read-only memory)、EPROM(Erasable Programmed ROM)、EEPROM(Electrically Erasable Progra-mmed ROM)、OPT(One-Time Programm able)PROM或是FlashEPROM(閃存);
    2)固件程序從隨機(jī)存儲器中啟動:每次啟動后,從外部非易失存儲器中讀取固件程序并存儲在RAM(Random-Access Memory)中,然后啟動運行。RAM可以任意刪減和重寫數(shù)據(jù),并且關(guān)機(jī)后RAM內(nèi)的數(shù)據(jù)即告消失,所以在每次開機(jī)時,都需要從外部加載固件代碼。
    正因為多了加載固件代碼這個步驟,使得第二類芯片在啟動時,如果從主機(jī)讀取固件程序,那么建立USB通訊的過程與上述枚舉有很大區(qū)別,它的流程如圖2所示。


    從圖2可以看出,第二類USB功能芯片啟動方式每次都需要從主機(jī)下載固件程序,相比上述第一種類型,它具有兩個明顯的優(yōu)勢:
    1)用戶可根據(jù)需求自己編寫固件程序,適應(yīng)性很廣;
    2)開發(fā)中調(diào)試非常方便,斷電即可重新下載固件代碼。
    因此,這種方式工作的USB功能芯片在工程中的應(yīng)用越來越廣泛,這樣的方式下,芯片與主機(jī)建立通訊的過程我們稱之為“重枚舉”。
    重枚舉和枚舉的最重要區(qū)別在于,重枚舉需要兩次讀取設(shè)備的描述符,獲取兩次不同的PID/VID值然后安裝不同的驅(qū)動,而枚舉只需要讀取一次描述符并只安裝一次驅(qū)動。這其中,第一次是讀取的是設(shè)備默認(rèn)的描述符,用于建立默認(rèn)狀態(tài)下的USB通訊,然后下載固件程序,第二次讀取的是根據(jù)需求自己編寫或者從廠家下載而來的描述符,使得設(shè)備實現(xiàn)項目所需的通訊功能。
    在使用不同的芯片或者不同的程序下載方式時,開發(fā)人員往往會遇到驅(qū)動安裝不對導(dǎo)致通訊不上、設(shè)備描述符編寫錯誤導(dǎo)致設(shè)備工作效率低下、固件程序無法正常啟動等突發(fā)狀況,例如,作為數(shù)據(jù)傳輸系統(tǒng)的USB設(shè)備在使用中,經(jīng)常會遇到USB設(shè)備與數(shù)據(jù)源設(shè)備以及主機(jī)接收軟件在不同的啟動順序下產(chǎn)生不同效果、甚至導(dǎo)致通訊錯誤的情況,如果不能深刻理解枚舉與重枚舉的過程和意義,這些問題很難得到根本的解決。
1.2 重枚舉與重置的區(qū)別
   
需要特別指出的是,“重枚舉”與枚舉過程中的“重置”有重要區(qū)別,很多USB開發(fā)人員對這兩個概念理解混淆,認(rèn)為枚舉中的“重置”就是我們所稱的“重枚舉”,但它們除了在現(xiàn)象上有點相似外,過程與意義上是有本質(zhì)區(qū)別的:
    1)“重枚舉”指的是有些USB芯片或者外圍設(shè)備在初次枚舉后,通過某種方式更改了其提交給主機(jī)的描述符(包括VID/PID值)以及固件程序,從而引起了主機(jī)對設(shè)備的再次枚舉,通過新的描述符再次識別設(shè)備的過程;
    2)而“重置”是每次枚舉過程中主機(jī)在設(shè)備剛連接后要求集線器將USB電纜中D+和D-兩個信號都置為邏輯低位(正常時,這兩信號有相反的邏輯狀態(tài)),這個過程中主機(jī)與設(shè)備也類似斷開再連接,與“重枚舉”在現(xiàn)象上有點相似,但是它只是枚舉中的一部分,它是為了確認(rèn)設(shè)備與主機(jī)準(zhǔn)備好了下一步配置通信而做的操作,不涉及描述符的變化也就不會使得設(shè)備請求再次枚舉。
1.3 固件程序?qū)γ杜e和重牧舉的不同控制方式
   
固件程序是CPU要執(zhí)行的程序代碼,是USB芯片的核心部分,它不僅控制著設(shè)備的數(shù)據(jù)傳輸,同時控制著重枚舉的實現(xiàn)。Cypress公司的EZ-USB系列芯片是使用RAM來存儲固件程序的第一批芯片,也是目前市場上使用最廣泛的一種USB功能芯片。在此,我們以這種芯片為例深入研究芯片對于不同的啟動方式下重枚舉與枚舉的控制方法。


    如圖3流程圖所示,固件程序的一個重要工作在于對重枚舉的控制,在EZ-USB芯片的固件程序中,都需要以下代碼來控制芯片的重枚舉:
   
    重枚舉的控制主要依靠USBCS寄存器中的RENUM位和DISCON位,這兩位的功能與作用分別如下:
    1)RENUM位代表的是EZ-USB芯片使用默認(rèn)狀態(tài)或者固件程序來處理枚舉過程,可用于判斷這一位的值,來確定是否需要重枚舉,RENUM位為0時,使用默認(rèn)方式進(jìn)行枚舉,等待固件程序的下載,這一位為1時,使用固件程序與下載的設(shè)備描述符處理枚舉過程;
    2)DISCON位用來控制USB的斷開與再連接,每次DISCON位的值變化為1時,芯片會自動與主機(jī)斷開連接(其實是一種模擬斷開的狀態(tài)),這一位變成0的時候,芯片又會與主機(jī)進(jìn)行重新連接。
    這些RAM存儲固件程序的芯片,包括EZ-USB,除了使用RAM外,也都是可以使用其他程序內(nèi)存的,這種特性在芯片的開發(fā)過程與工程應(yīng)用中非常完美的起到了互補作用。開發(fā)中,我們使用RAM每次下載固件程序便于調(diào)試,而應(yīng)用中,又可將固件程序固化到例如Flash EPROM或者EEPROM等存儲器。
    然而,這種模式下,兩種不同的下載固件程序方法對于固件程序的調(diào)用卻不完全一樣,許多開發(fā)人員很長一段時間內(nèi)都沒有理解清楚它們之間的區(qū)別,導(dǎo)致程序編寫和運行中有時會出現(xiàn)各式錯誤,例如在重枚舉的時候讀取設(shè)備描述符的位置錯誤,或者多次通電、斷電重復(fù)操作后部分控制重枚舉的寄存器的值沒有按照預(yù)期變化,導(dǎo)致突發(fā)狀況。
    了解固件程序?qū)τ诿杜e、重枚舉的控制方式,有利于我們追蹤錯誤并解決這些問題。在EZ-USB系列芯片中,固件程序?qū)闹鳈C(jī)下載固件程序和EEPROM存儲程序的兩種方式的控制區(qū)別,就主要體現(xiàn)在RENUM位的控制上;
    1)從主機(jī)下載固件程序時,芯片通電后因為沒有從任何方式讀取到固件程序,所以RENUM位默認(rèn)為0,使用默認(rèn)方式進(jìn)行枚舉,然后通過主機(jī)下載固件程序,運行后,上述代碼控制芯片與主機(jī)的模擬斷開與再連接實現(xiàn)重枚舉;
    2)而EEPBOM存儲程序時,芯片通電后從它的SCL與SDA兩個管腳讀取到存儲在EEPROM中的固件程序,觸發(fā)USBCS寄存器中的RENUM位由默認(rèn)值變化為1,在執(zhí)行上述程序時,不滿足判斷條件,不執(zhí)行EZUSB_Discon()的模擬斷開部分,并直接由現(xiàn)有固件程序和設(shè)備描述符進(jìn)行枚舉,一次枚舉即可識別設(shè)備然后正常工作,此時不需要重枚舉。
    正是通過控制這些寄存器的值,各式USB功能芯片利用固件程序?qū)崿F(xiàn)了對枚舉或者重枚舉的管理。開發(fā)者在固件程序的編寫中,需要特別留意對于這樣一些寄存器的控制,深刻理解USB功能芯片啟動以及工作方式,這樣才能避免或者解決在USB通信中出現(xiàn)的一些錯誤和缺陷。

2 結(jié)束語
   
文中深入探討了USB傳輸當(dāng)中幾個非常重要而又容易被人忽視或者混淆的概念,針對枚舉和重枚舉的區(qū)別,重枚舉和重置的區(qū)別進(jìn)行了對比分析,并詳細(xì)講述了枚舉與重枚舉的流程和控制,有助于開發(fā)人員在USB項目中更好的理解并掌握開發(fā)流程。大量應(yīng)用結(jié)果表明,USB傳輸?shù)牡讓釉砼c概念,對于解決傳輸中的問題以及提升數(shù)據(jù)系統(tǒng)的效率有很大的幫助,值得開發(fā)者真正的重視。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉