當(dāng)前位置:首頁 > 智能硬件 > 智能硬件
[導(dǎo)讀]闡述一個基于ARM7的U盤設(shè)計;詳細(xì)描述基于LPC2132、USB接口芯片PDIUSBDl2和Flash ROM的硬件系統(tǒng)設(shè)計。軟件設(shè)計主要包括D12驅(qū)動、Mass Storage類協(xié)議實(shí)現(xiàn)和Flash存儲器的讀寫控制等。

摘要 闡述一個基于ARM7的U盤設(shè)計;詳細(xì)描述基于LPC2132、USB接口芯片PDIUSBDl2和Flash ROM的硬件系統(tǒng)設(shè)計。軟件設(shè)計主要包括D12驅(qū)動、Mass Storage類協(xié)議實(shí)現(xiàn)和Flash存儲器的讀寫控制等。
關(guān)鍵詞 LPC21 32 USB Mass Storage類協(xié)議 U盤


引 言
   
USB移動存儲技術(shù)(U盤)把USB接口技術(shù)與Flash存儲器技術(shù)結(jié)合在一起,構(gòu)成了一種快速、大容量、方便的新型數(shù)據(jù)交換系統(tǒng),主要構(gòu)成有主控制器(MCU)、USB接口芯片和F1ash存儲器。主控制器(MCU)是系統(tǒng)的核心,負(fù)責(zé)控制各種外圍設(shè)備、實(shí)現(xiàn)各種算法、協(xié)調(diào)與主機(jī)通信;USB接口芯片負(fù)責(zé)USB通信;Flash(閃爍存儲器)用來存儲數(shù)據(jù),它決定了U盤的容量。

1 硬件系統(tǒng)設(shè)計
    U盤設(shè)計結(jié)構(gòu)框圖如圖1所示。使用Philips公司的ARM7芯片LPC2132,控制Philips的USBl.1接口芯片PDI-USBDl2,處理PMC公司的128 KB串行F1ash存儲器作為數(shù)據(jù)存儲設(shè)備實(shí)現(xiàn)U盤。

(1)ARM處理器
    LPC2132是基于一個支持實(shí)時仿真和跟蹤的16/32位ARM7TDMI-S CPU,并帶有64 KB嵌入的高速Flash存儲器。LPC2132的實(shí)時仿真和跟蹤功能方便了代碼的調(diào)試,降低了開發(fā)成本。
(2) PDIUSB012
    PDIUSBDl2(簡稱為“D12”)是一款性價比很高的USB器件;通常用于微控制器系統(tǒng)中實(shí)現(xiàn)與微控制器進(jìn)行通信的高速通用并行接口;支持本地的DMA傳輸。PDIUSBDl2所具有的低掛起功耗連同LazyClock輸出可以滿足使用ACPI、OnNOW和USB電源管理的要求。低功耗可以應(yīng)用于使用USB總線供電的外設(shè)。
(3)Flash存儲器
    存儲器選用PMC公司的Pm25LV010。適合低功耗和低電壓下工作的應(yīng)用場合;具有完備的數(shù)據(jù)保護(hù)功能。通過設(shè)置芯片的狀態(tài)寄存器,可以將存儲空間的高1/4、高1/2或整片寫保護(hù)。寫使能和寫禁止指令進(jìn)一步保護(hù)數(shù)據(jù)。另外還提供WP引腳用于硬件數(shù)據(jù)保護(hù),以防止對狀態(tài)寄存器的意外修改。
    U盤電路原理如圖2所示。

2 軟件設(shè)計
   
軟件設(shè)計主要包括D12驅(qū)動、Mass Storage類協(xié)議和Flash存儲器的讀/寫控制。
2.1 D12驅(qū)動的實(shí)現(xiàn)
    在USB設(shè)備插入主機(jī)之前,主機(jī)對這個USB設(shè)備的情況一無所知,無法建立起通信;但USB協(xié)議規(guī)定了一些最基本的準(zhǔn)則,如每個設(shè)備的端點(diǎn)0都是可用的,屬于控制端點(diǎn)。有了這個基本的溝通途徑,主機(jī)就開始通過端點(diǎn)0向設(shè)備提出一些問題,這些問題是有關(guān)設(shè)備基本情況的。這些基本情況可以反映usB設(shè)備所屬的類別及子類,反映配置情況、接口情況和端點(diǎn)情況;一旦得知了這些信息,主機(jī)就大體了解了這個設(shè)備是個什么樣的設(shè)備,按照USB協(xié)議中的相應(yīng)規(guī)定,就逐步建立起了一條介于設(shè)備之間的高速數(shù)據(jù)通道,用于數(shù)據(jù)的傳輸。主機(jī)向設(shè)備提出的這些問題實(shí)際上就是USB協(xié)議中規(guī)定的各種標(biāo)準(zhǔn)請求,設(shè)備必須對這些問題進(jìn)行回答;而回答的方式就是向主機(jī)傳送相應(yīng)的描述符,即設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符。
    為了使軟件可移植性強(qiáng)、易維護(hù),采用分層的方法編寫PDIUSBDl2的驅(qū)動程序。USB驅(qū)動程序分層結(jié)構(gòu)如表1所列。

    ①硬件提取層(D12HAL.c)包含最底層的函數(shù)。
    ②D12命令接口(D12CI.c)實(shí)現(xiàn)PDIUSBDl2的命令接口以簡化器件的編程。該層的甬?dāng)?shù)及其功能如下:
    ◇讀取芯片ID號,uintl6 D12_ReadChipID(void);
    ◇沒置地址/使能,void D12_SetAddressEnable(UINT8bAddress,UINT8 bEnable);
    ◇設(shè)置端點(diǎn)使能,void D12_SetEndpointEnable(UINT8 bEnablc);
    ◇設(shè)置模式,void D12_SetMode(uint8 bConfig,uint8bClkDiv)。
    ③協(xié)議層(Chap_9.c)處理標(biāo)準(zhǔn)的USB設(shè)備請求,以及特殊的廠商請求,如DMA等。USB主機(jī)通過標(biāo)準(zhǔn)USB設(shè)備請求,可設(shè)定和獲取USB設(shè)備的有關(guān)信息,完成USB設(shè)備的枚舉。
    所有的請求都是通過端點(diǎn)0接收和發(fā)送SETUP包來完成的。接收主機(jī)SETUP包的函數(shù)為ep0_rxdone(),所有SETUP包都由函數(shù)control_handler()來處理,發(fā)送SETUP包的函數(shù)為ep0_txdone()。SETUP包的接收和發(fā)送通過控制傳輸結(jié)構(gòu)仝局變量CONTROL_XFER ControlData來控制,它實(shí)現(xiàn)了以上3個函數(shù)之間的通信。


    上述幾個函數(shù)及ControlData變量之問的關(guān)系如圖3所示。

    ④應(yīng)用層(D12Driver.c)實(shí)現(xiàn)PDIUSBD12的所有功能。USB設(shè)備控制驅(qū)動、USB接口控制驅(qū)動和協(xié)議層都在應(yīng)用層的控制之中。應(yīng)用層要實(shí)現(xiàn)的仟務(wù)包括:
    ◆初始化PDIUSBDl2。包括初始化PDIUSBD12的硬件連接、復(fù)位PDIUSBDl2、配置PDIUSBD12的中斷服務(wù)程序地址、初始化應(yīng)用層相關(guān)的全局變量。
    ◆編寫PDIUSBD12中斷服務(wù)程序。PDIUSBD12幾乎所有功能都是通過PDIUSBDl2中斷服務(wù)程序來完成的,因此中斷服務(wù)程序是應(yīng)用層的核心部分,也是本驅(qū)動程序的核心部分。它要完成以下任務(wù):
    ◇控制端點(diǎn)數(shù)據(jù)接收與發(fā)送中斷服務(wù)程序,負(fù)責(zé)處理控制傳輸?shù)挠嘘P(guān)工作;
    ◇端點(diǎn)1和端點(diǎn)2數(shù)據(jù)接收與發(fā)送中斷服務(wù)程序;
    ◇USB總線掛起、復(fù)位、DMA結(jié)束中斷服務(wù)程序。
    ◆用戶讀寫端點(diǎn)1和端點(diǎn)2的API函數(shù)。
    ◆傳輸控制處理任務(wù)。該任務(wù)用于處理枚舉、標(biāo)準(zhǔn)任務(wù)請求、廠商請求等傳輸控制。
2.2 Mass Storage類協(xié)議的實(shí)現(xiàn)
    完整的Mass Storage類協(xié)議需要實(shí)現(xiàn)如下兒部分:在枚舉時,提供Mass Storage類協(xié)議描述符;實(shí)現(xiàn)BulkOnly批量傳輸協(xié)議;實(shí)現(xiàn)SCSI命令集。
2.2.1 Mass Storage類協(xié)議描述符

    USB采用設(shè)備類的方式對設(shè)備進(jìn)行管理。要讓主機(jī)識別設(shè)備,設(shè)備就必須提供正確的描述符:
    ◇設(shè)備描述符;
    ◇配置描述符;
    ◇接口描述符;
    ◇端點(diǎn)描述符。
2.2.2 Bulk-Only批量傳輸協(xié)議實(shí)現(xiàn)
    Bulk-Only協(xié)議包括兩部分:類特定請求命令和Bulk-Only傳輸。
(1)類特定請求命令
    ①批量傳輸?shù)拇笕萘看鎯ζ鲝?fù)位。要發(fā)送批量傳輸?shù)拇笕萘看鎯ζ鲝?fù)位請求,主機(jī)將在默認(rèn)管道發(fā)送一個設(shè)備請求:
    ◇bmRequestType——類、接口、主機(jī)到設(shè)備;
    ◇bRequest字段設(shè)置為255(FFh);
    ◇wValue字段設(shè)置為0;
    ◇wIndex字段設(shè)置為接口編號;
    ◇wLength字段設(shè)置為O。
    批量傳輸?shù)拇笕萘看鎯ζ鲝?fù)位請求如下:

   
    ②獲取最大邏輯單元號(專用類清求)。Get MaxLUN設(shè)備請求用于確定設(shè)備支持的邏輯單元編號。設(shè)備的邏輯單元編號可以從LUN為O到LUN的最大值15(Fh)。
    要發(fā)送Get Max LUN設(shè)備請求,主機(jī)應(yīng)在以下默認(rèn)管道發(fā)送一個設(shè)備請求:
    ◇bmRequestType——類、接口、設(shè)備到主機(jī);
    ◇bRequest范圍設(shè)置為254(FEh);
    ◇wValue字段設(shè)置為0;
    ◇wIndex字段設(shè)置為接口編號;
    ◇wLength字段設(shè)置為1。
   獲得最大邏輯單元字如下:

   
    設(shè)備應(yīng)返回1字節(jié)包含設(shè)備支持的最大邏輯單元數(shù)。例如,如果設(shè)備支持4個LUN,則LUN的編號應(yīng)從0~3,則返回值為3。如果設(shè)備沒有相關(guān)的LUN,則返回值為0。主機(jī)不應(yīng)向一個不存在的LUN發(fā)送命令塊包(CBW)。
    不支持多LUN的設(shè)備會返回STALL。
(2)Bulk—Only傳輸
    Bulk—Only傳輸協(xié)議沒有使用中斷和控制端點(diǎn),僅使用Bulk批量端點(diǎn)來進(jìn)行命令塊、數(shù)據(jù)和命令塊狀態(tài)的傳輸。控制端點(diǎn)(默認(rèn))管道僅用來請求批量端點(diǎn)上的STALL停止的狀態(tài)和執(zhí)行類特定請求命令。
    Bulk—Only傳輸?shù)牧鞒倘鐖D4所示。

2.2.3 SCSI命令集實(shí)現(xiàn)
    SCSI命令集是SCSI設(shè)備通用命令集。SCSI有3種字長的命令:6字節(jié)、10字節(jié)和12字節(jié)。Microsoft Win—dows環(huán)境下支持12字節(jié)長的命令。圖5給出了通用的UFI命令塊的格式。請注意,這些字節(jié)就是CBW封包中CBWCB字段的內(nèi)容。

    對不同的命令只需根據(jù)SCSI命令集白皮書作出適當(dāng)?shù)幕貞?yīng)。Pm25LV010的最小擦除單位為扇區(qū)(4 KB),故在程序中定義一個4 KB的緩沖區(qū)Cache_STRUC Flash-Cache,把每次收到的數(shù)據(jù)放入緩沖區(qū)中,到緩沖區(qū)滿數(shù)據(jù)接收完畢時再將其寫入Flash存儲器中,流程如圖6所示。

2.3 Flash存儲器的讀寫控制
    Flash存儲器讀寫程序由SPI控制和Pm25LV010控制兩部分組成。
    Pm25LV010 Flash存儲器采用的是SPI串行接口,其SPI有兩種工作模式——模式O和模式3。SPI.c完成SPI底層操作,給Pm25LV010控制程序提供一個讀寫1字節(jié)數(shù)據(jù)函數(shù)。該函數(shù)使用SPI模式0。
    Pm25LV010控制程序完成Pm25LV010器件的所有操作,其向高層提供的函數(shù)及功能如表2所列。

    Pm25LV010的最小擦除單位是扇區(qū)(每扇區(qū)4 KB),在改寫扇區(qū)內(nèi)任意一字節(jié)數(shù)據(jù)時都需要將該扇區(qū)擦除。針對這種情況,在程序中定義了一個4 KB大小的緩沖區(qū),當(dāng)上層調(diào)用函數(shù)WriteToFlash()向Flash寫數(shù)據(jù)時,并不直接寫入Flash,而是先寫到數(shù)據(jù)緩沖區(qū),其流程如圖7所示。

3 結(jié)論
    基于LPC2132微控制器的硬件平臺上實(shí)現(xiàn)了USB驅(qū)動、Bulk-Only傳輸協(xié)議、SCSI命令集,實(shí)現(xiàn)了完整的U盤功能。

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

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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