<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > USB開(kāi)發(fā)中易混淆的概念剖析

USB開(kāi)發(fā)中易混淆的概念剖析

作者: 時(shí)間:2012-12-15 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/202022.htm

b.JPG


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



關(guān)鍵詞: USB 概念

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>