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

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

2012-09-26 02:27:30周惠坤梁金寶
電子設(shè)計(jì)工程 2012年21期
關(guān)鍵詞:程序設(shè)備

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

(中國(guó)科學(xué)院 國(guó)家空間科學(xué)中心,北京 100190)

USB(Universal Serial Bus)通訊具有傳輸速度快、可靠性高、支持即插即用等優(yōu)點(diǎn),已經(jīng)逐步成為現(xiàn)代數(shù)據(jù)傳輸?shù)闹髁鞣绞剑@得了廣泛的應(yīng)用。

然而,在USB應(yīng)用技術(shù)越來(lái)越成熟的同時(shí),開(kāi)發(fā)人員對(duì)于USB技術(shù)的運(yùn)用越來(lái)越傾向于頂層使用,對(duì)于USB的底層原理與基礎(chǔ)協(xié)議關(guān)注的很少,這會(huì)導(dǎo)致在實(shí)際開(kāi)發(fā)過(guò)程中,遇到問(wèn)題之后不知從何處著手解決。只有了解了USB的傳輸協(xié)議或者是底層傳輸通訊原理,才能很好的找出解決途徑。

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

1 USB通訊中的重要概念

1.1 枚舉與重枚舉的區(qū)別

在USB通訊協(xié)議中,有一個(gè)重要的概念是檢測(cè)設(shè)備,也可稱為枚舉,它是主機(jī)在應(yīng)用程序與USB設(shè)備通信之前,了解該設(shè)備的設(shè)置與能力并且給該設(shè)備指定一個(gè)驅(qū)動(dòng)程序的過(guò)程,它是任何USB設(shè)備正常工作所必須的部分。

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

然而,對(duì)于目前很多USB設(shè)備來(lái)說(shuō),它們與主機(jī)建立USB通訊的過(guò)程并不完全與上述過(guò)程一致,其原因在于當(dāng)前各型號(hào)的USB功能芯片啟動(dòng)固件程序的方式有很大的區(qū)別,這些啟動(dòng)方式大致可以分為兩種類型[3-5]:

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 Programmed ROM)、OPT(One-Time Programmable)PROM 或是 Flash EPROM(閃存);

圖1 枚舉過(guò)程圖Fig.1 Process of enumeration

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è)步驟,使得第二類芯片在啟動(dòng)時(shí),如果從主機(jī)讀取固件程序,那么建立USB通訊的過(guò)程與上述枚舉有很大區(qū)別,它的流程如圖2所示。

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

從圖2可以看出,第二類USB功能芯片啟動(dòng)方式每次都需要從主機(jī)下載固件程序,相比上述第一種類型,它具有兩個(gè)明顯的優(yōu)勢(shì):

1)用戶可根據(jù)需求自己編寫(xiě)固件程序,適應(yīng)性很廣;2)開(kāi)發(fā)中調(diào)試非常方便,斷電即可重新下載固件代碼。

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

重枚舉和枚舉的最重要區(qū)別在于,重枚舉需要兩次讀取設(shè)備的描述符,獲取兩次不同的PID/VID值然后安裝不同的驅(qū)動(dòng),而枚舉只需要讀取一次描述符并只安裝一次驅(qū)動(dòng)[4]。這其中,第一次是讀取的是設(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)為枚舉中的“重置”就是我們所稱的“重枚舉”,但它們除了在現(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è)備剛連接后要求集線器將USB電纜中D+和D-兩個(gè)信號(hào)都置為邏輯低位(正常時(shí),這兩信號(hào)有相反的邏輯狀態(tài)),這個(gè)過(guò)程中主機(jī)與設(shè)備也類似斷開(kāi)再連接,與“重枚舉”在現(xiàn)象上有點(diǎn)相似,但是它只是枚舉中的一部分,它是為了確認(rèn)設(shè)備與主機(jī)準(zhǔn)備好了下一步配置通信而做的操作,不涉及描述符的變化也就不會(huì)使得設(shè)備請(qǐng)求再次枚舉。

1.3 固件程序?qū)γ杜e和重枚舉的不同控制方式

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

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

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

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

1)RENUM位代表的是EZ-USB芯片使用默認(rèn)狀態(tài)或者固件程序來(lái)處理枚舉過(guò)程,可用于判斷這一位的值,來(lái)確定是否需要重枚舉,RENUM位為0時(shí),使用默認(rèn)方式進(jìn)行枚舉,等待固件程序的下載,這一位為1時(shí),使用固件程序與下載的設(shè)備描述符處理枚舉過(guò)程;

2)DISCON位用來(lái)控制USB的斷開(kāi)與再連接,每次DISCON位的值變化為1時(shí),芯片會(huì)自動(dòng)與主機(jī)斷開(kāi)連接(其實(shí)是一種模擬斷開(kāi)的狀態(tài)),這一位變成0的時(shí)候,芯片又會(huì)與主機(jī)進(jìn)行重新連接。

這些RAM存儲(chǔ)固件程序的芯片,包括EZ-USB,除了使用RAM外,也都是可以使用其他程序內(nèi)存的,這種特性在芯片的開(kāi)發(fā)過(guò)程與工程應(yīng)用中非常完美的起到了互補(bǔ)作用。開(kāi)發(fā)中,我們使用RAM每次下載固件程序便于調(diào)試,而應(yīng)用中,又可將固件程序固化到例如Flash EPROM或者EEPROM等存儲(chǔ)器。

然而,這種模式下,兩種不同的下載固件程序方法對(duì)于固件程序的調(diào)用卻不完全一樣,許多開(kāi)發(fā)人員很長(zhǎng)一段時(shí)間內(nèi)都沒(méi)有理解清楚它們之間的區(qū)別,導(dǎo)致程序編寫(xiě)和運(yùn)行中有時(shí)會(huì)出現(xiàn)各式錯(cuò)誤,例如在重枚舉的時(shí)候讀取設(shè)備描述符的位置錯(cuò)誤,或者多次通電、斷電重復(fù)操作后部分控制重枚舉的寄存器的值沒(méi)有按照預(yù)期變化,導(dǎo)致突發(fā)狀況。

了解固件程序?qū)τ诿杜e、重枚舉的控制方式,有利于我們追蹤錯(cuò)誤并解決這些問(wèn)題。在EZ-USB系列芯片中,固件程序?qū)闹鳈C(jī)下載固件程序和EEPROM存儲(chǔ)程序的兩種方式的控制區(qū)別,就主要體現(xiàn)在RENUM位的控制上:

1)從主機(jī)下載固件程序時(shí),芯片通電后因?yàn)闆](méi)有從任何方式讀取到固件程序,所以RENUM位默認(rèn)為0,使用默認(rèn)方式進(jìn)行枚舉,然后通過(guò)主機(jī)下載固件程序,運(yùn)行后,上述代碼控制芯片與主機(jī)的模擬斷開(kāi)與再連接實(shí)現(xiàn)重枚舉;

2)而EEPROM存儲(chǔ)程序時(shí),芯片通電后從它的SCL與SDA兩個(gè)管腳讀取到存儲(chǔ)在EEPROM中的固件程序,觸發(fā)USBCS寄存器中的RENUM位由默認(rèn)值變化為1,在執(zhí)行上述程序時(shí),不滿足判斷條件,不執(zhí)行EZUSB_Discon()的模擬斷開(kāi)部分,并直接由現(xiàn)有固件程序和設(shè)備描述符進(jìn)行枚舉,一次枚舉即可識(shí)別設(shè)備然后正常工作,此時(shí)不需要重枚舉。

正是通過(guò)控制這些寄存器的值,各式USB功能芯片利用固件程序?qū)崿F(xiàn)了對(duì)枚舉或者重枚舉的管理。開(kāi)發(fā)者在固件程序的編寫(xiě)中,需要特別留意對(duì)于這樣一些寄存器的控制,深刻理解USB功能芯片啟動(dòng)以及工作方式,這樣才能避免或者解決在USB通信中出現(xiàn)的一些錯(cuò)誤和缺陷。

2 結(jié)束語(yǔ)

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

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

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

[3]陳啟美,丁傳鎖.計(jì)算機(jī)USB接口技術(shù)[M].南京:南京大學(xué)出版社,2003.

[4]蕭世文,宋延清.USB2.0硬件設(shè)計(jì)[M].北京:清華大學(xué)出版社,2006.

[5]薛園園.USB應(yīng)用開(kāi)發(fā)技術(shù)大全 [M].北京:人民郵電出版社,2007.

[6]錢(qián)峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北

猜你喜歡
程序設(shè)備
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
試論我國(guó)未決羈押程序的立法完善
基于VB6.0+Access2010開(kāi)發(fā)的設(shè)備管理信息系統(tǒng)
基于MPU6050簡(jiǎn)單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
如何在設(shè)備采購(gòu)中節(jié)省成本
主站蜘蛛池模板: 黄色网站不卡无码| 98精品全国免费观看视频| 亚洲一区二区黄色| 免费大黄网站在线观看| 好吊妞欧美视频免费| 久久96热在精品国产高清| 亚洲手机在线| 欧美一级专区免费大片| AV在线麻免费观看网站| 国产成人夜色91| 国产精品3p视频| 亚洲中文制服丝袜欧美精品| 2024av在线无码中文最新| 国产91丝袜| 午夜精品久久久久久久2023| 日韩毛片在线播放| 色偷偷男人的天堂亚洲av| 一级毛片在线播放| 亚洲AV无码一区二区三区牲色| 亚洲精品无码在线播放网站| 欧美日韩国产一级| 成人免费黄色小视频| 日韩黄色在线| 国产午夜福利在线小视频| 欧美翘臀一区二区三区| 日韩福利在线观看| 中国精品自拍| 欧美在线精品怡红院| 国产精品网址在线观看你懂的| 亚洲国产精品成人久久综合影院| 91久久国产热精品免费| 怡红院美国分院一区二区| 国产综合欧美| 欧美日韩国产精品va| 欧美日韩中文国产va另类| 中文字幕日韩欧美| 久久黄色影院| 91福利在线观看视频| 国产视频 第一页| 一区二区无码在线视频| 男女性午夜福利网站| 人妻21p大胆| 国产美女在线免费观看| 国产精品综合久久久| 亚洲一区免费看| 亚洲欧洲天堂色AV| 不卡网亚洲无码| 国产综合网站| 国产一级毛片高清完整视频版| 欧美色99| 欧美色伊人| 亚洲欧美成aⅴ人在线观看 | 国产精品对白刺激| 国产亚洲成AⅤ人片在线观看| 伊人国产无码高清视频| 久热中文字幕在线| 亚洲欧洲日韩久久狠狠爱| 在线观看网站国产| 亚洲视频免费在线看| 亚洲码在线中文在线观看| 无码国产伊人| 亚洲首页国产精品丝袜| 国产精品高清国产三级囯产AV| 青青青国产免费线在| 97精品伊人久久大香线蕉| 久久综合激情网| 8090成人午夜精品| 亚瑟天堂久久一区二区影院| 波多野结衣爽到高潮漏水大喷| 欧美亚洲一区二区三区导航| P尤物久久99国产综合精品| 久综合日韩| 美女扒开下面流白浆在线试听| 国产小视频免费| 凹凸精品免费精品视频| 72种姿势欧美久久久久大黄蕉| 一级黄色网站在线免费看| 国产原创演绎剧情有字幕的| 老司国产精品视频| 亚洲三级成人| 国产精品无码制服丝袜| 毛片网站在线看|