<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)技術(shù)的應(yīng)用研究

          基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)技術(shù)的應(yīng)用研究

          作者: 時(shí)間:2012-01-31 來(lái)源:網(wǎng)絡(luò) 收藏

          0 引言

          在現(xiàn)場(chǎng)測(cè)控系統(tǒng)中,RTU(遠(yuǎn)程測(cè)控終端)存儲(chǔ)容量、存儲(chǔ)數(shù)據(jù)的轉(zhuǎn)移問(wèn)題始終是RTU的重要環(huán)節(jié)。RTU的存儲(chǔ)容量一般為幾十K~幾百K字節(jié),數(shù)據(jù)轉(zhuǎn)移通常采用不掉電靜態(tài)RAM、EEPROM存儲(chǔ)模塊,或采用便攜式計(jì)算機(jī)通過(guò)串行口讀取RTU數(shù)據(jù)。無(wú)論采用哪種方法都存在一定的局限性。首先存儲(chǔ)容量小,對(duì)于大量的顯得比較緊張。對(duì)于數(shù)據(jù)轉(zhuǎn)移,如果采用存儲(chǔ)模塊,雖然攜帶方便但不是通用設(shè)備,其成本較高,同時(shí)不能與計(jì)算機(jī)兼容,要將存儲(chǔ)模塊的數(shù)據(jù)錄入計(jì)算機(jī)還需要專(zhuān)用的讀取設(shè)備;如果采用便攜式計(jì)算機(jī)讀取RTU數(shù)據(jù),雖然讀取方便,但在野外便攜式計(jì)算機(jī)也是一個(gè)不小的包袱。

          隨著(Universal Serial Bus)技術(shù)的發(fā)展,計(jì)算機(jī)的移動(dòng)存儲(chǔ)介質(zhì)普遍采用U盤(pán)或移動(dòng)硬盤(pán)。U盤(pán)的存儲(chǔ)容量以MB為單位,移動(dòng)硬盤(pán)的存儲(chǔ)容量以GB為單位,它們相對(duì)于RTU原先的存儲(chǔ)模塊來(lái)說(shuō)都是海量存儲(chǔ),所有數(shù)據(jù)存也無(wú)需進(jìn)行壓縮處理,可以在文件級(jí)與計(jì)算機(jī)兼容。即便是對(duì)于那些小數(shù)據(jù)量存儲(chǔ)的RTU,雖然只依靠內(nèi)部的 FLASH就能滿足存儲(chǔ)要求,然而采用接口就能方便地用一個(gè)U盤(pán)分別讀出多個(gè)RTU的數(shù)據(jù)。

          如今,技術(shù)已經(jīng)越來(lái)越普及和成熟,低成本、高穩(wěn)定性、較高的數(shù)據(jù)傳輸速率和即插即用的方便性,使其備受硬件廠商的青睞。隨著數(shù)據(jù)采集和嵌入式用戶(hù)對(duì)移動(dòng)存儲(chǔ)的需求越來(lái)越大,具有USB接口的存儲(chǔ)設(shè)備以其優(yōu)異的性?xún)r(jià)比和靈活性常用來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和交換,所以在嵌入式系統(tǒng)中實(shí)現(xiàn)對(duì)優(yōu)盤(pán)或移動(dòng)硬盤(pán)的直接讀寫(xiě)是非常有價(jià)值的。

          1USB設(shè)備開(kāi)發(fā)的一般過(guò)程

          1.1 USB接口芯片的選擇

          在進(jìn)行一個(gè)USB設(shè)備開(kāi)發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB接口芯片,它是總線在主機(jī)方面的接口,用于支持USB設(shè)備通過(guò)USB連到主機(jī)上。

          目前,市場(chǎng)上供應(yīng)的USB控制器主要有兩種:帶USB接口的和純粹的USB接口芯片。前者的好處在于開(kāi)發(fā)者對(duì)系統(tǒng)結(jié)構(gòu)和指令集很熟悉,開(kāi)發(fā)工具簡(jiǎn)單,但對(duì)于簡(jiǎn)單或低成本系統(tǒng),價(jià)格高將會(huì)是最大的障礙。而純粹的USB接口芯片僅處理USB通信,必須有一個(gè)外部微處理器進(jìn)行協(xié)議處理和數(shù)據(jù)交換。這類(lèi)芯片的特點(diǎn)是價(jià)格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設(shè)計(jì)(硬件上僅需對(duì)并行總線和中斷進(jìn)行改動(dòng),軟件則需增加微處理器的USB中斷處理和數(shù)據(jù)交換程序、PC機(jī)的USB接口通信程序,無(wú)需對(duì)原有產(chǎn)品系統(tǒng)結(jié)構(gòu)作很大的改動(dòng))41]。

          1.2 硬件電路設(shè)計(jì)

          在選定USB控制芯片后,如果是帶USB接口的,那就是一般單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā);反之,就是如何把USB接口芯片與單片機(jī)應(yīng)用系統(tǒng)融合的問(wèn)題,一般的USB接口芯片都支持多種并行總線結(jié)構(gòu),可以方便地與多種單片機(jī)接口。

          1.3 軟件設(shè)計(jì)

          設(shè)計(jì)完USB主控器與系統(tǒng)中CPU和存儲(chǔ)器的接口電路后,就要開(kāi)發(fā)主機(jī)系統(tǒng)上的主要外設(shè)驅(qū)動(dòng)程序,USB的核心驅(qū)動(dòng)以及USB主控制器驅(qū)動(dòng)程序了,由主機(jī)系統(tǒng)控制USB數(shù)據(jù)的傳送動(dòng)作,響應(yīng)來(lái)自外設(shè)的USB標(biāo)準(zhǔn)請(qǐng)求,完成各種數(shù)據(jù)的交換工作和事件處理。

          軟件設(shè)計(jì)中要注意的是先要考慮USB總線延時(shí)問(wèn)題。理論上USB總線工作在全速時(shí)的最小響應(yīng)周期為1毫秒,但是實(shí)際上的響應(yīng)周期可能會(huì)到幾十毫秒。其原因是多方面的,比如驅(qū)動(dòng)程序、多重緩沖區(qū)等。這是在實(shí)時(shí)控制項(xiàng)目設(shè)計(jì)時(shí)首先要考慮的因素之一。

          1.4 調(diào)試

          因?yàn)槊恳淮蜺SB的傳輸過(guò)程,都有時(shí)效要求,等待時(shí)間過(guò)長(zhǎng),通信過(guò)程也就中止了,因此不適合用硬件仿真器來(lái)設(shè)斷點(diǎn)調(diào)試??刹捎么谳o助調(diào)試過(guò)程,即在固件代碼中加入類(lèi)似于Printf的語(yǔ)句,向串口輸出一些信息。借此,可以知道程序運(yùn)行到哪,以及運(yùn)行到某處時(shí)相應(yīng)的變量或寄存器值。

          調(diào)試工作基本分三步進(jìn)行:首先對(duì)單片機(jī)部分借助PC調(diào)試軟件(芯片生產(chǎn)商提供或從網(wǎng)上下載Bus Hound,WINRT-USB 等調(diào)試軟件)將設(shè)備端的USB協(xié)議(主要有描述符請(qǐng)求、端口配置、地址設(shè)置以及基本數(shù)據(jù)交換)調(diào)通。然后,用調(diào)試好的USB設(shè)備接口來(lái)開(kāi)發(fā)、調(diào)試PC 軟件。最后,加上USB設(shè)備端的其它用戶(hù)程序,對(duì)整個(gè)完整的系統(tǒng)進(jìn)行調(diào)試。

          2 應(yīng)用實(shí)例

          下面從硬軟件兩方面具體介紹本案例,重點(diǎn)分析了初始化問(wèn)題。本例研究開(kāi)發(fā)了一種基于單片機(jī)的USB總線的HOST接口,使得可以接入標(biāo)準(zhǔn)的USB DEVICE,針對(duì)大容量數(shù)據(jù)固態(tài)存儲(chǔ)的技術(shù)需要,在單片機(jī)上研究實(shí)現(xiàn)FAT32(兼容FAT16)的文件系統(tǒng),從而使得USB的Mass Storage類(lèi)設(shè)備可以自由接入,現(xiàn)場(chǎng)采集的數(shù)據(jù)可以以文件的形式存儲(chǔ)記錄。這樣,就大大拓寬了傳統(tǒng)的數(shù)據(jù)測(cè)控終端在長(zhǎng)時(shí)間大容量的技術(shù)上的限制。

          本例采用F149單片機(jī)作為核心處理部件,Philps公司的ISP1161A1為USB主控芯片,由F149控制 ISP1161A1,將CPU發(fā)來(lái)的指令變?yōu)橄鄳?yīng)的USB數(shù)據(jù)流,傳送給指定的USB設(shè)備進(jìn)行相應(yīng)的操作。圖1為具有USB主機(jī)功能的數(shù)據(jù)采集系統(tǒng)原理框圖。數(shù)據(jù)采集的固態(tài)存儲(chǔ)設(shè)備采用現(xiàn)在應(yīng)用非常普遍的U盤(pán)或移動(dòng)硬盤(pán),這些設(shè)備可移動(dòng)性強(qiáng),均采用標(biāo)準(zhǔn)的USB總線接口,通用性非常好。

          圖1具有USB主機(jī)功能的數(shù)據(jù)采集系統(tǒng)原理框圖

          在本例中,軟件系統(tǒng)的設(shè)計(jì)主要涉及五個(gè)部分,分別為軟件主程序、數(shù)據(jù)采集部分、數(shù)據(jù)處理部分、數(shù)據(jù)的現(xiàn)場(chǎng)大容量存儲(chǔ)部分、數(shù)據(jù)的GSM通信部分。整個(gè)系統(tǒng)是在IAR Embedded Workbench的軟件環(huán)境以及ScomAssistant調(diào)試助手下實(shí)現(xiàn)的,程序的實(shí)現(xiàn)采用C語(yǔ)言。主程序的代碼為:

          void main(void)

          {

          SYSInit();

          TimeTaskInit();

          USBInit();

          while(1){

          TimerTaskManage();

          USBTaskManage();

          }

          }

          SYSInit()實(shí)現(xiàn)系統(tǒng)初始化工作,主要對(duì)單片機(jī)基礎(chǔ)參數(shù)的設(shè)置和定義各個(gè)I/O口的工作方式;TimeTaskInit()中先進(jìn)行單片機(jī)定時(shí)中斷的配置,再將定時(shí)任務(wù)的所有標(biāo)志清零初始化,為定時(shí)中斷處理做準(zhǔn)備。USBInit()是對(duì)USB事務(wù)進(jìn)行硬軟件初始化,先檢測(cè)和配置USB主控芯片ISP1161A1,再初始化USB軟件環(huán)境。

          早期的U盤(pán)對(duì)初始化要求不高,有的甚至不需要驅(qū)動(dòng)就可直接對(duì)扇區(qū)進(jìn)行讀寫(xiě),所以現(xiàn)有大部分USB主機(jī)系統(tǒng)一般都能實(shí)現(xiàn)對(duì)這些U盤(pán)的讀寫(xiě)。但隨著產(chǎn)品不斷更新,初始化信息不能完全獲取使得一些不同的USB裝置只能針對(duì)不同U盤(pán)。本實(shí)驗(yàn)證明,初始化過(guò)程完成后再解決了時(shí)序問(wèn)題,就可以解決大部分U盤(pán)的讀寫(xiě)。

          3.初始化分析

          正如前面所述,目前社會(huì)上很多人只能完成針對(duì)某些特定U盤(pán)的讀寫(xiě),本實(shí)驗(yàn)中的重點(diǎn)就是先完成U盤(pán)的初始化,讓單片機(jī)先能認(rèn)識(shí)大多數(shù)U盤(pán),然后對(duì)它們進(jìn)行批處理方式的讀寫(xiě),再?gòu)腢盤(pán)或移動(dòng)硬盤(pán)加載文件系統(tǒng),最后完成對(duì)U盤(pán)或移動(dòng)硬盤(pán)在文件級(jí)別上的讀寫(xiě)。

          當(dāng)主機(jī)檢測(cè)到一個(gè)設(shè)備已經(jīng)連接時(shí),就會(huì)自動(dòng)識(shí)別所連接的設(shè)備,這個(gè)過(guò)程稱(chēng)為設(shè)備枚舉(Device Enumeration).設(shè)備枚舉使得主機(jī)的設(shè)備驅(qū)動(dòng)程序能夠與USB設(shè)備之間進(jìn)行數(shù)據(jù)交換.在這個(gè)過(guò)程中,USB設(shè)備需要響應(yīng)主機(jī)的標(biāo)準(zhǔn)設(shè)備請(qǐng)求并把描述符傳送給主機(jī),這些描述符包括設(shè)備描述符,配置描述符,接口描述符和端點(diǎn)描述符等42]。在沒(méi)有對(duì)U盤(pán)完成初始化之前,單片機(jī)只能看到U盤(pán)的端點(diǎn)0,其他端點(diǎn)對(duì)于單片機(jī)來(lái)說(shuō)是透明的。因此,我們只能從端點(diǎn)0即控制通道中對(duì)U盤(pán)進(jìn)行配置,讀進(jìn)U盤(pán)的必要的配置信息后再對(duì)U盤(pán)的各端點(diǎn)進(jìn)行配置。一般的傳輸數(shù)據(jù)大小不為0的控制傳輸?shù)倪^(guò)程可分為3個(gè)階段[3]。

          第一階段,是控制傳輸?shù)慕㈦A段。

          在這階段里,我們首先要建一個(gè)用于建立控制傳輸事務(wù)的PTD數(shù)據(jù),然后往U盤(pán)發(fā)送。

          這里有一個(gè)需要注意的地方,在每次用于發(fā)送的函數(shù)執(zhí)行以后,要加上一定的延時(shí),等待U盤(pán)對(duì)發(fā)過(guò)來(lái)的指令進(jìn)行處理。我們要讀取描述表,就要向U盤(pán)發(fā)送 USB設(shè)備的標(biāo)準(zhǔn)設(shè)備請(qǐng)求命令。比如獲取U盤(pán)描述表的USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求命令為“0680 0100 0000 0012”。把上述命令寫(xiě)入PTD數(shù)據(jù)的負(fù)載區(qū),然后發(fā)送,延時(shí)等待。

          第二階段,是數(shù)據(jù)階段。

          標(biāo)準(zhǔn)設(shè)備請(qǐng)求命令發(fā)送后,U盤(pán)就會(huì)把設(shè)備描述表發(fā)過(guò)來(lái),這時(shí)我們就準(zhǔn)備接收了。

          在這里有一個(gè)問(wèn)題要解決,就是最大包長(zhǎng)度的問(wèn)題。每個(gè)U盤(pán)在0通道里都規(guī)定了一個(gè)最大包的長(zhǎng)度,可以是8,16,32或64字節(jié)。舉個(gè)例子:這次要傳輸?shù)拿枋霰淼拈L(zhǎng)度為18字節(jié)。假設(shè)U盤(pán)的最大包長(zhǎng)度為8字節(jié),那就分三次接收,8+8+2字節(jié)。若最大包長(zhǎng)度為16字節(jié),就分兩次接收,16+2字節(jié)。如果最大包長(zhǎng)度為32字節(jié)或者64字節(jié),就可以一次完成。為了得到這個(gè)U盤(pán)的最大包長(zhǎng)度,可以進(jìn)行試探,然后用一個(gè)公共變量把最大包長(zhǎng)度記錄下來(lái)。判斷原理如下:先建立一個(gè)大小為8字節(jié)的接收區(qū)進(jìn)行接收,然后監(jiān)視PTD頭的COMPLETE CODE字段(參考1161芯片中PTD數(shù)據(jù)的建立過(guò)程),如果該字段出現(xiàn)1000(二進(jìn)制)的錯(cuò)誤,就證明最大包長(zhǎng)比8大,然后再建立16字節(jié)的接收區(qū)接收,如果還出現(xiàn)1000的錯(cuò)誤的話,就再用稍大的包進(jìn)行嘗試,直到COMPLETE CODE字段出現(xiàn)0000為止。這樣,就得出了該U盤(pán)0通道的最大包長(zhǎng)度。下圖2總結(jié)了讀入描述表的過(guò)程。


          第三階段,是狀態(tài)階段。

          在狀態(tài)階段里,單片機(jī)要向U盤(pán)發(fā)送一個(gè)空數(shù)據(jù)負(fù)載的PTD數(shù)據(jù),以向U盤(pán)匯報(bào)此次控制傳輸已經(jīng)完成。

          配置表的讀取過(guò)程和描述表過(guò)程差不多,這里就不再加以敘述了。在完成描述表和配置表的讀取以后,就可以往U盤(pán)發(fā)送標(biāo)準(zhǔn)設(shè)備請(qǐng)求命令SET CONFIG對(duì)U盤(pán)進(jìn)行配置了,至此,枚舉過(guò)程結(jié)束。到此為止,本例單片機(jī)對(duì)U盤(pán)的初始化過(guò)程也已基本完成。

          實(shí)驗(yàn)證明,此方案確實(shí)解決了大部分U盤(pán)的讀寫(xiě),但由于USB單片機(jī)系統(tǒng)對(duì)時(shí)序要求很?chē)?yán),測(cè)試過(guò)程也有一定困難,目前還不能解決所有U盤(pán)及移動(dòng)硬盤(pán)的讀寫(xiě),為解決這一問(wèn)題,我們又采用了南京恒沁電子公司的CH375芯片作為USB主控芯片,該芯片集成了處理Mass Storage存儲(chǔ)的專(zhuān)用通信協(xié)議的固件,單片機(jī)可以直接以扇區(qū)為基本單位讀寫(xiě)存儲(chǔ)設(shè)備。初步實(shí)驗(yàn)證明,它能解決目前市場(chǎng)上幾乎所有的U盤(pán)及移動(dòng)硬盤(pán)的讀寫(xiě)。

          CH375的優(yōu)點(diǎn)是處理Mass Storage存儲(chǔ)設(shè)備比較方便,缺點(diǎn)是只有一個(gè)USB接口,如果視頻采集和同時(shí)處理就需要2個(gè)CH375芯片;只支持USB1.1協(xié)議,內(nèi)部緩沖區(qū)只有64字節(jié),數(shù)據(jù)吞吐量比較小,對(duì)于高速的視頻采集難以滿足要求。ISP1161A1的優(yōu)點(diǎn)是有2個(gè)USB HOST接口和1個(gè)USB DEVICE接口,支持USB2.0協(xié)議,內(nèi)部緩沖區(qū)為4K字節(jié),數(shù)據(jù)吞吐量大;缺點(diǎn)是沒(méi)有Mass Storage的專(zhuān)用通信協(xié)議的固件,應(yīng)用開(kāi)發(fā)比較費(fèi)事。

          3.結(jié)束語(yǔ)

          文中論述的基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)方案現(xiàn)已完成了模塊調(diào)試。實(shí)際測(cè)試中,將終端的模擬采集數(shù)據(jù)送入U(xiǎn)盤(pán),以ASCII文件方式存儲(chǔ),成功存入自定的文件中,可在PC 機(jī)中打開(kāi), 也可以直接用上層測(cè)控軟件進(jìn)行進(jìn)一步的處理。

          本文的研究是在水利自動(dòng)化的背景下進(jìn)行的,但在結(jié)構(gòu)上這種終端明顯具有廣泛的適應(yīng)性。除了應(yīng)用于水利自動(dòng)化信息測(cè)報(bào)外,還可以用于電力系統(tǒng)的現(xiàn)場(chǎng)測(cè)報(bào)和數(shù)據(jù)記錄、交通智能化管理以及環(huán)保、氣象、地質(zhì)、民用領(lǐng)域如數(shù)碼相機(jī)等。因此,文中研究的設(shè)計(jì)模式和實(shí)現(xiàn)技術(shù)的應(yīng)用前景將是非常廣闊的。

          參考文獻(xiàn):

          [1] Don Anderson. Universal Serial Bus System Architecture [M].Addison Wesley Longman, Inc,2000

          [2] Don Anderson. USB系統(tǒng)體系[M].北京:中國(guó)電力出版社,2001

          [3] Philips Semiconductors:《ISP1161A1 USB single-chip host and device controller, Programming Guide》,2004



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();