關(guān) 閉

新聞中心

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

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

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

然而,對(duì)于目前很多設(shè)備來(lái)說(shuō),它們與主機(jī)建立通訊的過(guò)程并不完全與上述過(guò)程一致,其原因在于當(dāng)前各型號(hào)的功能芯片啟動(dòng)固件程序的方式有很大的區(qū)別,這些啟動(dòng)方式大致可以分為兩種類(lèi)型:
1)固件程序從非易失存儲(chǔ)器中啟動(dòng):每次啟動(dòng)直接從程序內(nèi)存中讀取固件代碼,然后在枚舉時(shí)直接啟動(dòng)運(yùn)行,這樣的程序內(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ī)存儲(chǔ)器中啟動(dòng):每次啟動(dòng)后,從外部非易失存儲(chǔ)器中讀取固件程序并存儲(chǔ)在RAM(Random-Access Memory)中,然后啟動(dòng)運(yùn)行。RAM可以任意刪減和重寫(xiě)數(shù)據(jù),并且關(guān)機(jī)后RAM內(nèi)的數(shù)據(jù)即告消失,所以在每次開(kāi)機(jī)時(shí),都需要從外部加載固件代碼。
正因?yàn)槎嗔思虞d固件代碼這個(gè)步驟,使得第二類(lèi)芯片在啟動(dòng)時(shí),如果從主機(jī)讀取固件程序,那么建立USB通訊的過(guò)程與上述枚舉有很大區(qū)別,它的流程如圖2所示。

本文引用地址:http://butianyuan.cn/article/202022.htm

b.JPG


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



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

評(píng)論


相關(guān)推薦

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

關(guān)閉