基于ISP1161的USB HOST技術(shù)應用
摘要:主要介紹如何利用芯片ISP1161在嵌入式系統中實(shí)現USB HOST功能;基于批量傳輸協(xié)議,講述如何實(shí)現數據在USB存儲設備上的存儲和讀寫(xiě)。
關(guān)鍵詞:USB主機 ISP1161 傳輸協(xié)議 批量傳輸 設備枚舉 FAT16
本文以USB HOST技術(shù)為核心,介紹USB HOST技術(shù)在單片機上的實(shí)現。,重點(diǎn)介紹USB HOST技術(shù)在嵌入式系統讀寫(xiě)優(yōu)盤(pán)上的應用。
1 USB HOST技術(shù)簡(jiǎn)介
USB的通信可以用圖1表示。圖1中,左半部分為USB主機端,可以看出,USB主機端由兩部分構成,即軟件體和硬件體。實(shí)際上是三個(gè)軟件組件組成了USB HOST解決方案,即USB客戶(hù)驅動(dòng)程序、USB驅動(dòng)程序和USB主機控制器驅動(dòng)程序。應用程序的事務(wù)處理是由USB客戶(hù)驅動(dòng)程序(設備驅動(dòng)程序)啟動(dòng)時(shí),客戶(hù)驅動(dòng)程序把USB設備當作一個(gè)可以被訪(fǎng)問(wèn)的端點(diǎn)集合,它可以被控制并與它的功能單元進(jìn)行通信。USB系統軟件包括USB驅動(dòng)程序和USB主控制器驅動(dòng)程序,USB驅動(dòng)程序負責配置管理、用戶(hù)管理、總線(xiàn)管理和數據傳輸管理;以及數據的位編碼、封包、循環(huán)校驗、發(fā)送、錯誤處理等。
2 基于ISP1161控制器USB HOST的實(shí)現原理
USB控制器大致分為三類(lèi):第一類(lèi)是支持1.0協(xié)議的,這類(lèi)已經(jīng)很少見(jiàn)了;第二類(lèi)是支持1.1協(xié)議的控制器;第三類(lèi)是支持2.0協(xié)議的控制器。根據不同場(chǎng)合,后兩種應用比較廣泛,2.0接口主要用在計算機上,依靠操作系統實(shí)現數據高速傳輸。支持1.1協(xié)議的芯片除了用于計算機上,還有少數是為嵌入式系統中實(shí)現USB HOST而設計的。如Cypress的SL811、Philips的ISP1160、ISP1161等。
USB主機端的硬件部分是由處理器、USB-HOST控制器和根集線(xiàn)器組成,圖2是由微控制器MSP430F149和USB控制器ISP1161實(shí)現USB HOST的電路原理。圖2分為4個(gè)部分:微處理器、USB控制器、電源管理模塊和USB接口電路。從概念上還應有一個(gè)USB根集線(xiàn)器(USB Hub),實(shí)際根集線(xiàn)器被集成在USB HOST控制器中。
ISP1161是Philips設計的USB主機/設備控制器。內部有1個(gè)USB主機控制器和1個(gè)設備控制器,符合USB2.0協(xié)議,支持全速和低速傳輸。主機和設備控制器共享相同的接口總線(xiàn),帶有2個(gè)USB下行端口和1個(gè)USB上行端口。圖2中使用接口1作為HOST下行端口。每個(gè)下行端口有各自的過(guò)流檢測電路,圖2中使用PHP109檢測端口供電電流,
高于500mA將停止對總線(xiàn)供電。
MSP430和ISP1161的數據傳輸可以通過(guò)PIO(程控輸入輸出)方式或DMA(直接存儲器訪(fǎng)問(wèn))方式進(jìn)行傳輸,在ISP1161進(jìn)入工作狀態(tài)前,要進(jìn)行一系列初始化,包括檢測器、復位控制器、初始化硬件配置、設置中斷、設置Buffer(緩沖區)大小等。使ISP1161的主機控制器處于工作狀態(tài),真正用于發(fā)送到總線(xiàn)的數據被放置于ISP1161內部的緩沖區內。
這時(shí)值得一提的是“傳輸描述符”這個(gè)概念,它是ISP1161工作的核心概念。在緩沖區內放置的數據是以傳輸描述符為單位,傳輸描述符作用是描述了本次傳輸需要完成的任務(wù)。描述符分為描述符頭和描述符負載數據。描述符頭表征了這個(gè)描述符的傳輸類(lèi)型、封包最大寬度、傳輸速度、傳輸對象、傳輸端點(diǎn)、負載數據的長(cháng)度等。傳輸描述符的另一個(gè)作用體現在傳輸后。每次傳輸執行完畢后,傳輸描述符的內容會(huì )有相應的改變,體現在傳輸描述符頭中,表征了本次傳輸的結果,包括傳輸了多少字節,傳輸中發(fā)生了什么錯誤等。
3 USB主機端對設備的枚舉
從USB設備插入接口開(kāi)始到客戶(hù)驅動(dòng)程序能夠使用該設備還有一段路徑,這一段就被稱(chēng)作為設備的識別過(guò)程,又成為枚舉過(guò)程。枚舉過(guò)程是任何USB設備使用前必經(jīng)的過(guò)程。USB主機端需要知道這是一個(gè)低速設備還是全速設備,需要知道這個(gè)設備具有的能力,以便載入相應的設備驅動(dòng)程序,下面具體介紹一下實(shí)現步驟。
首先,捕捉設備的插入。USB設備是即插即用設備,系統在設備插入的瞬間要捕捉到這一信息,ISP1161是通過(guò)內部的Hub完成這一任務(wù)的。Hub端口的兩根信號線(xiàn)(D+和D-)的每一根都有一個(gè)子15kΩ的下拉電阻,而一個(gè)設備在D+(全速設備)或D-(低速設備)上有一個(gè)1.5kΩ的上拉電阻。當設備插入到一個(gè)端口時(shí),設備的上位電阻信號為高。Hub以此檢測到一個(gè)設備已連接上了,并報告給主機控制器,然后,在與處理器的接口上產(chǎn)生中斷。主機知道后,通過(guò)讀取Hub相關(guān)寄存器來(lái)了解諸如設備速度等更多信息。
而后,Hub重新設置該設備。當主機知道有一新設備時(shí),主機給Hub相關(guān)寄存器寫(xiě)命令,讓Hub來(lái)重新設置端口。Hub使設備的USB數據線(xiàn)處在重啟狀態(tài)(D+和D-均為邏輯低)至少10ms,當Hub釋放了重啟狀態(tài),設備就處在默認狀態(tài)了(D+和D-均為邏輯低)至少10ms,當Hub釋放了重啟狀態(tài),設備就處在默認狀態(tài)了(設備的USB寄存器已經(jīng)處在它們的默認狀態(tài))。此時(shí),設備已準備發(fā)通過(guò)Endpoint 0的默認流程來(lái)響應控制流程。
圖2
4 數據在存儲設備和主機之間的傳輸
下面將以嵌入式系統讀寫(xiě)優(yōu)盤(pán)為例介紹USB HOST的應用。首先將介紹一下數據在存儲設備和主機之間的傳輸。
除了上面提到的控制(control)傳輸外,還有三種傳輸方式:同步(isochronous)傳輸、中斷(interrupt)傳輸、批量(bulk)傳輸,主機將根據設備的特點(diǎn)決定采用什么傳輸方式。USB存儲設備和USB主機之間的傳輸方式是批量傳輸。為了能夠更詳細的說(shuō)明問(wèn)題,先簡(jiǎn)要說(shuō)明一下BULK-ONLY傳輸協(xié)議。
USB存儲設備使用的傳輸方式都是批量傳輸方式,一則它不受時(shí)間限制;二則能保證數據的完整性。在這種傳輸方式下,有三種類(lèi)型的數據在USB和設備之間傳送,CBW、CSW和普通數據。圖3描述了主機端數據傳輸的順序,CBW(命令塊封包)是從USB主機發(fā)送到設備的命令,USB主機發(fā)送到設備的命令,USB設備需要將命令從CBW中提取出來(lái),執行相應的操作。完成以后,向HOST端發(fā)出回答,即當前命令執行狀態(tài)的CSW(命令狀態(tài)封包)。主機根據CSW來(lái)決定是否繼續發(fā)送下一個(gè)CBW或是數據。
從圖3中可以看到數據段被一分之二,一個(gè)是數據出,這表示主機發(fā)送數據給設備;另一個(gè)為數據入,表示主機從設備處得到數據。典型誚就是讀取存儲設備數據和寫(xiě)入設備數據。下面介紹一下該過(guò)程如何在基于ISP1161的嵌入式系統中實(shí)現。
主機發(fā)送CBW,這個(gè)CBW本身作為傳輸描述符的負載數據傳輸到設備。CBW的封包也包括兩個(gè)部分,封包頭和命令塊。封包頭表征了數據傳輸方向傳輸的邏輯單元和命令塊長(cháng)度;命令塊是真正需要實(shí)現的命令。根據設備的不同,命令塊使用的命令簇也不一樣,基本上分為兩類(lèi),一類(lèi)是UFI指令集,另一種采用SCSI指令集。
普通數據階段,數據將占據整個(gè)傳輸描述的負載數據長(cháng)度,需要送出的數據在發(fā)送前要裝入緩沖區。讀入時(shí),數據在傳輸描述符執行完會(huì )自動(dòng)放入負載數據部分。
CSW階段反映該命令的完成情況,包括CSW標志、還需要傳輸的數據長(cháng)度、正確返回標志等。
5 單片機對存儲設備的讀寫(xiě)
對USB存儲設備的讀寫(xiě)需要對存儲體的格式有一定了解。當前USB存儲體多數為FAT16和FAT32格式,還有極少數的使用FAT12格式。FAT16多見(jiàn)于優(yōu)盤(pán),而FAT32多見(jiàn)于移動(dòng)硬盤(pán)。這里簡(jiǎn)價(jià)介紹優(yōu)盤(pán)普遍采用的一種文件格式:FAT16。對于只有一個(gè)分區FAT16格式的優(yōu)盤(pán),它的結構依次是主引導區(BOOT SECTOR)、隱藏扇區、邏輯盤(pán)引導區(BOOT SECTOR)、FAT區、根目錄區、數據區。
主引導區由MBR(Master Boot Record),DPT(Disk Partition Table)和Boot Record ID三部組成。MBR又稱(chēng)作主引導記錄區,存放系統主引導程序;DPT即主分區表,記錄了磁盤(pán)的基本分區信息;Boot Record ID為引導區標志。邏輯分區的Boot SECTOR由已跳轉指令、硬盤(pán)分區類(lèi)型的文本字符名、分區參數塊、擴展的分區參數塊和啟動(dòng)指令塊組成。FAT(File Allocation Table,文件分配表)、記錄簇的使用情況。根據目錄區中存放目錄項,每個(gè)目錄項為32個(gè)字節,記錄一個(gè)文件或目錄的信息(長(cháng)文件名例外)。數據區記錄了文件和目錄數據區,位于目錄項所占的最后一個(gè)扇區之后,最真正存放文件數據或是子目錄的位置。
文件的讀寫(xiě)實(shí)際上是USB BULK-ONLY Protocol(USB批量傳輸協(xié)議)和文件系統協(xié)議的具體實(shí)現,下面以文件系統為FAT16的設備為例,講述如何讀取一個(gè)位于根目錄下名為“read.txt”的文件和在該目錄下寫(xiě)入一個(gè)名為“write.txt”的文件。
讀取和寫(xiě)入數據之前,需要了解的該存儲設備的全部信息。包括扇區大小,FAT表長(cháng)度,簇的大小等。該部分信息可以通過(guò)讀取主引導區和邏輯引導區獲得。
讀取文件的時(shí)候,大致按如下順序,讀根目錄→讀FAT1→讀數據區,具體步驟如下。首先找到文件名所在的位置,根目錄下的文件和目錄均在根目錄區,每一個(gè)目錄或文件項占用32個(gè)字節,每次讀取一個(gè)扇區,比較數據,沒(méi)有則繼續讀下一個(gè)扇區,直到找到該文件。在這32個(gè)字節中,第26~27字節表征了文件開(kāi)始簇號,28~31字節表征了文件大小。根據開(kāi)始簇號,搜索FAT區,找到文件簇鏈,依次讀取對應簇,即可完整的得到文件數據。
寫(xiě)“write.txt”稍有不同,大致可以按這樣的順序號,寫(xiě)FAT1→寫(xiě)FAT2→寫(xiě)根目錄區→寫(xiě)數據區。具體來(lái)說(shuō),先讀取FAT區,搜索可用簇,標記為文件開(kāi)始簇號,繼續搜索,找到下一可用簇,并在上一可用簇標示(00 00)處寫(xiě)入該簇號,依次下去,直至寫(xiě)完簇鏈,并將最后一個(gè)簇標志為文件的結束簇。這里需要注意的是:FAT區有兩份,是同樣的內容,寫(xiě)完了FAT1,將FAT2相應位置寫(xiě)入同樣的數據。下一步就是寫(xiě)文件名,在根目標區搜索可用的根目錄項,將文件名、時(shí)間、起始扇區、文件大小等寫(xiě)入該目錄項。這時(shí)優(yōu)盤(pán)上已經(jīng)有了一個(gè)名為“write.txt”的文件,但是文件的內部還未寫(xiě)入,下一步根據文件開(kāi)始簇號,將文件的內容寫(xiě)入簇鏈中對應的簇。至此,整個(gè)文件的寫(xiě)入就大功告成。
6 小結
一個(gè)USB HOST要完成的功能因為需求不同,所使用的協(xié)議也不盡相同,有的采用中斷傳輸,有的采用同步傳輸。USB主機技術(shù)在單片機上的應用主要是針對某一種USB設備或幾種設備,因而單片機上可以只固化某幾種協(xié)議。該技術(shù)的應用可以使得小型儀器上輕松接入USB外設、擴展系統的功能、提高儀器的使用靈活性。USB主機技術(shù)在單片機上的應用會(huì )有更廣泛更美好的前景。
評論