微功耗數(shù)據(jù)采集系統(tǒng)的開發(fā)應(yīng)用
3 軟件設(shè)計(jì)
CF卡的讀寫是以扇區(qū)(sector)為單位的,每次讀寫一個(gè)或連續(xù)的多個(gè)扇區(qū),每個(gè)扇區(qū)大小為512字節(jié)。對(duì)CF卡的讀寫訪問操作都是通過訪問其內(nèi)部寄存器來實(shí)現(xiàn)的,對(duì)不同的寄存器進(jìn)行訪問是靠上節(jié)所提到的A0~A2、CSO、CSl這五根數(shù)據(jù)線來譯碼的,在本文的設(shè)計(jì)中,CF卡配置成TRUE IDE工作模式,具體的寄存器映射如表1所示。本文引用地址:http://butianyuan.cn/article/173516.htm
寄存器0用于CF卡的數(shù)據(jù)讀寫。CF為了節(jié)省I/O資源,有些I/0端口是復(fù)用的,寄存器1在讀操作時(shí)為錯(cuò)誤寄存器,寫操作時(shí)為特征寄存器。寄存器2的作用是設(shè)定要讀寫扇區(qū)的數(shù)目。寄存器3~6是用來尋址要讀寫的具體扇區(qū)位置,一般的IDE硬盤有CHS和LBA兩種尋址模式,CF卡工作在TRUE IDE模式下也有這兩種尋址模式,CHS(Cylinder/Head/Sector)是扇區(qū)對(duì)應(yīng)的具體柱面、磁頭、和扇區(qū)的地址;邏輯塊尋址方式LBA(Logical Block Addressing)在邏輯上是連續(xù)的,比較方便,所以軟件實(shí)現(xiàn)上采用這種方式對(duì)CF卡的扇區(qū)進(jìn)行訪問。寄存器7在讀操作時(shí)是狀態(tài)寄存器,主控器可以得到CF卡的有關(guān)狀態(tài)信息;寫操作時(shí)是命令寄存器,通過設(shè)置命令,主控制器操作CF卡完成特定的功能。
讀寫扇區(qū)時(shí),首先需要設(shè)置起始扇區(qū)的LBA地址和扇區(qū)數(shù)目,并設(shè)置命令寄存器,讀取數(shù)據(jù)設(shè)置命令“20H”,寫入數(shù)據(jù)設(shè)置命令“30H”。然后讀取狀態(tài)寄存器,判斷狀態(tài)寄存器是否為“58H”。若為是,則開始讀寫操作;若為否則繼續(xù)讀取狀態(tài)寄存器。接下來讀狀態(tài)寄存器是否為“50H”,判斷CF卡操作是否完成。若為否,則繼續(xù)讀取判斷;若為是,則結(jié)束讀寫過程。如果在判斷狀態(tài)寄存器中發(fā)生了超時(shí)或出現(xiàn)錯(cuò)誤,則設(shè)置超時(shí)或錯(cuò)誤標(biāo)志,并跳出讀寫過程。圖4為CF卡讀寫一個(gè)扇區(qū)的流程圖。
由于對(duì)CF卡的操作是以扇區(qū)位單位,在單片機(jī)內(nèi)部RAM開辟了兩個(gè)大小為1 kByte的緩沖區(qū),每個(gè)緩沖區(qū)的數(shù)據(jù)正好可以寫滿CF卡的兩個(gè)扇區(qū),AD采集的數(shù)據(jù)先存儲(chǔ)在緩沖區(qū),當(dāng)存滿一個(gè)緩沖區(qū)后,設(shè)置CF的LBA地址、扇區(qū)數(shù)目及寫命令,把緩沖區(qū)內(nèi)的數(shù)據(jù)寫入CF卡,同時(shí)AD采集的數(shù)據(jù)存儲(chǔ)在另外一個(gè)緩沖區(qū)。
CF卡如果要通過讀卡器在計(jì)算機(jī)上直接讀取數(shù)據(jù),CF卡中的文件系統(tǒng)必須與計(jì)算機(jī)的文件系統(tǒng)一致,現(xiàn)在計(jì)算機(jī)的文件系統(tǒng)有FATl6、FAT32及NTFS等。由于微功耗單片機(jī)處理能力有限,在采樣周期內(nèi)完成數(shù)據(jù)采集及數(shù)據(jù)存儲(chǔ)的工作后,所剩時(shí)間已經(jīng)不多,如果再加上處理文件系統(tǒng)的程序,勢(shì)必影響系統(tǒng)數(shù)據(jù)采集的實(shí)時(shí)性。在本設(shè)計(jì)的程序里并沒有將數(shù)據(jù)寫成文件系統(tǒng),而是從數(shù)據(jù)扇區(qū)對(duì)應(yīng)的LBA地址開始從小到大依次將數(shù)據(jù)寫入扇區(qū),直到寫滿整個(gè)CF卡。在讀取數(shù)據(jù)時(shí),利用磁盤操作函數(shù)編寫一個(gè)小的VC程序,將CF卡中數(shù)據(jù)依次讀出并存為文件存儲(chǔ)在計(jì)算機(jī)的硬盤里,讀取的扇區(qū)及文件的大小也可以方便地設(shè)置,非常靈活。這樣也就在處理器能力有限的情況下實(shí)現(xiàn)了系統(tǒng)的實(shí)時(shí)數(shù)據(jù)采集和存儲(chǔ)。
4 結(jié)論
采取這種設(shè)計(jì)方法使整個(gè)采集系統(tǒng)的功耗大大減小,經(jīng)測(cè)量,整個(gè)系統(tǒng)功耗為150mW。采用高能鋰離子電池作為系統(tǒng)電源,使整個(gè)系統(tǒng)輕松裝入一個(gè)內(nèi)徑為15cm,高15cm的圓柱形密封罐內(nèi),體積的減小也更加有利于系統(tǒng)在水下的布放。該系統(tǒng)經(jīng)過在吉林松花湖試驗(yàn),能夠穩(wěn)定可靠地工作,實(shí)時(shí)采集并存儲(chǔ)水下環(huán)境的噪聲和過往船只的噪聲數(shù)據(jù)。
評(píng)論