<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 在嵌入式系統(tǒng)中提高U盤訪問兼容性的幾種措施

          在嵌入式系統(tǒng)中提高U盤訪問兼容性的幾種措施

          ——
          作者:廣州愛斯佩克環(huán)境儀器有限公司 張井剛 劉德活 時間:2007-02-04 來源:電子產(chǎn)品世界 收藏

          摘要: 本文介紹了USB產(chǎn)品的開發(fā)輔助工具協(xié)議分析軟件 和周立公公司提供的USB總線抓取和協(xié)議分析系統(tǒng)USB Anaslyst-I。再以筆者開發(fā)的單片機+USB接口芯片()系統(tǒng)為例,詳細分析了提高訪問兼容性的幾種措施。利用此措施,可以大大提高讀寫的成功率并且兼容所有目前各大廠商的各種。

          關(guān)鍵詞:  U盤;

          引言

          隨著USB規(guī)范的完善和成熟,USB外設的種類不斷豐富,應用領(lǐng)域也不斷擴大。目前U盤幾乎成了我們?nèi)粘9ぷ鞯谋貍涞囊苿哟鎯ぞ?。隨著嵌入式產(chǎn)品應用領(lǐng)域的日益增長,USB外設的應用范圍也隨之擴大,在嵌入式系統(tǒng)中實現(xiàn)對USB外設控制尤其是對U盤的操作也變得必不可少。筆者在開發(fā)U盤支持功能時,最初是選用的朗科的U216(128M)的U盤,并調(diào)試成功??蓳Q了朗科的另外一款u200(128M)的U盤就識別不了。再試驗愛國者的幾款U盤也出現(xiàn)了類似的兼容性問題。但是這些U盤在PC機(安裝windows2000)上又都操作正常。這說明筆者這個系統(tǒng)對U盤的操作存在兼容性問題。目前市場上的U盤的生產(chǎn)制造商不下幾十個,而且每個品牌又包含十幾甚至幾十種。那么如何使U盤在嵌入式系統(tǒng)上操作就如同在PC機上使用一樣,不存在兼容性問題?以下章節(jié)將詳細分析并給出相應的措施。

          常用的USB開發(fā)工具

          談到USB產(chǎn)品的開發(fā),不得不涉及一些好用的輔助工具。利用這些工具會使開發(fā)取得事半功倍的效果。

          5.0軟件

          Bus Hound是純粹的軟件產(chǎn)品,它是通過抓取scsi驅(qū)動層的數(shù)據(jù)來進行分析。它可以用來分析USB總線數(shù)據(jù)協(xié)議、捕獲IO動作等。同時也可以傳送用戶編寫的命令進行調(diào)試。操作界面如圖1所示,使用步驟如下。

          圖1  Bus Hound 5.0操作界面

          (1) 啟動軟件,將USB設備插入USB口;
          (2) 在DEVICE內(nèi)選擇設備,例如我的設備是一個USB電話,則設備為USB  COMPOSITE DEVICE,選中該設備,可以在下面的PROPERTIES看到設備的總線類型,設備的電源以及各個端點的功能,在該設備下面還有兩個分支:USB AUDIO DEVICE 和 "USB人體學輸入設備"(這就是本設備占用的兩個接口),一樣在PROPERTIES里面可以看到他們的類代碼為0x01和0x03;
          (3) 在看完基本信息后,將上述的某個接口選中,或者全部選中;
          (4) 切換到“SETTING”選項卡,將MAX PHASE設置為512,這樣你就可以看到完全的DESCRIPTOR和其他的數(shù)據(jù)了;
          (5) 在“PHASE TO CAPTURE”里面的幾個和USB相關(guān)的選項如下:
          CDB:命令描述符塊;
          CTL:USB控制傳輸;
          DI/D數(shù)據(jù)輸入/輸出;
          LEN:數(shù)據(jù)長度;
          INSOC:同步傳輸;
          RSET:總線復位;
          URB:USB請求塊;
          USTS:USB狀態(tài)
          查看USB數(shù)據(jù)傳輸就把它們都選中;
          (6) 在“Coloumn to display”里面,把里面的全部打勾選中。注意,這樣要把窗體最大化才可以看見全部數(shù)據(jù);
          (7)在”CAPTURE”選項卡里面可以看到捕捉的數(shù)據(jù)了,在文本框輸入文字,再點旁邊的箭頭,可以查詢。按STOP,再按START可以清屏。

          USB Anaslyst-I分析儀

          USB Anaslyst-I是廣州致遠電子有限公司獨立設計的USB開發(fā)工具,它是通過直接捕獲USB總線上的數(shù)據(jù)來進行分析,是國內(nèi)自主設計的USB分析工具,完全打破了國外技術(shù)壟斷,價格僅為歐美同類產(chǎn)品的幾十分之一。該分析儀完全支持USB1.1協(xié)議,界面友好(如圖2),直接搭配個人電腦或筆記本使用,是廣大USB接口設備開發(fā)工程師的得力助手。

          圖2  USB Anaslyst-I分析儀界面 

          主要功能特點:
          可對HID類設備和大容量設備類的分析解碼;
          事務級別視圖和傳輸控制級別視圖;
          分組、事務、傳輸有效率統(tǒng)計功能;
          在線升級功能;
          鋁質(zhì)外觀,體積小,重量輕,方便攜帶;
          兩種供電方式,滿足各種計算機的要求;
          USB2.0傳輸接口,支持Windows 98、2000、XP等操作系統(tǒng);
          全面支持USB1.1全速、低速數(shù)據(jù)采集分析;
          支持PID或人工多種觸發(fā)條件選擇;
          USB總線數(shù)據(jù)自動跟蹤,確保數(shù)據(jù)完整無誤;
          同時具有USB總線錯誤分析和傳輸數(shù)據(jù)錯誤分析功能;
          隨意定義1~99Mbyte的采集容量;
          強大搜索功能,可以隨意查找錯誤幀或指定數(shù)據(jù);
          USB協(xié)議解碼功能,數(shù)據(jù)閱讀更加輕松;
          空閑時間統(tǒng)計功能,數(shù)據(jù)傳輸過程一目了然;
          完善的數(shù)據(jù)統(tǒng)計功能,帶寬利用隨手可得。

          MCU(80386EX)+應用電路

          筆者開發(fā)的是用于工業(yè)控制的觸摸屏系統(tǒng)。本系統(tǒng)具有主USB接口,可訪問U盤。觸摸屏的主CPU選用了Intel公司的 80386EX 32位處理器。這款嵌入式芯片集成了2片8259中斷控制器,3片8254定時/計數(shù)器,8個片選,1個32位Watchdog,2個異步串口,1個同步串口,2個DMA通道。而且與x86系列的指令完全兼容。主控USB接口芯片選用Cypress的SL811HS。它是一個嵌入式的USB 主/從控制器??梢院透鞣N微處理器、微控制器、DSP進行接口。SL811HS主控制器完全兼容USB1.1標準。圖3是一個利用SL811HS來訪問U盤的應用電路。其中USBRD、USBWR、CS5#、A0、INT7是與MCU的接口信號。

          圖3  U盤訪問控制電路

          提高SL811HS讀寫U盤兼容性的措施

          復位SL811HS后應適當增加延時時間

          當系統(tǒng)上電時,以及插入或拔出U盤時都需要復位(reset)SL811HS芯片,來重新更新端口狀態(tài)。初始化流程如下所示。注意在復位并初始化完SL811HS芯片和讀總線狀態(tài)之間需適當加長延時時間。因為當插入不同的U盤時總線的穩(wěn)定時間會有差別。如果延時較短,則有一些U盤就識別不到了,一般延時100ms就足夠了。下面給出相關(guān)代碼的描述。

          SL811Write(CtrlReg,0x08);       // 復位SL811HS
          SL811Write(CtrlReg,0x00);        // 設置SL811HS到正常操作模式
          SL811Write(IntStatus,INT_CLEAR); // 清中斷使能狀態(tài)
          /* 修改華旗 不能識別的問題*/
          /*原程序開始*/
          //EZUSB_Delay(10);    // 延時等待硬件穩(wěn)定
          /*原程序結(jié)束*/
          /*修改后程序開始*/  
             EZUSB_Delay(100);                   // 增加延時等待硬件穩(wěn)定
             /*修改后程序結(jié)束*/
                uIntStatus=SL811Read(IntStatus);    //讀SL811HS的狀態(tài)

          設置配置(set configuration)處理不完整

          應該在配置這個語句后面加上一個設置接口(set_interface)。Bus Hound軟件每次枚舉U盤的時候,先是set_configuration然后是 set_interface,筆者從中得到啟發(fā),實際協(xié)議上并沒有這樣的規(guī)定,這樣做的原因在于國內(nèi)的有些U盤生產(chǎn)廠商,照搬微軟Windows操作系統(tǒng)的做法,Windows是每次都要這樣做的,所以U盤廠商在寫固件的時候,就也要讓主機必需進行接口設置。

          端點被禁用后需進行一系列復位處理

          有些U盤在進行完查詢(inquiry)命令后,在讀容量(read_capability)時端點被禁用,筆者從Bus Hound中受到了啟發(fā),Bus Hound 的做法是有一個復位(reset)的過程,具體的命令就是清除端口(clear_feacture),執(zhí)行完這個命令后,讀容量時端點就不會被禁用了。具體的軟件流程如圖4所示。

          圖4 端點被禁用后的復位操作

          每條scsi命令失敗后需要進行多次重發(fā)處理

          在插入U盤后,在執(zhí)行讀容量命令時,在命令的查詢狀態(tài)(csw)階段總是返回錯誤。連續(xù)讀5次依然是返回錯誤。又是借助Bus Hound,發(fā)現(xiàn)PC機上執(zhí)行相應的命令時,若命令返回錯誤,它會連續(xù)發(fā)送幾十次直到操作正常。原來部分U盤對部分scsi命令(如read_capability,read10,write10)等的響應非常慢。所以可以通過增加重復讀取的次數(shù)來解決此類問題。筆者最后設置了100次。即重復發(fā)送100次此命令都返回錯誤則認為操作U盤失敗。詳細流程如圖5所示。

          圖5  SCSI命令失敗后增加復發(fā)讀取操作

          結(jié)語

          以MCU(386EX)+ SL811HS系統(tǒng)為平臺,借助USB協(xié)議分析軟件Bus Hound和硬件系統(tǒng)Anaslyst-I分析儀,分析了U盤操作失敗的原因,并給出了相應的措施。通過對目前市場上主要的幾十款U盤(包括愛國者、朗科、索尼、三星等等)的測試均正常。目前本系統(tǒng)已經(jīng)批量使用半年時間,未出現(xiàn)任何不兼容U盤的問題。
            
          參考文獻

          1 張念淮,江浩等, USB總線接口開發(fā)指南. 國防工業(yè)出版社,2001
          2 USB Mass Storage Class -Bulk Only Transport,1999
          3 USB Mass Storage Class-UFI Command Specification,1998



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();