王 龍
(湘南學院 電子信息與電氣工程學院,湖南 郴州 423000)
時代的進步,促使科學技術飛速發(fā)展,其大跨步走向自動化、互聯(lián)網(wǎng)化、智能化的方向,采用的控制系統(tǒng)構與智能互聯(lián)網(wǎng)結合走向多元化.面對科技的進步對工業(yè)應用中數(shù)據(jù)采集的需要加大,數(shù)據(jù)采集技術標準提升,故此考驗數(shù)據(jù)存儲設備的存儲容量、速度、質量、便攜性及工業(yè)應用環(huán)境等因素的能力.由U盤構成的數(shù)據(jù)儲存記錄器可面向于海量數(shù)據(jù)采集存儲、設備黑匣子、考勤機數(shù)據(jù)記錄、水文監(jiān)測、無紙記錄儀及自動化生產(chǎn)線運作數(shù)據(jù)采集系統(tǒng)等場合應用[1].
國內:最早期采用磁帶記錄技術開啟數(shù)字化時期,高度數(shù)字記錄(HDDR)特點是動態(tài)范圍寬[2].再轉變?yōu)楣虘B(tài)數(shù)據(jù)記錄器以SRAM存儲器芯.中國科學院研究成功高速固態(tài)數(shù)據(jù)記錄器,是國內較早以Flash為存儲介質的數(shù)據(jù)記錄器,存儲容量突破120GByte[3].其中主要圍繞CAN,USB2.0,PXIe等接口進行設計,隨著USB總線的高速發(fā)展,運用USB接口技術實現(xiàn)數(shù)據(jù)記錄的方式主要特點:傳輸速率快,即插即用等優(yōu)勢在高速數(shù)據(jù)傳輸領域開始普及和推數(shù)據(jù)記錄器發(fā)展.
國外:從20世紀80年代末90年代初研制的數(shù)據(jù)記錄器應用于諸多需要數(shù)據(jù)存儲的領域.如美國SE公司(Seakr Engineering)MMUR系列數(shù)據(jù)記錄器,具有28bit輸出接口,數(shù)據(jù)記錄的速度為3.6Gbps,容量是768Gbit[4],此時世界各國都準備探究數(shù)據(jù)記錄器的技術.隨著半導體工藝技術快速進步的到來,進入新的起航階段,半導體存儲器芯片逐漸誕生,如 EPROM、EEPROM、SDRAM、FLASH等.上述數(shù)據(jù)存儲器芯片相對磁帶記錄器具有優(yōu)點,例如占有空間小、耐高溫、儲存速率極快、容量大、穩(wěn)定性高等.在研究領域有代表性的研制公司有美國的VCI公司和歐洲的ATRIUM公司[5].
總體方案是以ATmega128為主控芯片,通過UART通信方式實現(xiàn)與串口數(shù)據(jù)的傳輸,再通過spi通信方式控制flash芯片W25Q128BV的將接收的數(shù)據(jù)暫存入flash,從而將數(shù)據(jù)在USART通信方式下控制USB接口芯片CH376將緩存在flas中的數(shù)據(jù)傳送到U盤,最終實現(xiàn)的目的是外部數(shù)據(jù)快速存入U盤,達到高速數(shù)據(jù)存儲可以在脫離計算機控制的存儲方式下實現(xiàn).采用現(xiàn)場數(shù)據(jù)存儲,事后通過計算機讀取U盤的方式獲取數(shù)據(jù).本設計構成的模塊有主控處理器、數(shù)據(jù)通信模塊、U盤讀取模塊、電源管理模塊,具體構成如下圖所示:
圖1 整體框架圖
創(chuàng)新點:(1)將U盤應用于高速數(shù)據(jù)記錄儀.U盤高速數(shù)據(jù)記錄儀因避免了操作系統(tǒng)容易崩潰的問題而具有更高的可靠性,操作簡單方便且成本低廉.
(2)采用flash作為前級數(shù)據(jù)緩存的目的是實現(xiàn)數(shù)據(jù)在采集存儲時寫入的速率與flash的存儲速率完成有效的匹配,然后再轉存到U盤,不會因為數(shù)據(jù)在采集存儲時受U盤存儲數(shù)據(jù)的速率的限制,完成數(shù)據(jù)采集與存儲最佳效果.
CH376s是實現(xiàn)U盤儲存數(shù)據(jù)的芯片,它同樣是文件管理系列的芯片,能夠配合的主控芯片有單片機、DSP、FPJA等微機芯片的工作完成對U盤或者SD卡的數(shù)據(jù)存儲.自身帶有USB通訊協(xié)議的基本固件,芯片自身配置協(xié)議的固件就能夠完成海量存儲設備的專用通訊和SD卡的通訊[4].文件控制系統(tǒng)中主要包含F(xiàn)AT16、FAT32等管理固件.最大的優(yōu)點是能夠滿足常見的USB儲存開發(fā),包含U盤、USB硬盤及SD卡(其中包含兩類即標準容量和高容量的SD卡和HC-SD卡).
通訊方式三種:并口數(shù)據(jù)通信方式、SPI串行通信、異步串口通信.我們采用的是atmega128單片機,選擇使用與單片機相結合的通訊方式uart,即異步串行通信方式.
U盤存儲方式是分扇區(qū)模式和字節(jié)模式,本設計采用扇區(qū)模式進行的,因而U盤會給予極多個物理扇區(qū),單獨用來存儲數(shù)據(jù),而通常情況下單個扇區(qū)內存的大小一般是512字節(jié)為基本單位對U盤進行讀寫操作,速度比字節(jié)模式快因此我們需要調整我們數(shù)據(jù)緩存區(qū)的扇區(qū)大小,基本要求大于512字節(jié)的整數(shù)倍.當然也是適應RAM多,數(shù)量非常大,可實現(xiàn)頻繁的操作的單片機.
本設計中要用到讀函數(shù)CH376SecRead和CH376SecWrite扇區(qū)寫函數(shù),因為我們計算機一般是將U盤中的物理扇區(qū),加以組織構造成為FAT文件系統(tǒng),其目的是讓單片機控制的U盤/SD卡的數(shù)據(jù)與計算機兩間的數(shù)據(jù)交換,單片機存儲U盤數(shù)據(jù)是在FAT標準規(guī)范下行使數(shù)據(jù)的讀取.我們在使用中通常存儲數(shù)據(jù)時,假如數(shù)據(jù)數(shù)量非常少或數(shù)據(jù)間斷型,我們也是可以在每次讀取完數(shù)據(jù)后進行更新文件目錄信息,這一把是更新目錄中的文件長度.
Ch376的結構圖分為應用層包含的函數(shù)在HOST.c,文件系統(tǒng)接口包含的函數(shù)是在FILE_syst.c文件里面.設備接口所有函數(shù)包含在HAL.H文件里面,硬件部分是連線再到USB總線方式直連U盤.下面我們論述硬件層和文件系統(tǒng)層.
硬件抽象層,也就設置I/O接口子函數(shù)的程序,構成單片機與CH376芯片的通訊接口式,取決于HAL.H頭文件,UART_HW.C是硬件異步串口連接方式,在硬件層,支持波特率從9600bps到3Mbps[4].
文件系統(tǒng)層,將常用命令進行打包,提供了常用的文件管理子程序和一些不太常用的子程序FILE_SYS.H文件系統(tǒng)層頭文件和相應的子程序來調用.
輔助調試子程序,主要用于顯示輸出調試過程中信息,便于查看程序在運行過程中狀態(tài)監(jiān)測.
配置頭文件有atmega128相應的頭文件及ch376應用層和硬件層文件系統(tǒng)層的頭文件,例如#include <string.h>、#include <stdio.h> 等.設置緩存區(qū)BUFFFER,其中buf根據(jù)需要設置,我們是64,設置串口調試信息監(jiān)控,配置硬件的波特率我們取9600.
初始化后應答正常就進入中斷,中斷函數(shù)是CH376DiskConnect函數(shù),等待U盤插入,緊接著檢查U盤相關信息如U盤的容量,創(chuàng)建文本文檔,通過串口返回監(jiān)測結果返回初始化成功,進入接收數(shù)據(jù)狀態(tài).
異步串口通訊方式主要包括:數(shù)據(jù)的讀RXD和串行數(shù)據(jù)輸出也就是數(shù)據(jù)寫的引腳TXD.芯片的RXD和TXD連接方式是在單片機的串行數(shù)據(jù)輸出引腳和串行數(shù)據(jù)輸入引腳.
CH376使用的串行數(shù)據(jù)傳輸格式采用的是通用的字節(jié)傳輸方式,這包含1個起始位和8個數(shù)據(jù)位及1個停止標志位.默認設置的波特率是9600bp,如果要修改波特率需要借助函數(shù)CMD_SET_BAUDRATE修改既可.
通訊過程中,分為兩個階段,即發(fā)送命令階段和命令應答階段.這其中的發(fā)送命令也就是使用者向寫入器(串口rs-233)提出的操作申請和數(shù)據(jù)應答,命令應答是采用寫入器向用戶命令提出的響應.
軟件接口功能:首先檢測U盤的狀態(tài)(如插入,拔出),創(chuàng)建文件和目錄(支持長文件名文件和目錄),打開一個已經(jīng)創(chuàng)建的文件和目錄(支持長文件名文件和目錄),從文件中讀取指定長度和指定位置的數(shù)據(jù)(支持長文件名文件和目錄).
寫數(shù)據(jù)到指定文件的指定地址(支持長文件名文件和目錄),列舉目錄下的文件和目錄(支持長文件名文件和目錄),刪除文件和目錄(支持長文件名文件和目錄)查詢U盤容量.
CH376的通信方式是異步串行通信UART,其中包含:RXD為串行數(shù)據(jù)輸入和TXD作為數(shù)據(jù)輸出.采用這邊通信方式的優(yōu)勢就是減少與單片機最少的連線.CH376s在通信中的數(shù)據(jù)格式屬于標準的字節(jié)傳輸模式,一個起始位,八個數(shù)據(jù)位,一個停止位.CH376能夠適應硬件設定默認的串行通訊波特率,當然可以跟隨單片機修改函數(shù)CMD_SET_BAUDRATE.每次上電復位后,CH376s的波特率取決自己三個引腳也就是BZ和SCK和SDI三個引腳的電平組合設定,與單片機的連線如下圖示:
圖2 ch376模塊電路圖
端口定義:CLK=PB5/CS=PB4 DO=PB6 DI=PB7,程序配置流程配置引腳使能spi時鐘,系統(tǒng)IO口初始化,進入SPI初始化,判斷指定的SPI標志位是否已經(jīng)設置好,進一步進入發(fā)送緩存的空標志位,判斷是否配置好的SPI緩存標志.
圖3 flash引腳圖
寫狀態(tài)寄存器(01H):
主要對寫入狀態(tài)寄存器中SRP0,SEC,LB,QE,SRP1,TB,BP,CMP進行操作,LB位是非易失性的,也就是只要進入編程(OTP)位,只要是寫入1,即不能進行清零操作.一旦開啟寫使能,寫入狀態(tài)寄存器指令(01H)將以/CS置低電平開始,然后通過DI進行傳輸指令碼(01H),然后傳輸相應的狀態(tài)寄存器位最后以/CS置高電平為結束.
在寫入(01H)指令前,必須先寫入(06H)指令也就是寫使能指令,這一步的目的就是確保WEL位是1.
在寫易失性的狀態(tài)寄存位,先完成指令50H寫入.這其中SRP1和LB位都是采用一次編程,表明我們不可能做到從1寫為0.確保完成寫狀態(tài)寄存器指令順利進行,/CS管腳的電平是在數(shù)據(jù)傳輸完成后拉為高電平.假使/CS電平?jīng)]有被拉高電平,會導致在寫狀態(tài)寄存指令不會被執(zhí)行.如果/CS在第八個時鐘拉高電平時,相關的位CMP、QE、SRP1也會快速進行清零.假如在非易失性相關的狀態(tài)寄存器位在進行寫操作,也就是指令06和指令01H,如果/CS拉高電平后,在指令在執(zhí)行期間,并不會影響讀狀態(tài)寄存器指令進行檢查BUYS位.當BUSY=1完成指令后,BUSY位馬上變?yōu)榈碗娖?,WEL位也變?yōu)榈碗娖?,完成上述就表明可以接受新的指令?寫指令50H和指令01H操作時,/CS拉高電平后,狀態(tài)寄存器馬上進行刷新.在刷新期間,BUSY位仍然是0.
圖4 寫狀態(tài)時序圖
讀數(shù)據(jù)(03H)
讀數(shù)據(jù)指令主要功能是指通過存儲器讀出一個字節(jié)或者連續(xù)著的多個字節(jié).完成這個指令是從/CS置為低電平開始的,主要在DI的clk的上升沿到來時,傳輸?shù)闹噶畲a03H及24位地址位.當芯片接收完成相關的地址位,則相應的地址處的值會在下個時鐘下降沿到來時以高位在前面地位在后面的方式進行地址自動加一.表明我們可以一次性讀出整個芯片的數(shù)據(jù).判斷是否結束我們只需要判斷/CS是否是被置高.根據(jù)要寫的其實地址,確定寫的起始區(qū)域的sector號,及其在起始sector中的偏移量.根據(jù)要寫的起始地址和字節(jié)數(shù),確定是否要寫的數(shù)據(jù)是夸sector.確定好操作的sector及sector的地址范圍.對每一個sector,先便利要寫的地址區(qū)域保持的數(shù)據(jù)是否是0xff,如果是就不擦除,如果不是0xff區(qū)域,先讀出里面的數(shù)據(jù),保存在緩存flash芯片中.然后擦除里面的內容,然后把sector要操作的數(shù)據(jù),寫到緩存中,最后一次性把緩存在W25Q128BV的數(shù)據(jù)寫到對應sector中.pBuffer:數(shù)據(jù)存儲區(qū)開始寫入的地址(24bit)要寫入的字節(jié)數(shù)(最大65535),單頁剩余的字節(jié)數(shù),判寫入結束與否,計算字節(jié)減去已經(jīng)寫入了的字節(jié)數(shù)一次可以寫入256字節(jié).
圖5 讀數(shù)據(jù)(03H)
采用atmega128模擬spi進行讀取數(shù)據(jù),其連接方式如圖6所示CLK=PB5/CS=PB4 DO=PB6 DI=PB7
圖6 單片機與flash連接
主程序的主要功能是對定時器,I/O口資源,wrd128flash,ch376s,串口通信等所用到的資源進行初始化.主程序流程見圖7所示.
圖7 流程圖
主程序除了對所用到的外設資源進行初始化之外還調用了3個子程序,分別是模擬數(shù)據(jù)傳感器的數(shù)據(jù)讀寫程序、flash暫存讀取程序、對ch376s數(shù)據(jù)處理程序,單片機通過控制將程序存入U盤中是以文本文檔存在.
圖8 ch376工作流程圖
表1 幾種存取方式對比
采用單片機為主控的芯片供電方式便捷,因此使用環(huán)境靈活和功耗低,便于我們適用于森林生態(tài)數(shù)據(jù)記錄和水文觀測點的數(shù)據(jù)記錄,解決不通電的情況下可以采用電池或者太陽能供電來解決電源問題,操作簡單,對于戶外記錄數(shù)據(jù)非常有幫助.當然如果工業(yè)實際應用需要大量調試和各種環(huán)境測試和數(shù)據(jù)論證,這需要大量實驗測試和理論計算為依據(jù),從而達到進一步提高.