當(dāng)前位置:首頁(yè) > 智能硬件 > 智能硬件
[導(dǎo)讀]主要介紹如何利用芯片ISP1161在嵌入式系統(tǒng)中實(shí)現(xiàn)USB HOST功能;基于批量傳輸協(xié)議,講述如何實(shí)現(xiàn)數(shù)據(jù)在USB存儲(chǔ)設(shè)備上的存儲(chǔ)和讀寫(xiě)。

    摘要:主要介紹如何利用芯片ISP1161在嵌入式系統(tǒng)中實(shí)現(xiàn)USB HOST功能;基于批量傳輸協(xié)議,講述如何實(shí)現(xiàn)數(shù)據(jù)在USB存儲(chǔ)設(shè)備上的存儲(chǔ)和讀寫(xiě)。

    關(guān)鍵詞:USB主機(jī) ISP1161 傳輸協(xié)議 批量傳輸 設(shè)備枚舉 FAT16

本文以USB HOST技術(shù)為核心,介紹USB HOST技術(shù)在單片機(jī)上的實(shí)現(xiàn)。,重點(diǎn)介紹USB HOST技術(shù)在嵌入式系統(tǒng)讀寫(xiě)優(yōu)盤(pán)上的應(yīng)用。

1 USB HOST技術(shù)簡(jiǎn)介

USB的通信可以用圖1表示。圖1中,左半部分為USB主機(jī)端,可以看出,USB主機(jī)端由兩部分構(gòu)成,即軟件體和硬件體。實(shí)際上是三個(gè)軟件組件組成了USB HOST解決方案,即USB客戶驅(qū)動(dòng)程序、USB驅(qū)動(dòng)程序和USB主機(jī)控制器驅(qū)動(dòng)程序。應(yīng)用程序的事務(wù)處理是由USB客戶驅(qū)動(dòng)程序(設(shè)備驅(qū)動(dòng)程序)啟動(dòng)時(shí),客戶驅(qū)動(dòng)程序把USB設(shè)備當(dāng)作一個(gè)可以被訪問(wèn)的端點(diǎn)集合,它可以被控制并與它的功能單元進(jìn)行通信。USB系統(tǒng)軟件包括USB驅(qū)動(dòng)程序和USB主控制器驅(qū)動(dòng)程序,USB驅(qū)動(dòng)程序負(fù)責(zé)配置管理、用戶管理、總線管理和數(shù)據(jù)傳輸管理;以及數(shù)據(jù)的位編碼、封包、循環(huán)校驗(yàn)、發(fā)送、錯(cuò)誤處理等。

2 基于ISP1161控制器USB HOST的實(shí)現(xiàn)原理

USB控制器大致分為三類:第一類是支持1.0協(xié)議的,這類已經(jīng)很少見(jiàn)了;第二類是支持1.1協(xié)議的控制器;第三類是支持2.0協(xié)議的控制器。根據(jù)不同場(chǎng)合,后兩種應(yīng)用比較廣泛,2.0接口主要用在計(jì)算機(jī)上,依靠操作系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)高速傳輸。支持1.1協(xié)議的芯片除了用于計(jì)算機(jī)上,還有少數(shù)是為嵌入式系統(tǒng)中實(shí)現(xiàn)USB HOST而設(shè)計(jì)的。如Cypress的SL811、Philips的ISP1160、ISP1161等。

USB主機(jī)端的硬件部分是由處理器、USB-HOST控制器和根集線器組成,圖2是由微控制器MSP430F149和USB控制器ISP1161實(shí)現(xiàn)USB HOST的電路原理。圖2分為4個(gè)部分:微處理器、USB控制器、電源管理模塊和USB接口電路。從概念上還應(yīng)有一個(gè)USB根集線器(USB Hub),實(shí)際根集線器被集成在USB HOST控制器中。

    ISP1161是Philips設(shè)計(jì)的USB主機(jī)/設(shè)備控制器。內(nèi)部有1個(gè)USB主機(jī)控制器和1個(gè)設(shè)備控制器,符合USB2.0協(xié)議,支持全速和低速傳輸。主機(jī)和設(shè)備控制器共享相同的接口總線,帶有2個(gè)USB下行端口和1個(gè)USB上行端口。圖2中使用接口1作為HOST下行端口。每個(gè)下行端口有各自的過(guò)流檢測(cè)電路,圖2中使用PHP109檢測(cè)端口供電電流,

高于500mA將停止對(duì)總線供電。

MSP430和ISP1161的數(shù)據(jù)傳輸可以通過(guò)PIO(程控輸入輸出)方式或DMA(直接存儲(chǔ)器訪問(wèn))方式進(jìn)行傳輸,在ISP1161進(jìn)入工作狀態(tài)前,要進(jìn)行一系列初始化,包括檢測(cè)器、復(fù)位控制器、初始化硬件配置、設(shè)置中斷、設(shè)置Buffer(緩沖區(qū))大小等。使ISP1161的主機(jī)控制器處于工作狀態(tài),真正用于發(fā)送到總線的數(shù)據(jù)被放置于ISP1161內(nèi)部的緩沖區(qū)內(nèi)。

這時(shí)值得一提的是“傳輸描述符”這個(gè)概念,它是ISP1161工作的核心概念。在緩沖區(qū)內(nèi)放置的數(shù)據(jù)是以傳輸描述符為單位,傳輸描述符作用是描述了本次傳輸需要完成的任務(wù)。描述符分為描述符頭和描述符負(fù)載數(shù)據(jù)。描述符頭表征了這個(gè)描述符的傳輸類型、封包最大寬度、傳輸速度、傳輸對(duì)象、傳輸端點(diǎn)、負(fù)載數(shù)據(jù)的長(zhǎng)度等。傳輸描述符的另一個(gè)作用體現(xiàn)在傳輸后。每次傳輸執(zhí)行完畢后,傳輸描述符的內(nèi)容會(huì)有相應(yīng)的改變,體現(xiàn)在傳輸描述符頭中,表征了本次傳輸?shù)慕Y(jié)果,包括傳輸了多少字節(jié),傳輸中發(fā)生了什么錯(cuò)誤等。

3 USB主機(jī)端對(duì)設(shè)備的枚舉

從USB設(shè)備插入接口開(kāi)始到客戶驅(qū)動(dòng)程序能夠使用該設(shè)備還有一段路徑,這一段就被稱作為設(shè)備的識(shí)別過(guò)程,又成為枚舉過(guò)程。枚舉過(guò)程是任何USB設(shè)備使用前必經(jīng)的過(guò)程。USB主機(jī)端需要知道這是一個(gè)低速設(shè)備還是全速設(shè)備,需要知道這個(gè)設(shè)備具有的能力,以便載入相應(yīng)的設(shè)備驅(qū)動(dòng)程序,下面具體介紹一下實(shí)現(xiàn)步驟。

首先,捕捉設(shè)備的插入。USB設(shè)備是即插即用設(shè)備,系統(tǒng)在設(shè)備插入的瞬間要捕捉到這一信息,ISP1161是通過(guò)內(nèi)部的Hub完成這一任務(wù)的。Hub端口的兩根信號(hào)線(D+和D-)的每一根都有一個(gè)子15kΩ的下拉電阻,而一個(gè)設(shè)備在D+(全速設(shè)備)或D-(低速設(shè)備)上有一個(gè)1.5kΩ的上拉電阻。當(dāng)設(shè)備插入到一個(gè)端口時(shí),設(shè)備的上位電阻信號(hào)為高。Hub以此檢測(cè)到一個(gè)設(shè)備已連接上了,并報(bào)告給主機(jī)控制器,然后,在與處理器的接口上產(chǎn)生中斷。主機(jī)知道后,通過(guò)讀取Hub相關(guān)寄存器來(lái)了解諸如設(shè)備速度等更多信息。

而后,Hub重新設(shè)置該設(shè)備。當(dāng)主機(jī)知道有一新設(shè)備時(shí),主機(jī)給Hub相關(guān)寄存器寫(xiě)命令,讓Hub來(lái)重新設(shè)置端口。Hub使設(shè)備的USB數(shù)據(jù)線處在重啟狀態(tài)(D+和D-均為邏輯低)至少10ms,當(dāng)Hub釋放了重啟狀態(tài),設(shè)備就處在默認(rèn)狀態(tài)了(D+和D-均為邏輯低)至少10ms,當(dāng)Hub釋放了重啟狀態(tài),設(shè)備就處在默認(rèn)狀態(tài)了(設(shè)備的USB寄存器已經(jīng)處在它們的默認(rèn)狀態(tài))。此時(shí),設(shè)備已準(zhǔn)備發(fā)通過(guò)Endpoint 0的默認(rèn)流程來(lái)響應(yīng)控制流程。

圖2

    最后,主機(jī)通過(guò)控制傳輸通道完成設(shè)備的枚舉。主機(jī)端先送一個(gè)Get_Descriptor(獲取描述符)請(qǐng)求來(lái)知道默認(rèn)流程最大包的大小,主機(jī)發(fā)送請(qǐng)求給設(shè)備地址0,端點(diǎn)0。然后通過(guò)發(fā)送一個(gè)Set_Address(設(shè)定地址)請(qǐng)求來(lái)分配一個(gè)單獨(dú)的地址給設(shè)備。設(shè)備讀取這個(gè)請(qǐng)求,返回一個(gè)確認(rèn)且保存新的地址。知道設(shè)備的能力主機(jī)給新地址發(fā)送一個(gè)Get_Descriptor請(qǐng)求來(lái)讀取這個(gè)設(shè)備完整的描述符,包括Endpoint 0最大包的大小,設(shè)備支持的配置號(hào),以及該設(shè)備的其它信息,主機(jī)將這些信息用于往后的通信中。而后發(fā)出(Set_configuration)設(shè)定配置請(qǐng)求,以該配置號(hào)配置設(shè)備。設(shè)備就完全正確處于可操作狀態(tài)。主機(jī)此時(shí)就可以加載相應(yīng)的客戶驅(qū)動(dòng)程序,對(duì)設(shè)備進(jìn)行操作了。

4 數(shù)據(jù)在存儲(chǔ)設(shè)備和主機(jī)之間的傳輸

下面將以嵌入式系統(tǒng)讀寫(xiě)優(yōu)盤(pán)為例介紹USB HOST的應(yīng)用。首先將介紹一下數(shù)據(jù)在存儲(chǔ)設(shè)備和主機(jī)之間的傳輸。

除了上面提到的控制(control)傳輸外,還有三種傳輸方式:同步(isochronous)傳輸、中斷(interrupt)傳輸、批量(bulk)傳輸,主機(jī)將根據(jù)設(shè)備的特點(diǎn)決定采用什么傳輸方式。USB存儲(chǔ)設(shè)備和USB主機(jī)之間的傳輸方式是批量傳輸。為了能夠更詳細(xì)的說(shuō)明問(wèn)題,先簡(jiǎn)要說(shuō)明一下BULK-ONLY傳輸協(xié)議。

USB存儲(chǔ)設(shè)備使用的傳輸方式都是批量傳輸方式,一則它不受時(shí)間限制;二則能保證數(shù)據(jù)的完整性。在這種傳輸方式下,有三種類型的數(shù)據(jù)在USB和設(shè)備之間傳送,CBW、CSW和普通數(shù)據(jù)。圖3描述了主機(jī)端數(shù)據(jù)傳輸?shù)捻樞?,CBW(命令塊封包)是從USB主機(jī)發(fā)送到設(shè)備的命令,USB主機(jī)發(fā)送到設(shè)備的命令,USB設(shè)備需要將命令從CBW中提取出來(lái),執(zhí)行相應(yīng)的操作。完成以后,向HOST端發(fā)出回答,即當(dāng)前命令執(zhí)行狀態(tài)的CSW(命令狀態(tài)封包)。主機(jī)根據(jù)CSW來(lái)決定是否繼續(xù)發(fā)送下一個(gè)CBW或是數(shù)據(jù)。

從圖3中可以看到數(shù)據(jù)段被一分之二,一個(gè)是數(shù)據(jù)出,這表示主機(jī)發(fā)送數(shù)據(jù)給設(shè)備;另一個(gè)為數(shù)據(jù)入,表示主機(jī)從設(shè)備處得到數(shù)據(jù)。典型誚就是讀取存儲(chǔ)設(shè)備數(shù)據(jù)和寫(xiě)入設(shè)備數(shù)據(jù)。下面介紹一下該過(guò)程如何在基于ISP1161的嵌入式系統(tǒng)中實(shí)現(xiàn)。

主機(jī)發(fā)送CBW,這個(gè)CBW本身作為傳輸描述符的負(fù)載數(shù)據(jù)傳輸?shù)皆O(shè)備。CBW的封包也包括兩個(gè)部分,封包頭和命令塊。封包頭表征了數(shù)據(jù)傳輸方向傳輸?shù)倪壿媶卧兔顗K長(zhǎng)度;命令塊是真正需要實(shí)現(xiàn)的命令。根據(jù)設(shè)備的不同,命令塊使用的命令簇也不一樣,基本上分為兩類,一類是UFI指令集,另一種采用SCSI指令集。

普通數(shù)據(jù)階段,數(shù)據(jù)將占據(jù)整個(gè)傳輸描述的負(fù)載數(shù)據(jù)長(zhǎng)度,需要送出的數(shù)據(jù)在發(fā)送前要裝入緩沖區(qū)。讀入時(shí),數(shù)據(jù)在傳輸描述符執(zhí)行完會(huì)自動(dòng)放入負(fù)載數(shù)據(jù)部分。

CSW階段反映該命令的完成情況,包括CSW標(biāo)志、還需要傳輸?shù)臄?shù)據(jù)長(zhǎng)度、正確返回標(biāo)志等。

5 單片機(jī)對(duì)存儲(chǔ)設(shè)備的讀寫(xiě)

對(duì)USB存儲(chǔ)設(shè)備的讀寫(xiě)需要對(duì)存儲(chǔ)體的格式有一定了解。當(dāng)前USB存儲(chǔ)體多數(shù)為FAT16和FAT32格式,還有極少數(shù)的使用FAT12格式。FAT16多見(jiàn)于優(yōu)盤(pán),而FAT32多見(jiàn)于移動(dòng)硬盤(pán)。這里簡(jiǎn)價(jià)介紹優(yōu)盤(pán)普遍采用的一種文件格式:FAT16。對(duì)于只有一個(gè)分區(qū)FAT16格式的優(yōu)盤(pán),它的結(jié)構(gòu)依次是主引導(dǎo)區(qū)(BOOT SECTOR)、隱藏扇區(qū)、邏輯盤(pán)引導(dǎo)區(qū)(BOOT SECTOR)、FAT區(qū)、根目錄區(qū)、數(shù)據(jù)區(qū)。

主引導(dǎo)區(qū)由MBR(Master Boot Record),DPT(Disk Partition Table)和Boot Record ID三部組成。MBR又稱作主引導(dǎo)記錄區(qū),存放系統(tǒng)主引導(dǎo)程序;DPT即主分區(qū)表,記錄了磁盤(pán)的基本分區(qū)信息;Boot Record ID為引導(dǎo)區(qū)標(biāo)志。邏輯分區(qū)的Boot SECTOR由已跳轉(zhuǎn)指令、硬盤(pán)分區(qū)類型的文本字符名、分區(qū)參數(shù)塊、擴(kuò)展的分區(qū)參數(shù)塊和啟動(dòng)指令塊組成。FAT(File Allocation Table,文件分配表)、記錄簇的使用情況。根據(jù)目錄區(qū)中存放目錄項(xiàng),每個(gè)目錄項(xiàng)為32個(gè)字節(jié),記錄一個(gè)文件或目錄的信息(長(zhǎng)文件名例外)。數(shù)據(jù)區(qū)記錄了文件和目錄數(shù)據(jù)區(qū),位于目錄項(xiàng)所占的最后一個(gè)扇區(qū)之后,最真正存放文件數(shù)據(jù)或是子目錄的位置。

文件的讀寫(xiě)實(shí)際上是USB BULK-ONLY Protocol(USB批量傳輸協(xié)議)和文件系統(tǒng)協(xié)議的具體實(shí)現(xiàn),下面以文件系統(tǒng)為FAT16的設(shè)備為例,講述如何讀取一個(gè)位于根目錄下名為“read.txt”的文件和在該目錄下寫(xiě)入一個(gè)名為“write.txt”的文件。

讀取和寫(xiě)入數(shù)據(jù)之前,需要了解的該存儲(chǔ)設(shè)備的全部信息。包括扇區(qū)大小,F(xiàn)AT表長(zhǎng)度,簇的大小等。該部分信息可以通過(guò)讀取主引導(dǎo)區(qū)和邏輯引導(dǎo)區(qū)獲得。

讀取文件的時(shí)候,大致按如下順序,讀根目錄→讀FAT1→讀數(shù)據(jù)區(qū),具體步驟如下。首先找到文件名所在的位置,根目錄下的文件和目錄均在根目錄區(qū),每一個(gè)目錄或文件項(xiàng)占用32個(gè)字節(jié),每次讀取一個(gè)扇區(qū),比較數(shù)據(jù),沒(méi)有則繼續(xù)讀下一個(gè)扇區(qū),直到找到該文件。在這32個(gè)字節(jié)中,第26~27字節(jié)表征了文件開(kāi)始簇號(hào),28~31字節(jié)表征了文件大小。根據(jù)開(kāi)始簇號(hào),搜索FAT區(qū),找到文件簇鏈,依次讀取對(duì)應(yīng)簇,即可完整的得到文件數(shù)據(jù)。

寫(xiě)“write.txt”稍有不同,大致可以按這樣的順序號(hào),寫(xiě)FAT1→寫(xiě)FAT2→寫(xiě)根目錄區(qū)→寫(xiě)數(shù)據(jù)區(qū)。具體來(lái)說(shuō),先讀取FAT區(qū),搜索可用簇,標(biāo)記為文件開(kāi)始簇號(hào),繼續(xù)搜索,找到下一可用簇,并在上一可用簇標(biāo)示(00 00)處寫(xiě)入該簇號(hào),依次下去,直至寫(xiě)完簇鏈,并將最后一個(gè)簇標(biāo)志為文件的結(jié)束簇。這里需要注意的是:FAT區(qū)有兩份,是同樣的內(nèi)容,寫(xiě)完了FAT1,將FAT2相應(yīng)位置寫(xiě)入同樣的數(shù)據(jù)。下一步就是寫(xiě)文件名,在根目標(biāo)區(qū)搜索可用的根目錄項(xiàng),將文件名、時(shí)間、起始扇區(qū)、文件大小等寫(xiě)入該目錄項(xiàng)。這時(shí)優(yōu)盤(pán)上已經(jīng)有了一個(gè)名為“write.txt”的文件,但是文件的內(nèi)部還未寫(xiě)入,下一步根據(jù)文件開(kāi)始簇號(hào),將文件的內(nèi)容寫(xiě)入簇鏈中對(duì)應(yīng)的簇。至此,整個(gè)文件的寫(xiě)入就大功告成。

6 小結(jié)

一個(gè)USB HOST要完成的功能因?yàn)樾枨蟛煌?,所使用的協(xié)議也不盡相同,有的采用中斷傳輸,有的采用同步傳輸。USB主機(jī)技術(shù)在單片機(jī)上的應(yīng)用主要是針對(duì)某一種USB設(shè)備或幾種設(shè)備,因而單片機(jī)上可以只固化某幾種協(xié)議。該技術(shù)的應(yīng)用可以使得小型儀器上輕松接入U(xiǎn)SB外設(shè)、擴(kuò)展系統(tǒng)的功能、提高儀器的使用靈活性。USB主機(jī)技術(shù)在單片機(jī)上的應(yīng)用會(huì)有更廣泛更美好的前景。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉