基于μC/OS-Ⅱ的嵌入式USB控制軟件的實(shí)現(xiàn)
摘要:在此以杭州中天32位RISC CPU CK510為內(nèi)核的HMl521_B芯片上,基于μC/OS-Ⅱ操作系統(tǒng),實(shí)現(xiàn)對(duì)USB設(shè)備的讀寫(xiě)控制。系統(tǒng)采用嵌入式USB主機(jī)控制軟件的分層結(jié)構(gòu),著重闡述FAT32文件系統(tǒng)、USB設(shè)備枚舉和BULK-ONLY傳輸?shù)木唧w實(shí)現(xiàn)過(guò)程。為了節(jié)省硬件資源,放棄了USB協(xié)議中的繁文縟節(jié),抓住協(xié)議核心,設(shè)計(jì)了精簡(jiǎn)高效的驅(qū)動(dòng)程序。考慮到各種U盤(pán)的不同特性,增強(qiáng)了驅(qū)動(dòng)兼容性方面的設(shè)計(jì)。整個(gè)階段都由邏輯分析儀給出實(shí)測(cè)數(shù)據(jù)抓包截圖。
關(guān)鍵詞:嵌入式USB控制;FAT32文件系統(tǒng);USB設(shè)備枚舉;Bulk-only傳輸
0 引言
2010年USB 3.0的正式推出象征USB傳輸極速時(shí)代的到來(lái),但是嵌入式領(lǐng)域由于考慮成本等各方面因素很多仍采用USB 1.1協(xié)議。同時(shí)USB協(xié)議的主體框架并沒(méi)有改變,因此研究USB 1.1協(xié)議在嵌入式系統(tǒng)上的實(shí)現(xiàn)對(duì)于USB 3.0協(xié)議的應(yīng)用也是很好的鋪墊。本文在以杭州中天32位RISC CPU CK510為內(nèi)核的摩托羅拉HM1521_B芯片上,基于μC/OS-Ⅱ操作系統(tǒng),實(shí)現(xiàn)對(duì)USB設(shè)備的讀寫(xiě)控制。由于HM1521_B芯片只支持USB 1.1協(xié)議,所以本文實(shí)現(xiàn)的只是USB 1.1協(xié)議。USB是一種主從結(jié)構(gòu):主機(jī)Host和從機(jī)Device。所有的數(shù)據(jù)傳輸都由Host主動(dòng)發(fā)起,而Device只是被動(dòng)的負(fù)責(zé)應(yīng)答。在USB OTG中,一個(gè)設(shè)備可以在Device和Host之間切換,用以實(shí)現(xiàn)設(shè)備與設(shè)備之間的連接,大大增加了USB的使用范圍。但USBOTG依然沒(méi)有脫離主從關(guān)系,設(shè)備之間必然有一個(gè)作為Host,另一個(gè)作為Device。標(biāo)準(zhǔn)的USB使用4根線(xiàn),分別是5 V電源、差分?jǐn)?shù)據(jù)線(xiàn)負(fù)(D-)、差分?jǐn)?shù)據(jù)線(xiàn)正(D+)、地(GND)。USB的低速和全速模式采用電壓傳輸,高速模式則采用電流傳輸。
1 USB控制軟件的分層結(jié)構(gòu)
按照USB協(xié)議規(guī)范,USB運(yùn)行首先是USB Host通過(guò)D+數(shù)據(jù)線(xiàn)上的電平變化檢測(cè)USB Device的插入和拔出,Host和Device依據(jù)協(xié)議規(guī)定的順序執(zhí)行一系列信息交換,這稱(chēng)為枚舉部分,也是所有USB主機(jī)都必須支持的功能。Host根據(jù)獲得的Device信息判斷該Device屬于哪一類(lèi)USB設(shè)備,并確定下一步選用哪個(gè)特定的程序加以支持。
USB協(xié)議規(guī)定了HID(人機(jī)接口設(shè)備)類(lèi)、Mass Storage(大容量存儲(chǔ)設(shè)備,如U盤(pán))類(lèi)、音頻類(lèi)等各種設(shè)備類(lèi)型。在嵌入式系統(tǒng)中,由于受系統(tǒng)性能和存儲(chǔ)空間的限制,一般只能支持某幾個(gè)類(lèi)型。本文只支持Mass Storage類(lèi)。

圖1是本文實(shí)現(xiàn)的USB Host控制軟件的分層結(jié)構(gòu):應(yīng)用層調(diào)用FAT32文件系統(tǒng)層的函數(shù);文件系統(tǒng)層通過(guò)MassStorage UFI命令與存儲(chǔ)設(shè)備建立聯(lián)系,實(shí)現(xiàn)U盤(pán)上文件的建立和讀寫(xiě)等一系列操作;較底層的是Mass Storage驅(qū)動(dòng)模塊,實(shí)現(xiàn)對(duì)U盤(pán)數(shù)據(jù)的讀寫(xiě)功能。其主要函數(shù)包括:
本文軟件用C語(yǔ)言編程,并依賴(lài)μC/OS-Ⅱ操作系統(tǒng)提供的中斷函數(shù)來(lái)調(diào)度各個(gè)函數(shù)的運(yùn)行。
2 FAT32文件系統(tǒng)的實(shí)現(xiàn)
文件系統(tǒng)的作用是對(duì)文件在介質(zhì)上的存儲(chǔ)進(jìn)行管理,并為操作系統(tǒng)提供操作函數(shù)。若把U盤(pán)看成是以扇區(qū)為單位的邏輯盤(pán)(1扇區(qū)=512 B),當(dāng)一個(gè)U盤(pán)被格式化成FAT32格式的分區(qū)后,它的結(jié)構(gòu)形式圖如圖2所示。

引導(dǎo)扇區(qū)(DOS Boot Record,DBR)存儲(chǔ)了本分區(qū)的BPB(Bios Parameter Block)信息。主引導(dǎo)記錄MBR(Master Boot Record)是物理上第一個(gè)扇區(qū),絕對(duì)扇區(qū)號(hào)是0,它獨(dú)立于任何一個(gè)分區(qū)。MBR的前446B是系統(tǒng)引導(dǎo)程序,接著的64個(gè)字節(jié)是分區(qū)表DPT(Disk Partition Table),較后兩字節(jié)是扇區(qū)有效標(biāo)志55 AA。初始化一個(gè)U盤(pán)的文件系統(tǒng),很重要的一步就是填寫(xiě)引導(dǎo)扇區(qū)的過(guò)程。對(duì)有些關(guān)鍵字節(jié)進(jìn)行分析如下所示:
FAT32文件系統(tǒng)中,F(xiàn)AT表是一個(gè)數(shù)據(jù)表,以簇(cluster)的形式鏈?zhǔn)酱娣。?dāng)一個(gè)文件大于一簇(4個(gè)扇區(qū))時(shí),每簇中存放的數(shù)據(jù)便是文件存放的下一簇地址。直到遇到簇中的數(shù)據(jù)為“FF FF”時(shí),才表示此文件已至尾簇。數(shù)據(jù)內(nèi)容不連續(xù)地存放于數(shù)據(jù)區(qū)內(nèi)。文件系統(tǒng)使用設(shè)備驅(qū)動(dòng)提供的4個(gè)函數(shù)獲取設(shè)備的狀態(tài)信息以及實(shí)現(xiàn)對(duì)設(shè)備的讀寫(xiě)。

3 USB設(shè)備枚舉的實(shí)現(xiàn)
枚舉就是從Deveice讀取信息,通過(guò)設(shè)備描述符設(shè)備告訴Host是什么設(shè)備、如何進(jìn)行通信,Host根據(jù)這些信息來(lái)加載合適的驅(qū)動(dòng)程序。
3.1 枚舉過(guò)程及實(shí)現(xiàn)
USB是一種主從的結(jié)構(gòu),所有傳輸由Host來(lái)發(fā)起。當(dāng)Host發(fā)起一次傳輸時(shí),通常包括3個(gè)包(Packets)的傳輸。Host首先是發(fā)送一個(gè)Token Packet,包含本次傳輸?shù)拿铑?lèi)型(Type)、方向(Direction)、設(shè)備的地址(Device Address)以及端點(diǎn)號(hào)(Endpoint);緊接著發(fā)送數(shù)據(jù)包(Da-ta Packet),包含要求Device返回描述符的命令數(shù)據(jù);較后由Device返回握手信號(hào)包(handshake packet),正確返回(ACK)命令。
USB Host檢測(cè)到有Device插入后,進(jìn)行總線(xiàn)復(fù)位。然后Host使用默認(rèn)地址0讀取設(shè)備描述符。獲取設(shè)備描述符的USB設(shè)備請(qǐng)求命令結(jié)構(gòu)體為:


第1次讀取設(shè)備描述符時(shí),Host首先發(fā)送setup包;之后進(jìn)入主機(jī)讀取數(shù)據(jù)階段,Host發(fā)送in包,Device返回一個(gè)18 B的設(shè)備描述符,可以用一個(gè)結(jié)構(gòu)體將其讀回。較后Host發(fā)送0 B的數(shù)據(jù)包作為狀態(tài)相應(yīng),設(shè)備返回ACK作為應(yīng)答。用邏輯分析儀抓包,3個(gè)包如圖3所示。

第1次讀取設(shè)備描述符后,Host依次進(jìn)行地址分配、第2次讀取設(shè)備描述符、讀取配置描述符、讀取描述符集、設(shè)置配置、讀取配置狀態(tài)和讀取接口狀態(tài),方法和第1次讀取設(shè)備描述符的方法一樣。
3.2 U盤(pán)兼容性
在設(shè)備枚舉階段將會(huì)碰到很多關(guān)于U盤(pán)兼容性的問(wèn)題。
(1)總線(xiàn)復(fù)位時(shí)間。不同型號(hào)的U盤(pán)對(duì)于總線(xiàn)復(fù)位時(shí)間的要求是不同的,比如金士頓1 GB的U盤(pán)需要的復(fù)位時(shí)間至少280 ms。在實(shí)現(xiàn)中為保險(xiǎn)起見(jiàn),給予400 ms的復(fù)位時(shí)間。
(2)有些U盤(pán)的端點(diǎn)0是8 B payload的,大多數(shù)是64 B。對(duì)于8 B payload的U盤(pán),要嚴(yán)格從第1次獲取設(shè)備描述符時(shí)返回的第8字節(jié)獲取payload,否則盡管枚舉過(guò)程仍然能通過(guò),但是后面在分析32字節(jié)的配置描述符時(shí)候會(huì)出現(xiàn)問(wèn)題,沒(méi)有收到完整的配置描述符是分析不出端點(diǎn)1和端點(diǎn)2的地址以及端點(diǎn)payload的。
(3)在枚舉階段獲取字符串描述符的時(shí)候,要進(jìn)行判斷。因?yàn)橛行︰盤(pán)不支持返回字符串描述符,用if語(yǔ)句判斷,如果獲取不到字符串描述符就跳過(guò),不要返回失敗。
4 Bulk-only傳輸?shù)膶?shí)現(xiàn)
枚舉結(jié)束后是對(duì)塊設(shè)備的讀寫(xiě)。Bulk-Only傳輸規(guī)范是USB組織針對(duì)大容量存儲(chǔ)設(shè)備制定的一種塊存儲(chǔ)類(lèi)協(xié)議,它僅僅使用Bulk端點(diǎn)來(lái)傳送數(shù)據(jù)/命令/狀態(tài)。

圖4是數(shù)據(jù)/命令/狀態(tài)在USB總線(xiàn)上的傳輸流程圖。根據(jù)此圖Bulk-only傳輸?shù)臓顟B(tài)可以定義為:空閑、CBW處理、數(shù)據(jù)輸出(從Host向Device傳輸數(shù)據(jù))、數(shù)據(jù)輸入(從Device向Host傳輸數(shù)據(jù))、CSW處理、管道阻塞等6種狀態(tài)。在空閑狀態(tài)下,接收到的數(shù)據(jù)包為CBW包;在數(shù)據(jù)輸出狀態(tài)下,接收到的數(shù)據(jù)包為Host期待寫(xiě)入Device的數(shù)據(jù);在數(shù)據(jù)輸入狀態(tài)下,Host請(qǐng)求從Device讀取數(shù)據(jù),Device將向Host發(fā)送這些數(shù)據(jù)包;在CSW狀態(tài)下,Device封裝并發(fā)送CSW包以向Host返回狀態(tài)信息。因此,任何Bulk-Only事務(wù)均是以Host向Device發(fā)送CBW包并試圖建立相應(yīng)的數(shù)據(jù)傳輸開(kāi)始的;而Device接收到CBW包,進(jìn)行檢查并解釋?zhuān)噲D滿(mǎn)足Host的要求,并通過(guò)CSW向主機(jī)返回狀態(tài)信息。以讀一個(gè)邏輯塊為例,填寫(xiě)一個(gè)CBW包的程序如下所示:
邏輯分析儀抓包結(jié)果如圖5所示。從抓包結(jié)果可以清晰的看出CBW包由31個(gè)字節(jié)組成。

CBW包和CSW包正確收發(fā)后,Bulk-only傳輸就能順利實(shí)現(xiàn)。完成對(duì)扇區(qū)的讀寫(xiě),文件系統(tǒng)的掛載。上層應(yīng)用程序使用文件系統(tǒng)提供的API,操作底層設(shè)備,實(shí)現(xiàn)對(duì)文件的建立、讀寫(xiě)、刪除等操作。經(jīng)測(cè)試本系統(tǒng)支持長(zhǎng)文件名和超過(guò)2 GB容量的USB設(shè)備。本設(shè)計(jì)較終實(shí)現(xiàn)了在不同型號(hào)U盤(pán)上完成對(duì)長(zhǎng)文件名文件的新建、讀寫(xiě)以及刪除操作。
5 結(jié)語(yǔ)
&nb
相關(guān)閱讀:
- ...2012/03/16 17:16·基于μC/OSⅡ的嵌入式以太網(wǎng)控制系統(tǒng)的設(shè)計(jì)
- ...2011/10/14 15:53·基于μC/OS2II的LED顯示屏控制器
- ...2010/03/03 11:59·無(wú)線(xiàn)傳感器網(wǎng)絡(luò)基于μC/OS-II的低功耗改進(jìn)
- ...·圖文詳解汽車(chē)儀表板背后的車(chē)規(guī)級(jí)安全設(shè)計(jì)要求
- ...·使用有安全保障的閃存存儲(chǔ)構(gòu)建安全的汽車(chē)系統(tǒng)
- ...·反向偏置差分線(xiàn)性傳感器的較新進(jìn)展和應(yīng)用
- ...·艾德克斯測(cè)評(píng)某品牌智能插座——待機(jī)功耗篇
- ...·三線(xiàn)電阻式溫度檢測(cè)器測(cè)量系統(tǒng)中勵(lì)磁電流失配的影響(續(xù))
- ...·三線(xiàn)電阻式溫度檢測(cè)器測(cè)量系統(tǒng)中勵(lì)磁電流失配的影響
- ...·RTD測(cè)量系統(tǒng)中勵(lì)磁電流失配的影響
- ...·藍(lán)牙BR/EDR 和 Bluetooth Smart的十大重要區(qū)別
- ...·IoT網(wǎng)關(guān)平臺(tái)與應(yīng)用
- ...·增強(qiáng)版ARM DesignStart:通向定制化SoC的較快、較低風(fēng)險(xiǎn)之路
- ...·實(shí)體零售轉(zhuǎn)型O2O,倉(cāng)儲(chǔ)物流的智能化水平從何提升?
- ...·幾種車(chē)用LED驅(qū)動(dòng)方案的比較
- ...·藍(lán)牙配對(duì)第二篇:密鑰生成方法
- ...·中電瑞華推出領(lǐng)先的無(wú)線(xiàn)數(shù)據(jù)采集解決方案
- ...·安森美半導(dǎo)體配合市場(chǎng)趨勢(shì)的無(wú)線(xiàn)充電方案
- ...·安森美半導(dǎo)體配合汽車(chē)照明設(shè)計(jì)趨勢(shì)的解決方案
- ...· “芯創(chuàng)杯”首屆高校未來(lái)汽車(chē)人機(jī)交互設(shè)計(jì)大賽報(bào)名正式啟動(dòng)
- ...· 探秘第二屆衛(wèi)藍(lán)山鷹“創(chuàng)新·共享”試驗(yàn)技術(shù)論壇!
- ...· “2018中國(guó)半導(dǎo)體生態(tài)鏈大會(huì)”在江蘇省盱眙舉行
- ...· 新主題新規(guī)劃,CITE 2019瞭望智慧未來(lái)
- ...· 從汽車(chē)到工廠,TI毫米波傳感器致力于創(chuàng)造更智能的世界
- ...· 意法半導(dǎo)體(ST)、Cinemo和Valens在CES 2018展上聯(lián)合演示汽車(chē)信息娛樂(lè)解決方案
- ...· 北京集成電路產(chǎn)業(yè)創(chuàng)新發(fā)展高峰論壇即將在京召開(kāi)
- ...· 三菱電機(jī)強(qiáng)勢(shì)出擊PCIM亞洲2017展
- ...· GPGPU國(guó)產(chǎn)替代:中國(guó)芯片產(chǎn)業(yè)的空白地帶
- ...· 物聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)中Wi-Fi連接的四個(gè)關(guān)鍵因素
- ...· 第三屆中國(guó)MEMS智能傳感器產(chǎn)業(yè)發(fā)展大會(huì)即將于蚌埠拉開(kāi)帷幕
- ...· IAIC專(zhuān)項(xiàng)賽演繹“中國(guó)芯“應(yīng)用創(chuàng)新,信息安全高峰論壇亮劍海寧
- ...· 智能控制有源鉗位反激
- ...· 解讀5G毫米波OTA 測(cè)試技術(shù)
- ...· 多個(gè)市場(chǎng)高速增長(zhǎng)推動(dòng)Molex加強(qiáng)汽車(chē)領(lǐng)域的發(fā)展
- ...· 中國(guó)綠色制造聯(lián)盟成立大會(huì)召開(kāi)在即 政產(chǎn)學(xué)研用共探綠色發(fā)展新模式
- ...· Efinix® 全力驅(qū)動(dòng)AI邊緣計(jì)算,成功推出Trion™ T20 FPGA樣品, 同時(shí)將產(chǎn)品擴(kuò)展到二十萬(wàn)邏輯單元的T200 FPGA
- ...· 英飛凌亮相進(jìn)博會(huì),引領(lǐng)智慧新生活
- ...· 三電產(chǎn)品開(kāi)發(fā)及測(cè)試研討會(huì)北汽新能源專(zhuān)場(chǎng)成功舉行
- ...· Manz亞智科技跨入半導(dǎo)體領(lǐng)域 為面板級(jí)扇出型封裝提供化學(xué)濕制程、涂布及激光應(yīng)用等生產(chǎn)設(shè)備解決方案
- ...· 中電瑞華BITRODE動(dòng)力電池測(cè)試系統(tǒng)順利交付北汽新能源
- ...· 中電瑞華FTF系列電池測(cè)試系統(tǒng)中標(biāo)北京新能源汽車(chē)股份有限公司
- ...· 中電瑞華大功率高壓能源反饋式負(fù)載系統(tǒng)成功交付中電熊貓
- ...· 中電瑞華國(guó)際在電動(dòng)汽車(chē)及關(guān)鍵部件測(cè)評(píng)研討會(huì)上演繹先進(jìn)測(cè)評(píng)技術(shù)
- ...· 數(shù)據(jù)采集終端系統(tǒng)設(shè)備
- ...· 簡(jiǎn)儀科技踏上新征程
- ...· 易靈思® 宣布 AEC-Q100 資質(zhì)認(rèn)證和汽車(chē)系列產(chǎn)品計(jì)劃
- ...· 易靈思® 宣布擴(kuò)充高性能 鈦金系列™ FPGA 產(chǎn)品 鈦金系列產(chǎn)品擴(kuò)充至包含 1M 邏輯單元的 FPGA
- ...· 易靈思® 宣布Trion® Titanium 在臺(tái)積電 (TSMC) 16納米工藝節(jié)點(diǎn)流片
- ...· TI杯2019年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽頒獎(jiǎng)典禮在京舉行
- ...· BlackBerry QNX虛擬機(jī)獲得全球首個(gè)汽車(chē)安全完整性等級(jí)(ASIL) ‘D’認(rèn)證
- ...· 威馬汽車(chē)選擇BlackBerry助力下一代汽車(chē)








