在單片機(jī)上實現(xiàn)USB移動存儲_第1頁
在單片機(jī)上實現(xiàn)USB移動存儲_第2頁
在單片機(jī)上實現(xiàn)USB移動存儲_第3頁
在單片機(jī)上實現(xiàn)USB移動存儲_第4頁
在單片機(jī)上實現(xiàn)USB移動存儲_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

在單片機(jī)上實現(xiàn)USB移動存儲第1章 主要硬件芯片介紹1.1系統(tǒng)總體設(shè)計 USB主機(jī)系統(tǒng)設(shè)計是一個軟、硬件結(jié)合的整體,宏觀上主要包括三個層次的設(shè)計:USB總線物理層接口設(shè)計、USB核心系統(tǒng)設(shè)計和USB客戶系統(tǒng)設(shè)計??偩€接口主要處理主機(jī)與設(shè)備之間的電氣及協(xié)議層的互連,是信息包進(jìn)出的物理橋梁;USB核心系統(tǒng)主要管理和協(xié)調(diào)主機(jī)與從機(jī)間的邏輯數(shù)據(jù)傳輸,解析雙方聯(lián)系的握手協(xié)議,是驗證信息包的邏輯關(guān)卡;客戶系統(tǒng)是最終用戶直接和USB設(shè)備功能交互的邏輯平臺,不同的USB設(shè)備歸屬于不同的類,是利用相關(guān)的類協(xié)議來實現(xiàn)的,所以客戶系統(tǒng)驅(qū)動程序具有多變性,需要為專門的類定制專門的驅(qū)動程序。在單片機(jī)上實現(xiàn)USB移動存儲功能,具體包括USB主機(jī)接口的硬件設(shè)計和整機(jī)USB驅(qū)動固件的設(shè)計。其中驅(qū)動固件的設(shè)計具體又包含幾個協(xié)議的實現(xiàn):USB1.1控制傳輸協(xié)議、USB BULK傳輸協(xié)議、USB海量存儲類協(xié)議、UFI磁盤操作命令和FAT文件系統(tǒng)標(biāo)準(zhǔn)等。1.2硬件設(shè)計1.2.1USB主控制器 USB主控制器主要是完成底層物理接口設(shè)計,是USB系統(tǒng)架構(gòu)的必要部分,是USB數(shù)據(jù)包進(jìn)出的必經(jīng)通道。本系統(tǒng)采用的USB主機(jī)芯片是Cypress公司的SL811HS。Cypress公司是最早從事USB芯片開發(fā)的公司之一,其EZ-USB系列芯片在業(yè)界有非常好的口碑。SL811HS是當(dāng)經(jīng)第一個支持USB 主從機(jī)的接口芯片,性能穩(wěn)定,資料全面。(1) 芯片特性 SL811HS是自動兼容USB全速或者低速的嵌入式USB主從機(jī)的接口芯片,它支持微處理器、微控制器或者DSP的USB接口設(shè)計,同時也可以直接連到ISA、PCMICA等其它總線8,芯片使用標(biāo)準(zhǔn)的USB1.1協(xié)議。SL811HS通過內(nèi)部集成的全/低速傳輸引擎產(chǎn)生USB串行接口功能,在全速時帶寬為12Mbps,低速時為1.5Mbps。芯片支持8位并行數(shù)據(jù)端口或者I/O口的設(shè)計,同時也支持DMA,自動中斷檢測連接口,可以非常容易地在MCS-51系列微處理器、摩托羅拉微控制器或者其它控制芯片上完成設(shè)計。總的來說具有如下特性:1. 可在軟件控制下,單一地實現(xiàn)主機(jī)或者從機(jī)功能,28腳PLCC,48腳TQFP封裝。 2. 低速1.5Mbps,高速12Mbps,主從模式下都一樣。 3. 自動檢測連接設(shè)備是否為高速或者低速。 4. 支持8位雙向并口傳輸,或者I/O口,DMA傳輸。 5. 片上集成SIE和USB傳輸器。 6. 片上集成了一個USB根集線器。 7. 256字節(jié)內(nèi)部SRAM,支持乒乓傳輸。 8. 工作頻率在12M或者48M,3.3伏供電,最高5伏耐壓接口。 9. 支持總線掛起、喚醒和掉電模式。 10. 自動產(chǎn)生SOF和循環(huán)冗余校驗,自動地址增長模式,保存讀寫周期。 SL811HS內(nèi)部電路結(jié)構(gòu)見圖1.1(2)相關(guān)寄存器介紹 USB系統(tǒng)驅(qū)動的編程,實質(zhì)上就是對SL811HS的寄存器和一些緩存區(qū)的讀寫,SL811HS內(nèi)部一共有256個字節(jié)的緩存,高端240個字節(jié)作為通用內(nèi)存,可以隨意訪問,低端16個字節(jié)是特殊功能寄存器,USB的一些規(guī)范就融合在里面。SL811HS有A、B兩套并行的寄存器,功能和使用完全一樣,見表1.1。(3)接口電路 SL811HS既可以作為嵌入式的主機(jī)又可以作為設(shè)備,靈活性非常大。它可以直接連到處理器或者按內(nèi)存映射的方式接到ARM處理器上。硬件設(shè)計時候主要注意幾個關(guān)鍵引腳的處理:1. nCS:低電平有效,使能SL811HS接口和讀寫寄存器與內(nèi)存。必須使nCS在一個傳輸周期中至少要保持65納秒以上才能進(jìn)行有效的通信。 2. nWR:低電平有效,要使數(shù)據(jù)有效nWR也至少需要持續(xù)65個納秒以上。一但nWR 為低時,總線上的信息至少要保持5個納秒。 3. nRD:低電平有效,讀取數(shù)據(jù)之前,必須先寫入地址,nRD的最小周期是65個納秒。一但nRD為低時,總線上的信息至少要保持5個納秒。 4. A0:低電平時代表地址,高電平時代表數(shù)據(jù)。A0至少要保持10個納秒以上才能保證數(shù)據(jù)正確寫入。 5. INTRQ:高電平有效,當(dāng)傳輸事務(wù)完成,或者有外部設(shè)備接入時,就會觸發(fā)中斷。通過寫入中斷寄存器可以清除中斷。 6. nRest:低電平有效,SL811HS上電后需要復(fù)位。 常見8位嵌入式處理器和SL811HS的連接見圖1.2。SL811HS讀時序見圖1.3,寫時序見圖1.4。1.2.2 微處理器 本設(shè)計的主要目的是在普通單片機(jī)下能夠使用USB移動存儲,同時通過該系統(tǒng)的串口能夠完成讓外部的嵌入式設(shè)備也能使用USB移動存儲。主機(jī)處理器芯片選用兼容MCS-51指令的AT89C52,并外擴(kuò)一個32K的RAM。系統(tǒng)的功能設(shè)計見圖1.5。 AT89C52控制器主要是通過SL811HS對USB移動存儲進(jìn)行操作,外部控制按鈕(小鍵盤)輸入不同的值可以實現(xiàn)不同的功能,比如寫文件、讀文件、建立目錄或刪除文件等。RS232接口,主要是留給外部系統(tǒng)使用,其它的嵌入式系統(tǒng)只要接上該系統(tǒng)的串口,按照一定的命令格式就可以通過串口使用USB移動存儲。根據(jù)SL811HS容錯報告所知,SL811HS的內(nèi)部鎖相環(huán)非常敏感,易受高頻噪聲干擾,從而導(dǎo)致時鐘抖動,進(jìn)而會使SOF不準(zhǔn)確(標(biāo)準(zhǔn)周期為1毫秒)。解決這個問題有兩種措施:1. 盡量使用有源的48M晶體 2. 備選方案是使用無源48M晶振,同時在SL811HS的VDD腳加上適當(dāng)?shù)臑V波電容,并注意PCB的布線。1.3固件程序設(shè)計 USB主機(jī)系統(tǒng)固件的編寫比較繁瑣,主要涉及到USB控制傳輸、USB批量傳輸、海量存儲類協(xié)議、UFI磁盤操作命令和FAT文件系統(tǒng)的編寫,全部都是最底層的程序操作,沒有現(xiàn)成的類庫支持,故程序整體框架的搭建和具體協(xié)議的數(shù)據(jù)結(jié)構(gòu)的組織是非常關(guān)鍵的?;谝陨弦蛩?,構(gòu)建了系統(tǒng)的總體邏輯設(shè)計,見圖1.6。 這些協(xié)議或者命令層層相扣,每一層開發(fā)的優(yōu)劣不僅直接影響功能的實現(xiàn),更會直接影響數(shù)據(jù)傳輸?shù)姆€(wěn)定性和速度。該系統(tǒng)設(shè)計的主要難點在于軟件程序的編寫,由于牽涉的協(xié)議多,在編寫程序時要重視模塊化的思想,每一個具體的協(xié)議盡量都編寫在一個源文件里,數(shù)據(jù)結(jié)構(gòu)和常量、變量最好定義在每個模塊的頭文件中。在調(diào)試USB 底層的控制傳輸時,可以充分利用Bus Hound工具抓取USB移動存儲剛插入計算機(jī)時與計算機(jī)通信的數(shù)據(jù)來分析、對比和參考開發(fā),加深對USB整個底層信息交互的理解。1.3.1 USB總線枚舉協(xié)議的實現(xiàn) 任何USB設(shè)備連上USB主機(jī)后,都必須經(jīng)過USB主機(jī)的枚舉配置后才能正確使用。USB總線枚舉的步驟和方法,對于所有USB設(shè)備來說都是一樣的,必須遵守標(biāo)準(zhǔn)的USB協(xié)議過程,通過控制傳輸?shù)摹耙粏栆淮稹眮韺崿F(xiàn)主機(jī)和從機(jī)必要的幾個數(shù)據(jù)交流:獲取設(shè)備描述符、分配設(shè)備地址和配置設(shè)備??刂苽鬏?shù)暮诵氖荢ETUP包,其結(jié)構(gòu)見表1.2。 1. bmRequestType:共一個字節(jié),每一位代表一定的意義。第7位D7代表數(shù)據(jù)傳輸方向:D7=“0”,代表主機(jī)到設(shè)備(OUT),D7=“1”,代表設(shè)備到主機(jī)(IN);D6和D5表示命令類型:D6D5=“00”表示標(biāo)準(zhǔn)請求,D6D5=“01”表示類請求,D6D5=“10”表示用戶定義的請求,D6D5=“11”保留值;D4-D0表示命令的接受者類型:D4D3D2D1D0=“00000”表示接受者為設(shè)備,D4D3D2D1D0=“00001”表示接受者為接口,D4D3D2D1D0=“00011”表示為其它接受者,D4D3D2D1D0 的其它值保留。 2. bRequest:請求命令代碼,在標(biāo)準(zhǔn)的請求命令中USB為每一個命令編了一個代號,見表3.3。 3. wValue:共2個字節(jié),用戶自定義。 4. wIndex:共2個字節(jié),用戶自定義。 總線枚舉的所有命令都是通過SETUP包發(fā)送出去的,在SL811HS中就是通過啟動DATA0把命令包發(fā)送出去。如果命令要求有數(shù)據(jù)傳輸,那么SETUP包后接著還有IN包或者OUT包可選數(shù)據(jù)發(fā)送,此時由于前面SETUP包已經(jīng)啟動了DATA0,這里就必須開啟DATA1,如果數(shù)據(jù)大于端點的最大數(shù)據(jù)載荷,那么就用DATA1/DATA0的方式交替來發(fā)送。主機(jī)和設(shè)備在接收到USB包時,首先就要根據(jù)包標(biāo)識域(PID)進(jìn)行解碼,進(jìn)而區(qū)分出是什么包。USB控制傳輸主要是SETUP包,同時還有相應(yīng)的IN包或OUT包;在控制傳輸完成之后接著是批量傳輸(BULK),這就是純粹的IN包或OUT包的傳輸了。這些包在主機(jī)固件里具體如何區(qū)分、實現(xiàn)呢?根據(jù)表2.1可以知道檢驗PID的值可以區(qū)分出SETUP、IN和OUT包。那么IN和OUT包到底是控制傳輸中的呢?還是批量傳輸中的呢?此時要明白,控制傳輸是所有USB主機(jī)或者設(shè)備開發(fā)中的必要傳輸,并且只能由默認(rèn)端點0來完成,所以可以在固件中判斷當(dāng)前信息交互的端點號就可以區(qū)分出IN和OUT包到底歸屬于哪一種傳輸。如果是批量傳輸中的IN包或者OUT包,那么可以直接啟動DATA0/DATA1來發(fā)送數(shù)據(jù)。USB枚舉程序底層數(shù)據(jù)包傳輸設(shè)計結(jié)構(gòu)見圖1.7。 形象點講USB主機(jī)枚舉的過程就是:首先獲取設(shè)備屬性,設(shè)備會返回18個數(shù)值(值中對固件有用的是最大包端點長度),然后為設(shè)備分配一個操作地址,地址范圍可以根據(jù)實際情況而定,并且配置設(shè)備,最后列舉設(shè)備端點,獲取設(shè)備的每一個端點號(地址)。枚舉的實質(zhì)目的就是想獲取設(shè)備的端點地址,靠它來完成數(shù)據(jù)包的收發(fā)。獲取設(shè)備屬性、分配地址等枚舉請求命令都有標(biāo)準(zhǔn)說明(見表1.3)。 SL811HS 芯片必須初始化、復(fù)位后才能對設(shè)備進(jìn)行枚舉操作,實踐表明對SL811HS寄存器初始化的順序和延遲時間非常關(guān)鍵,會影響到整個系統(tǒng)的穩(wěn)定性和速度。經(jīng)測試比較好的初始代碼如下:void S811Init(void) SL811Write(cDATASet,0xe0); /設(shè)定SOF計數(shù)器低8位 SL811Write(cSOFcnt,0xae); /設(shè)定主機(jī)工作模式 SL811Write(CtrlReg,0x5); /開SOF Delay(150); /延時 SL811Write(EP0Counter,0); SL811Write(IntEna,0x20); / 寫中斷寄存器 SL811Write(IntStatus,INT_CLEAR); /清楚中斷1.3.2 USB批量傳輸和海量存儲類協(xié)議的實現(xiàn) USB主機(jī)系統(tǒng)實現(xiàn)目的是使用USB移動存儲,涉及到大量文件數(shù)據(jù)的傳輸,所以應(yīng)該選擇USB批量傳輸(BULK)。批量傳輸用BULK端點進(jìn)行命令、數(shù)據(jù)和狀態(tài)的傳輸4,其流程結(jié)構(gòu)見圖1.8。CBW是命令塊封裝包,CSW是命令狀態(tài)封狀包,都是一系列包的集合。(1)CBWCBW的長度為31字節(jié),包含了海量存儲類協(xié)議的磁盤操作命令,其結(jié)構(gòu)見圖1.9。dCBWSignature:是CBW的標(biāo)志,固定值為0x43425355,所有CBW的值在USB總線上傳輸?shù)臅r候都是按照LSB順發(fā)送的,即最先發(fā)送低位,然后發(fā)送高位。1. dCBWTag:由主機(jī)產(chǎn)生的并發(fā)送給設(shè)備,設(shè)備會將此值填入CSW的dCSWTag,以此返回給主機(jī)。 2. dCBWDataTransferLength:主機(jī)希望在批量端點上傳輸數(shù)據(jù)的大小。 3. bmCBWFlag:一個字節(jié)的位圖,D7=“0”時表示主機(jī)輸出數(shù)據(jù),反之主機(jī)接受數(shù)據(jù),D6沒有用到,D5-D0保留位。 4. bCBWLUN:接受命令的設(shè)備邏輯單元號。 5. bCBWCBLength:表示了CBWCB的長度,也就是磁盤操作命令的長度。 6. CBWCB:填入磁盤操作命令。 CBW是以二進(jìn)制位發(fā)送的,每個包必須是精確的31個字節(jié),不滿足的要補(bǔ)0。(2) CSWCSW的長度為13字節(jié),其結(jié)構(gòu)見圖1.10。1. dCSWSignature:是CSW的標(biāo)志,固定值為0x53425355,CSW的值也都是按LSB順序發(fā)送。 2. dCSWTag:命令狀態(tài)標(biāo)簽,該值與CBW中的dCBWTag值相同。 3. dCSWDataResidue:該字段表示dCBWDataTransferLength字段中主機(jī)希望的數(shù)據(jù)長度與實際發(fā)送的數(shù)據(jù)長度之間的差額。 4. bCSWStatus:表示命令執(zhí)行情況,見表1.4 (3)UFI UFI是Mass Storage 類的子類,支持海量存儲類的USB主機(jī)應(yīng)該實現(xiàn)這些子類命令。UFI子類命令是基于SFF-8070I和SCSI-2的,每個命令塊的長度均為12字節(jié),UFI的各種命令及操作碼如表3.5。對USB移動存儲的所有操作都是經(jīng)過這些命令來完成的,UFI命令封裝于CBW中的CBWCB塊中,靠CBW傳輸出去,命令結(jié)果的狀態(tài)保存于CSW中,通過讀CSW相關(guān)結(jié)構(gòu)中的數(shù)值,就可以了解命令的最終執(zhí)行情況。UFI命令是標(biāo)準(zhǔn)的12字節(jié),命令結(jié)構(gòu)見圖1.11。 其中操作碼與表1.5中每一種命令相對應(yīng)。Lgical Unit Number(LUN),每一個設(shè)備上可能有很多個邏輯單元共享著該設(shè)備功能特性,設(shè)備上的邏輯單元都被連續(xù)從0X0-0XFF 進(jìn)行編號;Logical Block Address (LBA), LBA的值從邏輯塊0連續(xù)遞增到最后一個邏輯塊,系統(tǒng)中LBA代表的就是移動存儲介質(zhì)的絕對扇區(qū)。注意LUN和LBA的字節(jié)發(fā)送順序都是MSB,在8位單片機(jī)里保持正常順序即可,CBW結(jié)構(gòu)定義如下:typedef struct _COMMAND_BLOCK_WRAPPER DWORD dCBW_Signature; DWORD dCBW_Tag; DWORD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論