當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]在嵌入式系統(tǒng)中實(shí)現(xiàn)對(duì)U盤的操作

摘要:主要介紹在嵌入式系統(tǒng)中利用SL811HS對(duì)U盤操作的實(shí)現(xiàn)方法;簡(jiǎn)要介紹USB設(shè)備中的海量存儲(chǔ)類、SL811HS的芯片特點(diǎn)及FAT文件系統(tǒng)。

關(guān)鍵詞:USB U盤 FAT SL811HS

引 言

  USB(通用串行總線)用于將適用USB的外圍設(shè)備(device)連接到主機(jī)(host),實(shí)現(xiàn)二者之間數(shù)據(jù)傳輸?shù)耐獠靠偩€結(jié)構(gòu);是一種快速、靈活的總線接口。它最大的特點(diǎn)是易于使用,主要是用在中速和低速的外設(shè)。

  隨著USB規(guī)范的完善和成熟,USB外設(shè)的種類不斷豐富,應(yīng)用領(lǐng)域也不斷擴(kuò)大。在傳統(tǒng)的應(yīng)用中,主要是PC扮演著主機(jī)的角色。根據(jù)USB的規(guī)范,可以看到在USB的拓樸結(jié)構(gòu)中居于核心地位的是主機(jī),每一次的數(shù)據(jù)傳輸都必須由主機(jī)發(fā)起和控制。但是隨著嵌入式產(chǎn)品應(yīng)用領(lǐng)域的日益增長(zhǎng),USB外設(shè)的應(yīng)用范圍也隨之?dāng)U大,為此在嵌入式系統(tǒng)中實(shí)現(xiàn)對(duì)USB外設(shè)控制也變得日益迫切。

  本文針對(duì)USB外設(shè)中的U盤,說(shuō)明如何在嵌入式系統(tǒng)中利用SL811HS實(shí)現(xiàn)對(duì)其的操作。

1 海量存儲(chǔ)類

  USB設(shè)備分為五個(gè)大類,即顯示器(monitors)、通信設(shè)備(communications devices)、音頻設(shè)備(audio)、人機(jī)輸入(human input)和海量存儲(chǔ)(mass storage)。

  通常所用的U盤、移動(dòng)硬盤均屬于海量存儲(chǔ)類。

  海量存儲(chǔ)類的規(guī)范中包括四個(gè)獨(dú)立的子規(guī)范,即CBI Transprot、Bulk-Only Transport、ATA Command Block、UFI Command Specification。前兩個(gè)協(xié)議定義了數(shù)據(jù)/命令/狀態(tài)在USB總線上的傳輸方法,Bulk-Only傳輸協(xié)議僅僅使用Bulk端點(diǎn)傳送數(shù)據(jù)/命令/狀態(tài),CBI傳輸協(xié)議則使用Control/Bulk/Interrupt三種類型的端點(diǎn)進(jìn)行數(shù)據(jù)/命令/狀態(tài)的傳送。后兩個(gè)協(xié)議定義了存儲(chǔ)介質(zhì)的操作命令,ATA協(xié)議用于硬盤,UFI協(xié)議則針對(duì)USB移動(dòng)存儲(chǔ)。

  本設(shè)計(jì)中所使用的U盤遵循Bulk-Only傳輸協(xié)議和UFI命令規(guī)范。

2 實(shí)現(xiàn)方法

2.1 硬件設(shè)計(jì)

  本設(shè)計(jì)采用SL811HS芯片完成對(duì)U盤的操作。SL811HS是Cypress公司推出的具有主/從兩種工作模式的USB控制器,遵循USB1.1規(guī)范;可自動(dòng)檢測(cè)總線速率,支持全速12Mbps和低速1.5Mbps設(shè)備;具有8位雙向的數(shù)據(jù)總線,易與單片機(jī)連接;片內(nèi)256字節(jié)的SRAM(其中16字節(jié)用于工作寄存器),用于數(shù)據(jù)傳輸;可自動(dòng)產(chǎn)生SOF和CRC5/16,簡(jiǎn)化軟件工作量;片內(nèi)具有根Hub;支持掛起/喚醒工作模式,減少功耗;支持自動(dòng)加1功能,減少數(shù)據(jù)讀寫(xiě)周期;3.3V工作電源,接口可承受5V的工作電壓,可與多種規(guī)格的單片機(jī)連接。

  單片機(jī)與SL811HS接口的原理如圖1所示。
        
2.2 軟件設(shè)計(jì)

  通過(guò)USB主控芯片對(duì)U盤操作的主要工作是在軟件方面,它需要對(duì)眾多規(guī)范、協(xié)議透徹的理解。下面主要通過(guò)軟件的工作流程來(lái)說(shuō)明設(shè)計(jì)過(guò)程。

2.2.1 SL811HS初始化

  SL811HS共有15個(gè)配置寄存器,其中0~4、8~C是USB-A、USB-B的工作配置寄存器,5、F是控制寄存器,6是中斷使能寄存器,D為狀態(tài)寄存器,E、F為SOF計(jì)數(shù)寄存器。各個(gè)寄存器的具體功能如表1所列。
       
  在SL811HS上電開(kāi)始工作后,首先對(duì)USB總線復(fù)位(置寄存器5的位3為1,延時(shí)30ms后清零),然后使能設(shè)備檢測(cè)中斷(置寄存器6為0x61)。

2.2.2 設(shè)備檢測(cè)

(1)軟件協(xié)議
  在設(shè)備檢測(cè)階段,主要通過(guò)setup結(jié)構(gòu)的數(shù)據(jù)包(8字節(jié)長(zhǎng))向USB設(shè)備的控制端點(diǎn)0(默認(rèn)端點(diǎn))發(fā)送命令。數(shù)據(jù)包結(jié)構(gòu)如表2所列。
 
(2)實(shí)現(xiàn)過(guò)程
  當(dāng)U盤插入U(xiǎn)SB插座時(shí),SL811HS產(chǎn)生中斷,通過(guò)讀取中斷狀態(tài)寄存器可判斷中斷類型。當(dāng)中斷類型表示為檢測(cè)到設(shè)備插入時(shí),就可對(duì)USB設(shè)備即U盤進(jìn)行配置了。此時(shí)還需使能SL811HS的1ms SOF(配置SL811HS的寄存器E=0xE0、F=0xAE,然后置位寄存器5的位0和寄存器0的位5),以便進(jìn)行數(shù)據(jù)幀的同步。

  在U盤未配置之前,其默認(rèn)地址和默認(rèn)控制端點(diǎn)均為0。利用setup數(shù)據(jù)包對(duì)U盤進(jìn)行配置時(shí),須將U盤的地址寫(xiě)入SL811HS的寄存器4,將數(shù)據(jù)包的類型和U盤的控制端點(diǎn)寫(xiě)入SL811HS的寄存器3。

  以下為對(duì)U盤配置過(guò)程的主要步驟。

① 設(shè)備描述符(GetDeviceDescriptor)。請(qǐng)求設(shè)備描述符的setup數(shù)據(jù)包為
通過(guò)讀取設(shè)備描述符,可獲得設(shè)備的子類(通用海量存儲(chǔ)類)、端點(diǎn)0的最大包長(zhǎng)(一般為8字節(jié))。
          
② 讀取配置描述符(GetConfigDescriptor)。
對(duì)于請(qǐng)求配置描述符,可以先進(jìn)行首次請(qǐng)求,要求數(shù)據(jù)包長(zhǎng)為9(一個(gè)配置描述符的長(zhǎng)度)。數(shù)據(jù)包內(nèi)容為
          
接收到設(shè)備返回的數(shù)據(jù),獲得此描述符的總長(zhǎng),然后再發(fā)二次請(qǐng)求,獲得全部描述符數(shù)據(jù)。數(shù)據(jù)包內(nèi)容為
           
此時(shí)返回的數(shù)據(jù)包括了設(shè)備配置、接口、端點(diǎn)的全部描述信息。

  此部分的內(nèi)容包括Configuration Descriptor、Interface Descriptor和所有端點(diǎn)的Endpoint Descriptor。在配置描述符中,可獲得設(shè)備的屬性(總線供電)以及最大功耗;在接口描述符,可獲得設(shè)備的接口數(shù)量(只有一個(gè)數(shù)據(jù)接口)、接口類型(海量存儲(chǔ)類)、接口子類代碼(UFI)、接口通信協(xié)議(Bulk-Only);在端點(diǎn)描述符,可獲得設(shè)備的In和Out端點(diǎn)號(hào)及此端點(diǎn)的最大數(shù)據(jù)包長(zhǎng)。

③ 設(shè)置設(shè)備地址(SetAddress)。設(shè)置設(shè)備地址的setup數(shù)據(jù)包為
              
  設(shè)備地址為02或03(01一般用來(lái)表示設(shè)備為Hub)。

  到此,U盤的配置過(guò)程完成。此后的主機(jī)與USB設(shè)備之間的通信必須使用設(shè)置的地址,默認(rèn)地址0不再有效,傳輸端點(diǎn)則為讀取的配置描述符中所定義的端點(diǎn)號(hào)。

  在配置過(guò)程中各類數(shù)據(jù)內(nèi)容的正確性,可借助BusHound軟件工具捕捉PC機(jī)與U盤之間的活動(dòng)數(shù)據(jù),然后將自己獲得的數(shù)據(jù)包內(nèi)容與之相比較。

2.2.3 U盤文件系統(tǒng)識(shí)別

(1)軟件協(xié)議
  在與U盤之間進(jìn)行大量數(shù)據(jù)傳輸時(shí),需要利用描述符提供的In、Out端點(diǎn)進(jìn)行數(shù)據(jù)傳送,并遵循Bulk-Only傳輸協(xié)議。

  根據(jù)USB的協(xié)議規(guī)范,所有的傳輸都須由主機(jī)啟動(dòng)。即主機(jī)首先向設(shè)備的OUT端點(diǎn)發(fā)送一命令(CBW數(shù)據(jù)包),請(qǐng)求傳輸,格式如表3所列。
        
  在數(shù)據(jù)包中規(guī)定了下一步的數(shù)據(jù)傳輸方向。若為設(shè)備到主機(jī),則當(dāng)CBW發(fā)送成功后,從設(shè)備的In端點(diǎn)讀取CBW中規(guī)定長(zhǎng)度的數(shù)據(jù);若為主機(jī)到設(shè)備,則當(dāng)CBW發(fā)送成功后,向設(shè)備的Out端點(diǎn)發(fā)送CBW中規(guī)定長(zhǎng)度的數(shù)據(jù)。

  當(dāng)主機(jī)與設(shè)備之間的數(shù)據(jù)傳送完畢后,主機(jī)還需從設(shè)備的In端點(diǎn)讀取傳送狀態(tài),主機(jī)根據(jù)接收的CSW數(shù)據(jù)包即可判斷出通信是否正常。若返回的結(jié)果有錯(cuò)誤,還須進(jìn)行相應(yīng)的出錯(cuò)處理。CSW數(shù)據(jù)包結(jié)構(gòu)如表4所列。
        
(2)實(shí)現(xiàn)過(guò)程
  CPU向U盤發(fā)送CBW數(shù)據(jù)包,其中的命令塊為UFI規(guī)范所定義的Read(10)命令。讀取0柱0道1扇區(qū)共512字節(jié)的MBR數(shù)據(jù),前446字節(jié)為主引導(dǎo)記錄,接著的64字節(jié)為DPT(Disk Partition Table盤分區(qū)表),最后的2字節(jié)“55 AA”為有效結(jié)束標(biāo)志。

其中的DPT部分包含4個(gè)分區(qū)的數(shù)據(jù)結(jié)構(gòu),每個(gè)結(jié)構(gòu)占16字節(jié),具體定義如下:
typedef struct{
uchar BootFlag; //活動(dòng)標(biāo)志,80h為活動(dòng)分區(qū),0為非活動(dòng)
//分區(qū)
CHS StartCHS; //分區(qū)開(kāi)始的柱面、磁頭、扇區(qū)
uchar SystemID; //分區(qū)類型
CHS EndChs; //分區(qū)結(jié)束的柱面、磁頭、扇區(qū)
ulong RelativeSectors; //分區(qū)起始扇區(qū)數(shù)
ulong TotalSectors; //分區(qū)總扇區(qū)數(shù)
}PartitionTable;

  從第一個(gè)分區(qū)數(shù)據(jù)結(jié)構(gòu)的分區(qū)起始扇區(qū)數(shù)(relative sectors)的位置讀取512字節(jié),為DBR(系統(tǒng)引導(dǎo)記錄),包括一個(gè)引導(dǎo)程序和BPB(本分區(qū)的參數(shù)記錄表)。BPB參數(shù)塊記錄本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、介質(zhì)描述符、根目錄項(xiàng)數(shù)、FAT個(gè)數(shù)、保留扇區(qū)數(shù)、分配單元的大小等重要參數(shù)。

  根據(jù)保留扇區(qū)的數(shù)目可知FAT表的位置(RelativeSectors+保留扇區(qū)數(shù))。FAT表是文件組織結(jié)構(gòu)的主要組成部分,反映了磁盤上所有簇的使用情況。在給一個(gè)文件分配空間時(shí),總先掃描FAT,找到第一個(gè)可用簇,將該空間分配給文件,并將該簇的簇號(hào)填到目錄的相應(yīng)段內(nèi);若文件大于一個(gè)簇,則在FAT表中此文件的首簇號(hào)位置填入下一個(gè)可用簇號(hào),直到最后一個(gè)簇填入“FFFF”,即形成了簇號(hào)鏈。對(duì)于FAT12文件系統(tǒng),簇號(hào)用12位表示;FAT16文件系統(tǒng)的簇號(hào)用16位表示;FAT32文件系統(tǒng)的簇號(hào)用32位表示。

  根據(jù)FAT的個(gè)數(shù)以及每個(gè)FAT表占用的扇區(qū)數(shù),即可推算出文件目錄表(FDT)的位置(FAT表位置+FAT表個(gè)數(shù)*FAT表所占扇區(qū)數(shù))。FDT是文件組織結(jié)構(gòu)的又一重要組成部分。目錄可看作是一種特殊的文件,數(shù)據(jù)結(jié)構(gòu)為32字節(jié),包括文件名、擴(kuò)展名、文件屬性、時(shí)間、日期、開(kāi)始簇號(hào)、文件長(zhǎng)度等。
根據(jù)根目錄中的目錄項(xiàng)數(shù)即可計(jì)算出數(shù)據(jù)區(qū)的起始扇區(qū)位置。這一部分占用了磁盤上的大部分空間,用于存儲(chǔ)各類文件的數(shù)據(jù)。

  對(duì)于FAT32文件系統(tǒng)來(lái)說(shuō),它的根目錄位置不單獨(dú)列出,而是等同于文件結(jié)構(gòu),保存在數(shù)據(jù)區(qū)中。這樣就沒(méi)有了目錄項(xiàng)的限制,不夠用的時(shí)候增加簇鏈,分配空簇即可。

  對(duì)于以上各類數(shù)據(jù)讀取內(nèi)容的正確判斷,可將U盤插入PC機(jī),借助WinHex工具,讀取磁盤上相應(yīng)位置的數(shù)據(jù)內(nèi)容,與之相比較。

  FAT16文件格式的U盤空間分配如圖2所示。
         
2.2.4 文件操作

  因?yàn)閁盤的容量不是特別大,所以基本上都使用FAT16文件系統(tǒng)。可以根據(jù)FAT16系統(tǒng)的磁盤特性進(jìn)行各種操作。

① 創(chuàng)建目錄。在根目錄區(qū)或指定的子目錄區(qū)中填加新目錄的數(shù)據(jù)結(jié)構(gòu)。

② 刪除目錄。在根目錄區(qū)或指定的子目錄區(qū)中找到所需刪除的目錄,并置相應(yīng)標(biāo)志。

③ 寫(xiě)文件。當(dāng)寫(xiě)一新文件時(shí),需在FAT表中查找未使用的簇,并將該簇號(hào)寫(xiě)入文件對(duì)應(yīng)目錄數(shù)據(jù)結(jié)構(gòu)中的起始簇號(hào)位置。當(dāng)此文件長(zhǎng)度大于一簇時(shí),還需在FAT表中對(duì)應(yīng)的起始簇號(hào)位置填入下一可用簇的簇號(hào),直到文件的最后一簇(FAT表中的相應(yīng)位置填FFFF)。
若磁盤有備份FAT,還需在備份FAT表的相應(yīng)位置填入正確的內(nèi)容。

④ 刪文件。刪除文件時(shí),除了將該文件對(duì)應(yīng)的目錄數(shù)據(jù)結(jié)構(gòu)置相應(yīng)標(biāo)志外,還要修改FAT表及備份FAT表。將此文件使用的簇號(hào)位置清0,表示此簇當(dāng)前未被使用。

2.2.5 Bulk傳輸流程
  使用U盤的Bulk端點(diǎn)進(jìn)行數(shù)據(jù)傳送,Bulk傳輸分為Bulk-In和Bulk-Out。其中Bulk-In指的是主機(jī)向外圍設(shè)備請(qǐng)求數(shù)據(jù),由外圍設(shè)備向主機(jī)發(fā)送數(shù)據(jù)。Bulk-Out的傳輸方向與Bulk-In相反,由主機(jī)向外圍設(shè)備發(fā)送數(shù)據(jù)。

  根據(jù)UFI規(guī)范的定義,每次讀寫(xiě)操作都以邏輯塊(扇區(qū))為單位。一般U盤的一個(gè)扇區(qū)為512字節(jié),而B(niǎo)ulk端點(diǎn)的最大包長(zhǎng)為64字節(jié),即一個(gè)扇區(qū)的讀寫(xiě)操作需要8個(gè)循環(huán)才能完成。

(1)Bulk-In流程
  Bulk-In流程如圖3所示。
            
  在接收設(shè)備數(shù)據(jù)的循環(huán)中,因?yàn)橐粋€(gè)扇區(qū)的操作需要8次才能完成,因此要注意每接收一個(gè)數(shù)據(jù)包,都要將SL811HS寄存器0中的數(shù)據(jù)位(位6)變換一次。data1和data0交替使用。

(2)Bulk-Out流程
  與Bulk-In流程差不多,只是在CBW數(shù)據(jù)包中,注明了下一階段的傳輸方向?yàn)橹鳈C(jī)到外圍設(shè)備。在CBW發(fā)送ACK之后,向設(shè)備的Out端點(diǎn)發(fā)送PID-OUT數(shù)據(jù)包,使得設(shè)備接收所要傳送的數(shù)據(jù)。在數(shù)據(jù)傳輸完畢后,仍要向設(shè)備的In端點(diǎn)發(fā)送PID-IN數(shù)據(jù)包,讀取設(shè)備的CSW數(shù)據(jù)包,判斷傳輸結(jié)果,并進(jìn)行相應(yīng)處理。

  在發(fā)送數(shù)據(jù)的循環(huán)中,同樣要注意data0和data1的交替使用問(wèn)題。

結(jié) 語(yǔ)
  目前開(kāi)發(fā)的在嵌入式系統(tǒng)中利用USB主控芯片實(shí)現(xiàn)與U盤的操作技術(shù),已應(yīng)用在我們自主開(kāi)發(fā)研制的消防產(chǎn)品中。實(shí)現(xiàn)了消防控制器與U盤之間的各類信息的傳輸,為數(shù)據(jù)分析提供了有利的手段。在越來(lái)越多的消費(fèi)類市場(chǎng),這一技術(shù)必將有更為廣闊的應(yīng)用前景。

本站聲明: 本文章由作者或相關(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)閉