關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > USB開發中易混淆的概念剖析

        USB開發中易混淆的概念剖析

        作者: 時間:2012-12-15 來源:網絡 收藏

        1.3 固件程序對枚舉和重牧舉的不同控制方式
        固件程序是CPU要執行的程序代碼,是芯片的核心部分,它不僅控制著設備的數據傳輸,同時控制著重枚舉的實現。Cypress公司的EZ-系列芯片是使用RAM來存儲固件程序的第一批芯片,也是目前市場上使用最廣泛的一種功能芯片。在此,我們以這種芯片為例深入研究芯片對于不同的啟動方式下重枚舉與枚舉的控制方法。

        本文引用地址:http://www.104case.com/article/202022.htm

        c.JPG


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

        2 結束語
        文中深入探討了USB傳輸當中幾個非常重要而又容易被人忽視或者混淆的,針對枚舉和重枚舉的區別,重枚舉和重置的區別進行了對比分析,并詳細講述了枚舉與重枚舉的流程和控制,有助于開發人員在USB項目中更好的理解并掌握開發流程。大量應用結果表明,USB傳輸的底層原理與,對于解決傳輸中的問題以及提升數據系統的效率有很大的幫助,值得開發者真正的重視。


        上一頁 1 2 3 下一頁

        關鍵詞: USB 概念

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武穴市| 威信县| 阿拉善盟| 和田市| 宝应县| 宝鸡市| 安国市| 伊金霍洛旗| 安远县| 攀枝花市| 盐池县| 师宗县| 舟曲县| 天台县| 和田县| 武城县| 土默特右旗| 尼勒克县| 新化县| 报价| 平度市| 邻水| 临西县| 长岭县| 理塘县| 南部县| 七台河市| 蓬溪县| 霍城县| 麦盖提县| 南通市| 赣榆县| 井冈山市| 阳西县| 大渡口区| 三穗县| 眉山市| 马鞍山市| 慈溪市| 论坛| 清涧县|