第一篇:基于ARM的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)--優(yōu)秀畢設(shè)申請(qǐng)材料
基于ARM的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
班級(jí):通信071 姓名:
指導(dǎo)教師:
摘 要
隨著嵌入式技術(shù)的迅速發(fā)展,嵌入式終端在家居和工業(yè)等領(lǐng)域發(fā)揮著越來(lái)越重要的作用。本設(shè)計(jì)提出了一種以嵌入式為基礎(chǔ)的溫度采集系統(tǒng)的設(shè)計(jì)方案,使得基于嵌入式系統(tǒng)做溫度采集終端有較好的人機(jī)交互界面和系統(tǒng)高穩(wěn)定性等特點(diǎn)。
本文介紹了整個(gè)硬件開(kāi)發(fā)環(huán)境,bootloader的啟動(dòng)流程,Linux系統(tǒng)的架構(gòu),Linux內(nèi)核的架構(gòu)和根文件系統(tǒng)等相關(guān)知識(shí)。同時(shí),本設(shè)計(jì)在軟件方面主要編寫(xiě)了DS18B20的底層驅(qū)動(dòng)程序,進(jìn)行了Linux內(nèi)核的配置編譯,設(shè)計(jì)了QT頂層應(yīng)用程序;在硬件方面主要設(shè)計(jì)了DS18B20的硬件電路,搭建了嵌入式交叉開(kāi)發(fā)環(huán)境。通過(guò)綜合調(diào)試最終實(shí)現(xiàn)了基于ARM9的嵌入式溫度采集系統(tǒng)的設(shè)計(jì)。
嵌入式數(shù)據(jù)采集系統(tǒng)具備了發(fā)展?jié)摿Υ?,功耗低,穩(wěn)定性高,可視化界面好,便于攜帶和功能可擴(kuò)展的特性。
關(guān)鍵詞:嵌入式系統(tǒng);Linux內(nèi)核;溫度采集
Abstract With the rapid development of embedded technology, the embedded terminal is playing an increasingly important role in the home and industry.The paper proposes a temperature collection system which is based on embedded system, and using the embedded terminal to do data collection will have characteristics of better man-machine interface and high stability.This article describes the environment of hardware development, the boot process of bootloader, the architecture of Linux system, Linux kernel-related architecture, root file system architecture and other related knowledge.At the same time, this design mainly completed the programming of DS18B20's bottom-level driver, the configuration and compilation of the Linux kernel and the design of QT top-level application program in software.In the respect of hardware, the work includes of designing of the DS18B20's circuit and building the cross-tool development environment.Through synthesized debugging this project the design of the temperature collection system finally is realized, which is based on ARM9 embedded system.The data collection terminal based on embedded system has the high potential for development, low power consumption, high stability, good visual interface, easy to carry and functions which can be expanded, and so on.Key Words: Embedded System;Linux Kernel;Temperature Collection System
一、選題背景和意義
目前我國(guó)溫室大棚技術(shù)已經(jīng)在全國(guó)范圍內(nèi)被廣泛應(yīng)用,這一技術(shù)的誕生解決了北方人冬天沒(méi)蔬菜的難題。溫室大棚技術(shù)其關(guān)鍵技術(shù)在于對(duì)溫室的溫度進(jìn)行嚴(yán)格控制,只有嚴(yán)格的溫度控制才能保證棚內(nèi)植物正常生長(zhǎng),而如何實(shí)現(xiàn)對(duì)溫度的實(shí)時(shí)控制,顯而易見(jiàn)溫度采集作為大棚溫控是一個(gè)不可忽略的環(huán)節(jié),然而傳統(tǒng)的溫度采集系統(tǒng)一般穩(wěn)定性不高,而且沒(méi)有一個(gè)良好的人機(jī)交互界面,但是如果使用PC機(jī)作為溫度采集系統(tǒng)就會(huì)大大提高生產(chǎn)成本,而且安裝放置也很不方便。基于這一背景,本設(shè)計(jì)旨在通過(guò)設(shè)計(jì)一個(gè)基于ARM的嵌入式溫度采集系統(tǒng)在成本高和穩(wěn)定性差之間尋求一個(gè)平衡點(diǎn)。
基于ARM的嵌入式系統(tǒng)有諸多優(yōu)點(diǎn)是傳統(tǒng)電子系統(tǒng)無(wú)法比擬的,利用嵌入式開(kāi)發(fā)技術(shù)本設(shè)計(jì)可以設(shè)計(jì)出具有良好的人機(jī)交互界面的實(shí)時(shí)系統(tǒng),同時(shí)嵌入式系統(tǒng)最大的優(yōu)點(diǎn)就是軟硬件可裁剪,依據(jù)自己系統(tǒng)的需要可以進(jìn)行靈活的軟硬件設(shè)計(jì)開(kāi)發(fā),而且基于ARM的嵌入式系統(tǒng)開(kāi)發(fā)成本低,而且系統(tǒng)穩(wěn)定性高,功耗低,體積小,并且能夠應(yīng)用于多種應(yīng)用場(chǎng)合[1]。這些優(yōu)點(diǎn)就大大擴(kuò)大了基于ARM的嵌入式系統(tǒng)的應(yīng)用范圍。
通過(guò)設(shè)計(jì)嵌入式溫度采集一方面可以解決一些實(shí)際問(wèn)題,但更為重要的是通過(guò)本設(shè)計(jì)是對(duì)自己大學(xué)四年學(xué)習(xí)的一個(gè)檢驗(yàn),由于大學(xué)期間沒(méi)有學(xué)習(xí)有關(guān)嵌入式的相關(guān)知識(shí),通過(guò)自學(xué)嵌入式開(kāi)發(fā)的相關(guān)知識(shí),讓自己對(duì)嵌入式有一個(gè)深入的理解,為以后的學(xué)習(xí)工作奠定基礎(chǔ)。
二、mini2440開(kāi)發(fā)板的介紹 1.處理器S3C2440 Mini2440采用了S3C2440作為處理器[2]。S3C2440采用了ARM920T的內(nèi)核,0.13μm的CMOS標(biāo)準(zhǔn)宏單元和存儲(chǔ)器單元。其功耗低,體積小且靜態(tài)設(shè)計(jì)特別適合于對(duì)成本和敏感性有特殊要求的實(shí)際應(yīng)用。其總線采用了新的總線架構(gòu)AMBA(Advanced Micro Controller Bus Architecture)。S3C2440其特點(diǎn)是CPU是一個(gè)16/32位ARM920T的RISC處理器,ARM920T具備MMU,AMBA,BUS以及Harvard高速緩沖體系結(jié)構(gòu)。這一結(jié)構(gòu)具有獨(dú)立的16KB指令Cache和16KB數(shù)據(jù)Cache每個(gè)都是由具有8字長(zhǎng)的行組成。通過(guò)一套完整的通用系統(tǒng)外設(shè),S3C2440無(wú)需配置額外的組也同時(shí)減少整體系統(tǒng)成本。S3C2440集成了大量的片上功能,所以以S3C2440為核心處理器的mini2440開(kāi)發(fā)板有豐富的接口資源可供開(kāi)發(fā)者編程使用。
2.交叉開(kāi)發(fā)環(huán)境
嵌入式系統(tǒng)的開(kāi)發(fā)一般采用“宿主機(jī)-目標(biāo)機(jī)”交叉開(kāi)發(fā)方式[3]。首先,利用宿主上豐富的資源以及良好的開(kāi)發(fā)環(huán)境來(lái)進(jìn)行開(kāi)發(fā)和仿真目標(biāo)機(jī)上的軟件,再通過(guò)H-JTAG口,UTAR口或者是以太網(wǎng)接口將生成的代碼下載到目標(biāo)機(jī)上進(jìn)行運(yùn)行。
本設(shè)計(jì)宿主機(jī)主要是使用裝有RedHat5企業(yè)版Linux操作系統(tǒng)的PC機(jī),而目標(biāo)機(jī)就是mini2440開(kāi)發(fā)板。組成架構(gòu)如圖2.1所示。宿主機(jī)PC機(jī)串口、以太網(wǎng)接口、USB接口目標(biāo)機(jī)Mini2440開(kāi)發(fā)板
圖2.1 嵌入式開(kāi)發(fā)交叉環(huán)境構(gòu)架
三、系統(tǒng)組成及DS18B20的驅(qū)動(dòng)設(shè)計(jì) 1.系統(tǒng)硬件框圖
本設(shè)計(jì)硬件系統(tǒng)方面比較簡(jiǎn)單,系統(tǒng)部分組成:一是系統(tǒng)控制部分,二是溫度采集部分。其中系統(tǒng)控制部分又包括以下幾個(gè)部分:處理器、復(fù)位模塊、顯示模塊、外部接口模塊等四大部分組成。而溫度采集本分主要由DS18B20電路組成。具體組成如圖3.1所示。
顯示模塊其他接口CPU及存儲(chǔ)器I/O接口測(cè)溫模塊復(fù)位模塊 圖3.1 測(cè)溫系統(tǒng)硬件框圖
2.DS18B20驅(qū)動(dòng)設(shè)計(jì)
硬件驅(qū)動(dòng)大體可以分為以下幾類:網(wǎng)絡(luò)接口驅(qū)動(dòng),字符設(shè)備驅(qū)動(dòng),塊設(shè)備驅(qū)動(dòng)[5]。字符設(shè)備是指按字節(jié)來(lái)訪問(wèn)的設(shè)備,字符驅(qū)動(dòng)就負(fù)責(zé)驅(qū)動(dòng)字符設(shè)備,這樣的驅(qū)動(dòng)通常實(shí)現(xiàn)read、write、open、和close的調(diào)用[4]。
Linux用戶一般是通過(guò)操作設(shè)備文件來(lái)訪問(wèn)和操作各種設(shè)備的,所以用戶想要使用DS18B20進(jìn)行溫度采集時(shí),只需要對(duì)設(shè)備文件ds18b20進(jìn)行打開(kāi)、控制、讀、寫(xiě)、關(guān)閉等一系列操作就可以控制DS18B20進(jìn)行溫度采集。
在字符設(shè)備中存在一種特殊的字符設(shè)備---混雜設(shè)備,這類設(shè)備的主設(shè)備號(hào)都是10,次設(shè)備號(hào)通過(guò)函數(shù)調(diào)用可已進(jìn)行動(dòng)態(tài)分配。本設(shè)計(jì)DS18B20的驅(qū)動(dòng)就被劃歸為字符設(shè)備中的混雜設(shè)備。在驅(qū)動(dòng)文件中只需要對(duì)DS18B20的時(shí)需進(jìn)行讀、寫(xiě)、復(fù)位時(shí)序描寫(xiě)。
四、bootloader相關(guān)知識(shí)
1.Bootloader背景知識(shí) 簡(jiǎn)單地說(shuō),bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,本設(shè)計(jì)可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的運(yùn)行環(huán)境。在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由bootloader來(lái)完成。比如在一個(gè)基于ARM9的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開(kāi)始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的bootloader程序。
bootloaderLinux kernelRoot file system 圖4.1 嵌入式系統(tǒng)軟件層次結(jié)構(gòu)
2.單片機(jī)主控模塊
對(duì)于開(kāi)發(fā)板mini2440有多種bootloader,例如 u-boot,supervivi,v-boot等等。他們之間的區(qū)別就是不同的bootloader可以引導(dǎo)不同內(nèi)核。像supervivi能啟動(dòng)zImage,u-boot能啟動(dòng)uImage,而zImage和uImage的不同之處就在于在編譯時(shí)生成內(nèi)核的文件頭不同。本設(shè)計(jì)采用的是supervivi作為bootloader來(lái)引導(dǎo)Linux內(nèi)核。
Supervivi和許多bootloader一樣它的啟動(dòng)也包括兩個(gè)部分:stage1和stage2。Stage1主要實(shí)現(xiàn)的是硬件的初始化同時(shí)為stage2準(zhǔn)備內(nèi)存空間,并將stage2復(fù)制到內(nèi)存中并設(shè)置堆棧,然后跳轉(zhuǎn)到stage2。.五、Linux內(nèi)核 1.Linux內(nèi)核簡(jiǎn)介
Linux內(nèi)核的主要模塊(或組件)分以下幾個(gè)部分:存儲(chǔ)管理、CPU和進(jìn)程管理、虛擬文件系統(tǒng)、設(shè)備管理和驅(qū)動(dòng)、網(wǎng)絡(luò)通信,以及系統(tǒng)的初始化(引導(dǎo))、系統(tǒng)調(diào)用等。具體如圖5.1所示:
系統(tǒng)調(diào)用接口(System Call Interface)進(jìn)程管理Process Management內(nèi)存管理Memory Management結(jié)構(gòu)Arch虛擬文件系統(tǒng)Vritual File System網(wǎng)絡(luò)協(xié)議棧Network Stack設(shè)備驅(qū)動(dòng)Device Drivers 圖5.1 Linux內(nèi)核架構(gòu)
2.配置編譯生成zImage[5] 使用已經(jīng)移植好的Linux-2.6.29內(nèi)核進(jìn)行zImage的生成,在此過(guò)程中通過(guò)內(nèi)核編譯的方式把DS18B20的驅(qū)動(dòng)加載到內(nèi)核當(dāng)中,而不是使用內(nèi)核模塊的方式加載驅(qū)動(dòng)程序,然后通過(guò)內(nèi)核配置,編譯最后生成zImage。添加DS18B20驅(qū)動(dòng)界面如下圖:
圖5.2 添加設(shè)備DS18B20
六、QT測(cè)溫應(yīng)用程序 1.QT應(yīng)用程序流程圖
根據(jù)畢設(shè)要求,要設(shè)計(jì)一個(gè)直觀的溫度采集界面,能夠?qū)崟r(shí)顯示為溫度值,所以QT界面上能夠同時(shí)顯示時(shí)間和溫度,使得操作者能夠清楚地看到溫度值和當(dāng)前時(shí)間。應(yīng)用程序具體流程如圖6.1所示:
開(kāi)始圖形界面屬性初始化1秒定時(shí)器開(kāi)始定時(shí)判斷能否打開(kāi)設(shè)備DS18B20YY寫(xiě)入命令讀取溫度獲取當(dāng)前系統(tǒng)時(shí)間顯示溫度顯示時(shí)間NN1秒定時(shí)是否結(jié)束結(jié)束
圖6.1 應(yīng)用程序流程圖
2.QT應(yīng)程序的設(shè)計(jì)
QT應(yīng)用程序主要是通過(guò)QT designer進(jìn)行設(shè)計(jì)的,根據(jù)畢設(shè)要求,要設(shè)計(jì)一個(gè)直觀的溫度采集界面,能夠?qū)崟r(shí)顯示為溫度值,所以QT界面上能夠同時(shí)顯示時(shí)間和溫度,使得操作者能夠清楚地看到溫度值和當(dāng)前時(shí)間。具體界面如下圖:
[6]
圖6.2 利用QT designer設(shè)計(jì)界面
通過(guò)在x86平臺(tái)下通過(guò)配置編譯最后看到在x86平臺(tái)下QT應(yīng)用程序的界面:
圖6.3 x86平臺(tái)下QT程序的運(yùn)行結(jié)果
七、root_qtopia件系統(tǒng)和綜合調(diào)試
雖然root_qtopia這個(gè)文件系統(tǒng)的GUI是基于Qtopia的,但其初始化啟動(dòng)過(guò)程卻是由大部分由busybox完成,Qtopia(qpe)只是在啟動(dòng)的最后階段被開(kāi)啟[7]。
在進(jìn)行了上面步驟的前提下本設(shè)計(jì)得到了zImage 和root_qtopia.img文件,基于此基本上完成了設(shè)計(jì)然后進(jìn)行綜合調(diào)試[8],具體步驟如下:
(1)安裝bootloader:連接好超級(jí)終端并作如下設(shè)置、dnw、電源線,并把開(kāi)關(guān)撥向Nor Flash一端。在超級(jí)終端可以看到如下界面:
圖7.1 串口超級(jí)終端設(shè)置
圖7.2 用H-JTAG和H-JFlasher燒寫(xiě)vivi
圖7.3 supervivi啟動(dòng)界面
(2)分別通過(guò)選擇“x”、“v”、“k”、“y”分別把supervivi下載到Nand Flash中然后把開(kāi)關(guān)撥向Nand Flash一側(cè),給開(kāi)發(fā)上電,進(jìn)入dev目錄查看設(shè)備中是否有DS18B20。
圖7.4 查看DS18B20設(shè)備是否存在
(3)綜合調(diào)試結(jié)果:
圖7.5 綜合調(diào)試結(jié)果圖
參 考 文 獻(xiàn)
[1] 孫戈,盧建軍,高理.基于S3C2440的嵌入式Linux開(kāi)發(fā)實(shí)例.西安:西安電子科技大學(xué)出版社,2010.[2] 三星公司.S3C2440 User's Manual.http://.[7] 百度文庫(kù).root_qtopia文件系統(tǒng)啟動(dòng)流程http://wenku.baidu.com/view/251bdb27a5e9856a56126021.html.[8] 友善之臂.mini2440開(kāi)發(fā)板用戶手冊(cè).http://www.arm9home.net/read.php?tid-5682.html
第二篇:基于ARM的視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于ARM的視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
摘要
本文根據(jù)家庭視頻采集系統(tǒng)的要求,提出一種基于ARM的網(wǎng)絡(luò)視頻采集方案。方案要求視頻的實(shí)時(shí)傳輸、實(shí)時(shí)監(jiān)控。本系統(tǒng)以Intel Xscale 芯片和嵌入式Linux系統(tǒng)為平臺(tái),在平臺(tái)中搭建網(wǎng)絡(luò)視頻服務(wù)器,并以它為中介,負(fù)責(zé)將USB攝像頭采集到得視頻數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)服務(wù)器中,最后發(fā)送到申請(qǐng)監(jiān)控的遠(yuǎn)程PC機(jī)中,遠(yuǎn)程PC只需在網(wǎng)頁(yè)中便能實(shí)時(shí)的看到監(jiān)控端的視頻圖像。
論文首先闡述了嵌入式網(wǎng)絡(luò)視頻采集技術(shù)的發(fā)展、現(xiàn)狀和前景,然后介紹了嵌入式硬件系統(tǒng)結(jié)構(gòu)和嵌入式Linux操作系統(tǒng)的特點(diǎn),闡述了嵌入式硬件整體結(jié)構(gòu),使大家大體的完整的對(duì)系統(tǒng)硬件有詳細(xì)的了解,實(shí)際記錄了嵌入式操作系統(tǒng)內(nèi)核的編譯和移植,介紹了Bootloader的基本原理和啟動(dòng)過(guò)程,實(shí)現(xiàn)了視頻采集程序的編譯和移植,研究了嵌入式一般驅(qū)動(dòng)程序的使用。隨后,本文詳細(xì)描述了視頻采集程序的整體結(jié)構(gòu)框圖和具體功能代碼塊、網(wǎng)絡(luò)通信編程技術(shù)、圖像編解碼、嵌入式視頻服。
關(guān)鍵詞:ARM;嵌入式;Linux;視頻采集
I
目錄
摘 要.............................................................................................................................I 第1章 引言.................................................................................................................1
1.1 課題的背景和來(lái)源..........................................................................................1 1.2本文的內(nèi)容及主要工作..................................................................................1 第2章 嵌入式ARM系統(tǒng)硬件結(jié)構(gòu)簡(jiǎn)介..................................................................3
2.1 視頻監(jiān)控系統(tǒng)結(jié)構(gòu)簡(jiǎn)介..................................................................................3 2.2 ARM處理器簡(jiǎn)介.............................................................................................3 2.3 XSCALE體系結(jié)構(gòu)............................................................................................4 2.4 主要硬件電路說(shuō)明..........................................................................................7 第3章 嵌入式ARM系統(tǒng)軟件結(jié)構(gòu)..........................................................................9
3.1 LINUX操作系統(tǒng)簡(jiǎn)介.......................................................................................9 3.2 交叉編譯環(huán)境的建立....................................................................................10 3.3 嵌入式LINUX操作系統(tǒng)移植........................................................................11 3.3.1 BootLorder移植...................................................................................11 3.3.2 Linux 內(nèi)核移植...................................................................................12 3.3.3 嵌入式文件系統(tǒng).................................................................................13 3.4 LINUX下的程序調(diào)試.....................................................................................14 第4章 USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)...............................................................................15 4.1 設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介........................................................................................15 4.2 LINUX下驅(qū)動(dòng)程序的實(shí)現(xiàn).............................................................................18 4.3 USB攝像頭驅(qū)動(dòng)程序設(shè)計(jì)............................................................................20 第5章 視頻采集功能的設(shè)計(jì)...................................................................................23 5.1 基于V4L的編程...........................................................................................24 5.1.1 攝像頭相關(guān)數(shù)據(jù)結(jié)構(gòu).........................................................................24 5.1.2 攝像頭基本功能實(shí)現(xiàn).........................................................................25 5.1.3 視頻數(shù)據(jù)采集.....................................................................................29 5.2 圖像編解碼....................................................................................................32 5.2.1 編解碼介紹.........................................................................................32 5.2.2 系統(tǒng)壓縮技術(shù).....................................................................................33
第1章引言
1.1課題的背景和來(lái)源
二十一世紀(jì)的網(wǎng)絡(luò)化、數(shù)字化讓人們的生活每天都發(fā)生著翻天覆地的變化,獲取信息的方便和快捷可以使人們?cè)谛畔⒒慕裉祛I(lǐng)先一步創(chuàng)造出巨大的利益,而獲取信息的重要途徑就是眼睛。據(jù)統(tǒng)計(jì),人類采集信息的80%來(lái)自視覺(jué)。圖像和視頻是對(duì)客觀事物生動(dòng)、形象的描述,是一種最直觀的表現(xiàn)方式。而視頻監(jiān)控技術(shù)因?yàn)樗奖憧旖荨⑸鷦?dòng)形象、信息豐富等特點(diǎn)日益受到人們的青睞,并在各行各業(yè)得到廣泛的應(yīng)用。與此同時(shí),現(xiàn)代網(wǎng)絡(luò)和數(shù)字技術(shù)的快速發(fā)展也為視頻監(jiān)控技術(shù)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
二十一世紀(jì),嵌入式技術(shù)、多媒體處理技術(shù)進(jìn)一步發(fā)展,為視頻監(jiān)控系統(tǒng)的發(fā)展提供了新的出路——嵌入式視頻監(jiān)控系統(tǒng)。嵌入式系統(tǒng)是以應(yīng)用為中心,軟硬件可以剪裁,具有高穩(wěn)定、低成本、功耗低、速度快、實(shí)時(shí)好的專用計(jì)算機(jī)系統(tǒng),它由嵌入式微處理器,配以周邊硬件設(shè)備,接口電路組成。嵌入式系統(tǒng)內(nèi)部使用嵌入式操作系統(tǒng),安裝專用的功能軟件。嵌入式技術(shù)把硬件和軟件集于一體,獨(dú)立工作。嵌入式視頻監(jiān)控系統(tǒng)比其他視頻采集系統(tǒng)在布局區(qū)域范圍上要廣泛;由于使用IP技術(shù),嵌入式視頻監(jiān)控技術(shù)比其他視頻采集系統(tǒng)更具緊密的結(jié)合度,能夠充分利用現(xiàn)代網(wǎng)絡(luò)技術(shù)的成果,并能構(gòu)成復(fù)雜的視頻監(jiān)控網(wǎng)絡(luò);性能上,嵌入式視頻采集系統(tǒng)繼承了嵌入式技術(shù)的優(yōu)點(diǎn),非常適合自動(dòng)化的環(huán)境。
因此,嵌入式視頻采集技術(shù)正在我國(guó)快速的發(fā)展,積極的研究會(huì)加強(qiáng)我們?cè)谶@方面技術(shù)的學(xué)習(xí),也會(huì)為視頻監(jiān)控技術(shù)的發(fā)展貢獻(xiàn)力量。
1.2本文的內(nèi)容及主要工作
根據(jù)畢業(yè)設(shè)計(jì)的初衷,我們需要設(shè)計(jì)基于ARM的網(wǎng)絡(luò)視頻采集系統(tǒng)。在監(jiān)控系統(tǒng)中,視頻采集、傳輸、播放的功能不是由專門視頻處理芯片完成,而是由軟件實(shí)現(xiàn)。
論文首先介紹了嵌入式ARM系統(tǒng)的硬件結(jié)構(gòu)和軟件結(jié)構(gòu),方便大家熟悉ARM和Linux系統(tǒng),包括嵌入式設(shè)備的硬件結(jié)構(gòu),邏輯框圖和Linux的基本操作、安裝方法;第二,研究了嵌入式的一些驅(qū)動(dòng)程序,主要是攝像頭驅(qū)動(dòng)程序
V4L,系統(tǒng)中選用的攝像頭芯片——中星微301;第三,研究了視頻監(jiān)控的具體流程和實(shí)現(xiàn)方式,讓大家在總體上對(duì)整個(gè)系統(tǒng)有一個(gè)大概的認(rèn)知。
本次設(shè)計(jì)的目的只有一個(gè),就是實(shí)現(xiàn)視頻的實(shí)時(shí)監(jiān)控。圍繞它,不管是硬件結(jié)構(gòu)還是軟件流程,都需要學(xué)習(xí)和研究,不斷調(diào)試,決不放棄。
總之,論文的內(nèi)容都是圍繞如何建立一個(gè)視頻采集系統(tǒng)。無(wú)論是從哪個(gè)方面,我們都是為這個(gè)目標(biāo)而努力。2
第2章嵌入式ARM系統(tǒng)硬件結(jié)構(gòu)簡(jiǎn)介
2.1視頻監(jiān)控系統(tǒng)結(jié)構(gòu)簡(jiǎn)介
網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)是基于嵌入式技術(shù)設(shè)計(jì)的。嵌入式并沒(méi)有統(tǒng)一的定義,但目前有一個(gè)廣泛而又被認(rèn)可的規(guī)范:將軟件產(chǎn)品固化到硬件平臺(tái)上,完成應(yīng)有的功能既是嵌入式。
基于嵌入式ARM技術(shù)的視頻監(jiān)控系統(tǒng)服務(wù)器端采用攝像頭不斷的采集圖像,壓縮成視頻流,然后通過(guò)網(wǎng)絡(luò)發(fā)送到申請(qǐng)監(jiān)控的客戶端。監(jiān)控系統(tǒng)的使用者可以在遠(yuǎn)程實(shí)現(xiàn)網(wǎng)頁(yè)上的實(shí)時(shí)監(jiān)控和一些簡(jiǎn)單的功能操作。系統(tǒng)整體結(jié)構(gòu)如圖2.1所示[1]。
LCDJTAG攝像頭ZC301CPU單元Intel Xscale以太網(wǎng)控制器遠(yuǎn)程PC客戶端SDRAMFLASH
圖2.1 系統(tǒng)整體結(jié)構(gòu)圖
該系統(tǒng)中CPU采用基于ARM的PXA270微處理器,通過(guò)在其上運(yùn)行Linux操作系統(tǒng),執(zhí)行Boa視頻服務(wù)器,接受并處理來(lái)自攝像頭的圖像信號(hào),通過(guò)以太網(wǎng)控制器發(fā)送至遠(yuǎn)端,實(shí)現(xiàn)視頻數(shù)據(jù)的遠(yuǎn)程傳輸和接受,達(dá)到視頻監(jiān)控的目的[2]。
2.2ARM處理器簡(jiǎn)介
ARM,既是一個(gè)公司的名字,也是對(duì)一類微處理器的通稱。ARM嵌入式微處理器是全球領(lǐng)先的16/32位RISK處理器芯片知識(shí)產(chǎn)權(quán)設(shè)計(jì)供應(yīng)商ARM(AdvancedRISKMachines)公司的產(chǎn)品。ARM公司本身不直接從事芯片生產(chǎn),而是依靠轉(zhuǎn)讓設(shè)計(jì)許可,由合作公司生產(chǎn)各具特色的芯片。
ARM處理器以其完整的體系結(jié)構(gòu),極小的體積、極低的功耗、極低的成本、極高的性能,及時(shí)根據(jù)嵌入對(duì)象的不同進(jìn)行功能上的擴(kuò)展的優(yōu)勢(shì),在眾多種類的嵌入式微處理器中脫穎而出。基于ARM技術(shù)的微處理器應(yīng)用占據(jù)了32位RISC微處理器75%以上的市場(chǎng)份額,ARM技術(shù)正在逐步滲入到我們生活的各個(gè)方面。
采用RISC架構(gòu)的ARM微處理器一般具有如下特點(diǎn):
(1)采用固定長(zhǎng)度的指令格式,指令規(guī)整、簡(jiǎn)單、基本尋址方式有2~3種;(2)使用單周期指令,便于流水線操作執(zhí)行;
(3)大量使用寄存器,數(shù)據(jù)處理指令只對(duì)寄存器進(jìn)行操作,以提高指令的執(zhí)行效率;
(4)所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,從而提高指令的執(zhí)行效率;
(5)可用加載/存儲(chǔ)指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率;(6)可在一條數(shù)據(jù)處理指令中同時(shí)完成邏輯處理和移位處理;(7)在循環(huán)處理中使用地址的自動(dòng)增減來(lái)提高運(yùn)行效率。
目前,ARM處理器有ARM7、ARM9、ARM9E、ARM10、ARM10E、SecurCore、StrongARM和XScale等系列。每個(gè)系列除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外,都有各自的特點(diǎn)和應(yīng)用領(lǐng)域。
2.3XScale體系結(jié)構(gòu)
Xscale核是采用ARM V5TE架構(gòu)的處理器,是Intel公司的StrongARM的升級(jí)換代產(chǎn)品,它具有高性能、低功耗等特點(diǎn),并在流水線設(shè)計(jì)、DSP處理和指令設(shè)計(jì)中有很大改進(jìn)[3]。ARM的體系結(jié)構(gòu)是基于RISK的,XScale是ARM處理器的一種,所以XScale具有RISK的基本特性。而且針對(duì)嵌入式系統(tǒng),XScale構(gòu)架還引入了Pentium處理器工藝和系統(tǒng)結(jié)構(gòu)技術(shù),實(shí)現(xiàn)了Pentium微處理器體系結(jié)構(gòu)的一系列高性能技術(shù),達(dá)到了高性能、低功耗和小體積等嵌入式系統(tǒng)要求的特性。它的特點(diǎn)有:超流水線、高主頻、存儲(chǔ)體系、分支預(yù)測(cè)和指令集體系結(jié)構(gòu)。本設(shè)計(jì)采用的就是基于英特爾Xscale構(gòu)架的一種32位嵌入式處理器,它除了應(yīng)用于掌上電腦之中外,還可以應(yīng)用于智能手機(jī)、網(wǎng)絡(luò)存儲(chǔ)設(shè)備、骨干網(wǎng)路由器等電子設(shè)備。
PXA27x系列處理器是英特爾當(dāng)前最新推出的嵌入式處理器。它的時(shí)鐘頻率從312到624MHz不等,并內(nèi)建64MB的堆棧型Intel StrataFlash內(nèi)存。內(nèi)置了英特爾的無(wú)線MMX技術(shù),能夠顯著提升多媒體性能。
OURS-PXA270-EP是一款基于INTEL XSCALE PXA270處理器,針對(duì)高效
嵌入式系統(tǒng)教學(xué)和實(shí)驗(yàn)科研的平臺(tái)。這款設(shè)備主要包括核心板與底版兩個(gè)部分,核心板主要集成了高速的PXA270 CPU,配套的存儲(chǔ)器,網(wǎng)卡等設(shè)備;底版主要是各種類型的接口與擴(kuò)展口。
核心板(8層PCB電路)系統(tǒng)包括:
CPU: INTEL PXA270(520M),支持GDB調(diào)試; SDRAM: 64M 工作在104M外頻上; FLASH: 32M INTEL Nor FLASH;Net: 10/100M Ethernet controller(LAN91C111);SUPERIO: WINBOND 83977;CPLD: XILINX 95144(117USER IO);總線驅(qū)動(dòng)器: 若干;核心板正面如圖2.2所示,核心板背面如圖2.3所示。
SDRAMCPUdrvdrvCPLDdrvFLASHdrvdrvFLASHLDOdrv 圖2.2 核心板正面圖
SDRAMdrvEthernetdrvdrvdrv100PIN CONNECTORSuperIOLDO 圖2.3 核心板背面圖
底版(4層PCB電路)如圖2.4所示。包括: Ethernet: 10/100接口1個(gè)
UART: 6個(gè)(包括RS232,RS485,IRDA,全功能串口)USB1.1:2個(gè)(1個(gè)host 一個(gè)device)PS2:2個(gè)(KEYBOARD&MOUSE)標(biāo)準(zhǔn)并口:1個(gè) PCMCIA: 1個(gè) IDE:1個(gè) SD/MMC: 1個(gè) SMC:1個(gè) CAMERA:1個(gè) 96PIN功能擴(kuò)展口:2個(gè) 4X5 小鍵盤
CPU_JTAG CPLD_JTAG LED SHARP LQ080V3DG01 8寸真彩LCD
640X480 VGA 640X480 LED 8X8點(diǎn)陣
一組7段LED數(shù)碼管
4個(gè)
串口irda串口串口串口LCD接口LCD接口并口VGALED點(diǎn)陣音頻1音頻2音頻3PCMCIA 卡LED數(shù)碼管SMC 卡核心板SDPSPSUSBUSB485NET鍵盤 圖2.4 底版圖
2.4主要硬件電路說(shuō)明
嵌入式設(shè)備除了以ARM芯片為主要控制單元,也有很多周邊電路和外圍設(shè)備,它們有的幫助ARM處理信號(hào)、有的負(fù)責(zé)存儲(chǔ)數(shù)據(jù)、有的進(jìn)行網(wǎng)絡(luò)連接、有的用來(lái)數(shù)據(jù)通信,這些周邊設(shè)備缺一不可,不能替代。
首先介紹CPU核心總線[4],總線是CPU和其他設(shè)備的橋梁。CPU是通過(guò)總線信號(hào)來(lái)控制SDRAM ,FLASH,網(wǎng)卡,SUPERIO等外部設(shè)備的,無(wú)論是低速還是高速,只要是與總線相關(guān)的芯片,都要和CPU總線信號(hào)有關(guān)。其次,研究嵌入式系統(tǒng)內(nèi)存——SDRAM。SDRAM是嵌入式系統(tǒng)的內(nèi)存,具有單位空間存儲(chǔ)容量大和價(jià)格便宜的優(yōu)點(diǎn),已廣泛應(yīng)用在各種嵌入式系統(tǒng)中。當(dāng)系統(tǒng)啟動(dòng)時(shí),CPU首先從復(fù)位地址0x0處讀取啟動(dòng)代碼,在完成系統(tǒng)的初始化后,程序代碼一般應(yīng)調(diào)入SDRAM中運(yùn)行,以提高系統(tǒng)的運(yùn)行速度。同時(shí),系統(tǒng)及用戶堆棧、運(yùn)行數(shù)據(jù)也都放在SDRAM中。SDRAM的存儲(chǔ)單元可以理解為一個(gè)電容,總是傾向于放電,為避免數(shù)據(jù)丟失,必須定時(shí)刷新(充電)。因此,要在系統(tǒng)中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統(tǒng)中另外加入刷新控制邏輯電路。PXA270芯片在片內(nèi)具有獨(dú)立的SDRAM刷新控制邏輯,可方便地與SDRAM接口。除了SDRAM,F(xiàn)LASH也是一種存儲(chǔ)媒介。FLASH一般具有NOR型和NAND型。NAND型FLASH單元密度高,寫(xiě)入和擦除速度非常快,而且一般NAND型FLASH的存儲(chǔ)容量很大。NOR型FLASH的優(yōu)點(diǎn)是芯片內(nèi)執(zhí)行命令,這樣應(yīng)用程序可以直接在FLASH內(nèi)運(yùn)行,不用進(jìn)入內(nèi)存,使得它的傳輸效率很高。嵌入式設(shè)備最大的優(yōu)點(diǎn)就是網(wǎng)絡(luò)功能強(qiáng)大,它能像PC一樣方便地連接到互聯(lián)網(wǎng)上,這些功能都是網(wǎng)絡(luò)控制器的作用。也就是Ethernet Controller,本系統(tǒng)采用SMSC公司的單芯片的網(wǎng)絡(luò)控制器,LAN91C111。它可以工作在兩種速度下,10M以太網(wǎng)或者100M以太網(wǎng)。LAN91C111的工作流程是,驅(qū)動(dòng)程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫(xiě)入芯片并啟動(dòng)發(fā)送命令,LAN91C111會(huì)自動(dòng)把數(shù)據(jù)包轉(zhuǎn)換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號(hào)后自動(dòng)將其還原成數(shù)據(jù),并按指定格式存放在芯片RAM中以便主機(jī)程序取用。就是LAN91C111完成數(shù)據(jù)包和電信號(hào)之間的相互轉(zhuǎn)換。最后,說(shuō)明一下串口電路,在嵌入式視頻監(jiān)控系統(tǒng)中,串口起到了很重要地作用,嵌入式系統(tǒng)啟動(dòng)的信息都可以通過(guò)串口傳到PC上,極大地方便了系統(tǒng)的移植和軟件的調(diào)試。大多數(shù)情況下,嵌入式CPU的串口0會(huì)作為CPU的一個(gè)終端,為用戶與CPU交互提供基本的輸出輸入信息。當(dāng)CPU運(yùn)行BOOT代碼時(shí),通常只有這個(gè)終端 ;運(yùn)行LINUX內(nèi)核時(shí),如果有LCD顯示,串口0與LCD終端會(huì)同時(shí)有效。串口0終端的交互
方式是命令行的模式,在BOOT階段,支持簡(jiǎn)單的BOOT命令。8
第3章嵌入式ARM系統(tǒng)軟件結(jié)構(gòu)
3.1Linux操作系統(tǒng)簡(jiǎn)介
Linux是一個(gè)類似Unix的操作系統(tǒng),它起源于芬蘭一個(gè)名為L(zhǎng)inusTorvaldS的業(yè)余愛(ài)好者,現(xiàn)已成為最流行的一款開(kāi)放源代碼的操作系統(tǒng)。Linux從問(wèn)世至今,短短時(shí)間內(nèi)已發(fā)展成為一個(gè)功能強(qiáng)大、設(shè)計(jì)完善的操作系統(tǒng)。Linux系統(tǒng)不僅能夠運(yùn)行于PC平臺(tái),還在嵌入式系統(tǒng)方面大放光芒。由于Linux的源碼開(kāi)放,內(nèi)核精簡(jiǎn)且性能強(qiáng)悍,不依賴于具體廠商,能廣泛適用于各種硬件設(shè)備,系統(tǒng)二次開(kāi)發(fā)成本極低,因此在IT業(yè)界已經(jīng)達(dá)成共識(shí),即采用嵌入式Linux作為嵌入式操作系統(tǒng)是大勢(shì)所趨[5]。
嵌入式Linux是目前嵌入式系統(tǒng)領(lǐng)域中發(fā)展勢(shì)頭非常迅猛的系統(tǒng)。嵌入式Linux是指對(duì)Linux經(jīng)過(guò)小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾M字節(jié)的存儲(chǔ)器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場(chǎng)合的專用操作系統(tǒng)。目前正在開(kāi)發(fā)的嵌入式系統(tǒng)中,49%的項(xiàng)目選擇嵌入式Linux作為操作系統(tǒng)。嵌入式Linux現(xiàn)已成為嵌入式操作系統(tǒng)的理想選擇[6]。目前基于嵌入式Linux的應(yīng)用已經(jīng)遍布很多領(lǐng)域,比如移動(dòng)多媒體設(shè)備、手持設(shè)備、車載導(dǎo)航系統(tǒng)、機(jī)械控制等。嵌入式Linux分為兩種類型:在沒(méi)有使用MMU的平臺(tái)上(無(wú)內(nèi)存虛實(shí)地址轉(zhuǎn)換和映射)的一般為uCLinux;而在有MMU平臺(tái)上,則使用原本地嵌入式Linux版本。由于在目前的主流嵌入式ARM中大多不具有MMU,因此只用IM左右的內(nèi)核就能實(shí)現(xiàn)網(wǎng)絡(luò)功能和任務(wù)調(diào)度的Linux系統(tǒng)就可以適用于從高端服務(wù)器到嵌入式應(yīng)用的各級(jí)平臺(tái)。ARM技術(shù)和Linux成功地結(jié)合,應(yīng)用于數(shù)以千計(jì)的商業(yè)產(chǎn)品中。從便攜式消費(fèi)品、網(wǎng)絡(luò)和無(wú)線設(shè)備,到自動(dòng)化設(shè)備、醫(yī)療設(shè)備和存儲(chǔ)產(chǎn)品,這一應(yīng)用列表與日俱增。ARM和Linux的結(jié)合充分滿足了各類應(yīng)用對(duì)嵌入式平臺(tái)高性能、低功耗和低價(jià)格的要求,通過(guò)開(kāi)發(fā)環(huán)境、開(kāi)源社區(qū)和ARM的商業(yè)伙伴的優(yōu)勢(shì)為嵌入式開(kāi)發(fā)提供了更靈活的選擇。
本次設(shè)計(jì)的開(kāi)發(fā)環(huán)境為redhat9.0系統(tǒng),在Windows XP 下安裝虛擬機(jī),在虛擬機(jī)中安裝Linux系統(tǒng),這樣可以屏蔽底層差別,避免硬件驅(qū)動(dòng)帶來(lái)的麻煩,而且還能方便的使用串口、并口、USB接口,快速的進(jìn)入實(shí)驗(yàn)環(huán)境。圖3.1為虛擬機(jī)下Linux系統(tǒng)啟動(dòng)后的情況。
圖3.1 虛擬機(jī)下Linux操作系統(tǒng)
3.2交叉編譯環(huán)境的建立
通常嵌入式系統(tǒng)的軟件編譯和執(zhí)行是在兩個(gè)不同平臺(tái)上進(jìn)行的。編譯是在宿主機(jī),一般為裝有Linux的pc;執(zhí)行是在目標(biāo)機(jī),即嵌入式系統(tǒng)的硬件平臺(tái)。一般是在宿主機(jī)上通過(guò)跨平臺(tái)交叉編譯器把源文件編譯成目標(biāo)平臺(tái)上可執(zhí)行的文件,再通過(guò)串口、并口或者網(wǎng)絡(luò)下載至目標(biāo)平臺(tái)上的FLASH或者其它存儲(chǔ)介質(zhì),然后由目標(biāo)機(jī)來(lái)運(yùn)行這些軟件。這里所說(shuō)的跨平臺(tái)編譯器和一般的編譯器功能類似,都是把源代碼通過(guò)編譯器編譯成目標(biāo)文件,然后通過(guò)鏈接器、可重定位器程序和定位器把目標(biāo)文件重新定位成可執(zhí)行文件。和通用的編譯器之間最大的差別就在于跨平臺(tái)編譯器編譯出來(lái)的可執(zhí)行程序通常只能在特定CPU所屬平臺(tái)上運(yùn)行。所以一般來(lái)說(shuō)每種CPU都對(duì)應(yīng)有不同的跨平臺(tái)編譯器。
本系統(tǒng)采用基于XScale的PXA270,可以使用常用的ARM-LINUX-GCC交叉編譯器。要成功構(gòu)建完整的交叉編譯環(huán)境需要在宿主機(jī)上創(chuàng)建一系列的工具包括C/C++編譯器、匯編器、鏈接器、嵌入式系統(tǒng)的標(biāo)準(zhǔn)C庫(kù)和GDB代碼級(jí)調(diào)試器。成功建立好開(kāi)發(fā)環(huán)境后便可以運(yùn)用這些工具進(jìn)行嵌入式系統(tǒng)開(kāi)發(fā)[7]。
3.3嵌入式Linux操作系統(tǒng)移植 3.3.1BootLorder移植
BootLoader是系統(tǒng)加電后運(yùn)行的第一段代碼。一般只是在啟動(dòng)時(shí)運(yùn)行很短的時(shí)間,然而對(duì)一個(gè)嵌入式系統(tǒng)來(lái)說(shuō),這一部分卻是整個(gè)系統(tǒng)的一個(gè)無(wú)比重要的組成部分,不可缺少。在一般嵌入式系統(tǒng)中,系統(tǒng)復(fù)位或者加電后通常從地址0x00000000處開(kāi)始執(zhí)行,而這個(gè)地址一般正是存放的BootLoader啟動(dòng)代碼。通過(guò)這段程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終加載操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
BootLoader一般情況下需要包含以下幾個(gè)必備的功能 :(l)初始化處理器。這個(gè)動(dòng)作都是用匯編語(yǔ)言完成的,稱為重置碼(resetcode)或者稱為bootcode,而且對(duì)于每個(gè)CPU都不一樣的,當(dāng)電源接通后就會(huì)執(zhí)行這個(gè)動(dòng)作,通常只有兩三個(gè)匯編指令,目的是將CPU的控制權(quán)轉(zhuǎn)給硬件初始化的程序。
(2)初始化一些必要的硬件。這個(gè)動(dòng)作也大都由匯編語(yǔ)言來(lái)完成,主要是初始化CPU、SDRAM等,其他的硬件,例如串口,可以由c語(yǔ)言等比較高級(jí)的程序語(yǔ)言來(lái)完成后續(xù)動(dòng)作。
(3)設(shè)置處理器的寄存器以及內(nèi)存,關(guān)掉所有的輸入管腳(包括中斷管腳),以防止突然有信號(hào)進(jìn)入妨礙接下來(lái)的硬件初始化動(dòng)作。然后初始化串口,以便后續(xù)運(yùn)行的程序能夠同HOST端進(jìn)行通信,便于調(diào)試。
(4)從特定的位置把操作系統(tǒng)和文件系統(tǒng)調(diào)入內(nèi)存,并設(shè)置一些操作系統(tǒng)所必需的參數(shù),然后把CPU控制權(quán)交給操作系統(tǒng)。有的BootLoader會(huì)先從串口或者網(wǎng)絡(luò)等其他途徑得到內(nèi)核的映像文件,然后把這些文件寫(xiě)入目標(biāo)系統(tǒng)的FLASH或者其它存儲(chǔ)介質(zhì),最后再把內(nèi)核載入RAM執(zhí)行,交出控制權(quán)。
一般BootLoader都包含兩種不同的操作模式:“啟動(dòng)加載”模式和“下載”模式,這種區(qū)別僅對(duì)于開(kāi)發(fā)人員才有意義。從最終用戶的角度看,BootLoader的作用就是用來(lái)加載操作系統(tǒng),而并不存在所謂的啟動(dòng)加載模式與下載模式的區(qū)別。
(l)啟動(dòng)加載(Bootloading)模式:這種模式也稱為“自主”(Autonomous)模式,即BootLoader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶的介入。這種模式是BootLoader的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布的時(shí)候,BootLoader顯然必須工作在這種模式下。
(2)下載(Downloading)模式:在這種模式下,目標(biāo)機(jī)上的BootLoader將通過(guò)串
口連接或者網(wǎng)絡(luò)連接等通信手段從主機(jī)(HOST)下載文件,比如下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機(jī)下載的文件通常首先被BootL0ader保存到目標(biāo)機(jī)的RAM中,然后再被BootLoader寫(xiě)到目標(biāo)機(jī)上的FLASH類固態(tài)存儲(chǔ)設(shè)備中。BootLoader的這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)被使用,此外,以后的系統(tǒng)更新也會(huì)使用BootLoader的這種工作模式。工作于這種模式下的BootLoader通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。
BootLoader的實(shí)現(xiàn)依賴于CPU的體系結(jié)構(gòu),一般來(lái)說(shuō)啟動(dòng)過(guò)程分為兩個(gè)階段。
第一階段依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在第一階段中,而且通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn),運(yùn)行效率比較高。這個(gè)階段完成的任務(wù)一般如下:(l)硬件設(shè)備初始化(屏蔽所有的中斷、關(guān)閉處理器內(nèi)部的指令/數(shù)據(jù)cache);(2)為第二階段準(zhǔn)備RA.M空間;(3)復(fù)制BootLoader的第二階段代碼到RAM空間中;(4)設(shè)置好堆棧并跳轉(zhuǎn)到第二階段的C程序入口點(diǎn)。
第二階段則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。這個(gè)階段主要任務(wù)有:(l)初始化本階段要使用的硬件設(shè)備;(2)檢測(cè)系統(tǒng)內(nèi)存映射;(3)將內(nèi)核映像和根文件系統(tǒng)從FLASH讀到RAM中;(4)為內(nèi)核設(shè)置啟動(dòng)參數(shù);(5)調(diào)用內(nèi)核文件運(yùn)行。
本設(shè)計(jì)中的Bootloader采用Blob,Blob是Boot Loader Object的縮寫(xiě),是一款功能強(qiáng)大的Bootloader。Blob最初是由Jan-Derk Bakker和Erik Mouw兩人為一塊名為L(zhǎng)ART(Linux Advanced Radio Terminal)的開(kāi)發(fā)板寫(xiě)的,該板使用的處理器是StrongARM SA-1100,現(xiàn)在Blob已經(jīng)被成功移植到許多基于ARM的CPU上了。本設(shè)計(jì)中的Intel Xcale就是采用Blob作為Bootloader[8]。
3.3.2Linux 內(nèi)核移植
選用嵌入式Linux作為目標(biāo)機(jī)操作系統(tǒng),一方面由于Linux是一款免費(fèi)的操作系統(tǒng),能很好的降低成本,同時(shí)Linux的開(kāi)發(fā)應(yīng)用現(xiàn)在已經(jīng)成為熱門,有大量的資源可用于學(xué)習(xí)與重復(fù)應(yīng)用,并且Linux系統(tǒng)具有良好的可移植性和可裁剪性,能自動(dòng)支持多任務(wù)管理。一般常用的GUI如QT/E,MiniGUI等都支持Linux。
Linux的開(kāi)發(fā)工具也都可以很方便的免費(fèi)獲得。
系統(tǒng)采用的嵌入式Linux內(nèi)核為隨實(shí)驗(yàn)平臺(tái)光盤中的Linux內(nèi)核,它是針對(duì)這套實(shí)驗(yàn)平臺(tái)所配置的Linux內(nèi)核,內(nèi)核版本為L(zhǎng)inux2.4.20[9]。在實(shí)驗(yàn)過(guò)程中,只需要在這個(gè)內(nèi)核的基礎(chǔ)上進(jìn)行添加和刪減所需要和不需要的功能,編譯后就可以使用了。
在編譯內(nèi)核之前,需要對(duì)內(nèi)核進(jìn)行必要的配置,通過(guò)虛擬機(jī)進(jìn)入/pxa270_linux/linux/目錄后在終端執(zhí)行make menuconfig[10]命令,就可以可視化的配置內(nèi)核需要的功能和要求,本次試驗(yàn),主要是針對(duì)視頻方面,選擇了對(duì)V4L的靜態(tài)加載、對(duì)spca5xx攝像頭驅(qū)動(dòng)的動(dòng)態(tài)加載,這樣就結(jié)束了對(duì)內(nèi)核的配置。編譯內(nèi)核需要?jiǎng)?chuàng)建內(nèi)核依賴關(guān)系、創(chuàng)建內(nèi)核鏡像文件和創(chuàng)建內(nèi)核模塊。首先執(zhí)行makedep命令,讀取配置過(guò)程生成的配置文件,來(lái)創(chuàng)建對(duì)應(yīng)于配置的依賴關(guān)系樹(shù),從而決定哪些需要編譯而哪些不需要;接著需要makeclean刪除前面步驟留下的文件,以避免出現(xiàn)一些錯(cuò)誤;然后便可以生成所需要的內(nèi)核文件了,用make zlmage來(lái)實(shí)現(xiàn)得到可移植的內(nèi)核。內(nèi)核文件通過(guò)并口下載線燒寫(xiě)入開(kāi)發(fā)板中,便可以通過(guò)BootLoader加載運(yùn)行。
3.3.3嵌入式文件系統(tǒng)
嵌入式Linux操作系統(tǒng)一般采用FLASH作為存儲(chǔ)介質(zhì)。FLASH具有獨(dú)特的物理特性,所以必須使用專門的嵌入式文件系統(tǒng)。嵌入式系統(tǒng)對(duì)文件的操作是通過(guò)層次結(jié)構(gòu)實(shí)現(xiàn)的。對(duì)于用戶程序來(lái)說(shuō),文件是有結(jié)構(gòu)的文件,用戶程序通過(guò)對(duì)文件IO函數(shù)操作文件。嵌入式文件系統(tǒng)是嵌入式操作系統(tǒng)的一部分,它的任務(wù)是對(duì)邏輯文件進(jìn)行管理,其工作包括提供對(duì)邏輯文件的操作(復(fù)制、刪除、修改等)接口,方便用戶操作文件和目錄。在文件系統(tǒng)內(nèi)部,根據(jù)存儲(chǔ)設(shè)備的特點(diǎn),使用不同的文件組織模式來(lái)實(shí)現(xiàn)文件的邏輯結(jié)構(gòu)。此外,文件系統(tǒng)要對(duì)管理文件的安全性負(fù)責(zé)。文件系統(tǒng)不能直接控制物理設(shè)備,它是通過(guò)FLASH驅(qū)動(dòng)實(shí)現(xiàn)控制的[11]。
目前FLASH支持的文件系統(tǒng)技術(shù)主要有JFFS2,YAFFS2,TrueFFS,F(xiàn)TL/NTFL,RAMFS,CRAMFS和ROMFS等等。本系統(tǒng)采用的是JFFS2文件系統(tǒng)。
JFFS2文件系統(tǒng)是專門為NAND閃存設(shè)計(jì)的嵌入式文件系統(tǒng),根據(jù)NAND閃存以頁(yè)面為單位存取的特點(diǎn),將文件組織成固定大小的數(shù)據(jù)段。利用NAND閃存提供的每個(gè)頁(yè)面16B的備用空間來(lái)存放ECC(ErrorCorrectionCode)和文件系統(tǒng)的組織信息、,不僅能夠?qū)崿F(xiàn)錯(cuò)誤檢測(cè)和壞塊處理,也能夠提高文件系統(tǒng)的加
載速度。JFFS2采用一種多策略混合的垃圾回收算法,結(jié)合了貪心策略的高效性和隨機(jī)選擇的平均性,達(dá)到了兼顧損耗平均和系統(tǒng)開(kāi)銷的目的。它是日志結(jié)構(gòu)的文件系統(tǒng),提供了損耗平衡和掉電保護(hù),可以有效地避免意外掉電對(duì)文件系統(tǒng)一致性和完整性的影響。JFFS2文件系統(tǒng)是按層次結(jié)構(gòu)設(shè)計(jì)的,分為文件系統(tǒng)管理層接口、JFFS2內(nèi)部實(shí)現(xiàn)層和NAND接口層,這樣就簡(jiǎn)化了其與系統(tǒng)的接口設(shè)計(jì),可以方便地集成到系統(tǒng)中去。與YAFFS相比,它增加了一些功能,因此功能更強(qiáng)。
3.4Linux下的程序調(diào)試
調(diào)試是程序開(kāi)發(fā)過(guò)程中必不可少的一個(gè)重要環(huán)節(jié),通用PC機(jī)的程序調(diào)試與嵌入式操作系統(tǒng)的調(diào)試環(huán)境上有著明顯的區(qū)別,前者調(diào)試器和被調(diào)試的程序往往是運(yùn)行在同一臺(tái)機(jī)器上,是相同操作系統(tǒng)下的兩個(gè)不同的進(jìn)程,調(diào)試器通過(guò)操作系統(tǒng)專用調(diào)用接口控制被調(diào)試進(jìn)程,后者通常為遠(yuǎn)程調(diào)試,調(diào)試器一般運(yùn)行于桌面操作系統(tǒng)上,而被調(diào)試的程序則運(yùn)行在嵌入式系統(tǒng)之上,因此需要協(xié)調(diào)這兩個(gè)程序之間的通信。Linux下的調(diào)試工具非常的少,gdb是Linux下最著名的調(diào)試工具,它是GNUC自帶的調(diào)試工具,它可以使開(kāi)發(fā)人員了解程序運(yùn)行的詳細(xì)細(xì)節(jié),從而消除程序的錯(cuò)誤,達(dá)到調(diào)試的目的,gdb還具有遠(yuǎn)程調(diào)試功能,可以滿足嵌入式系統(tǒng)調(diào)試的要求,在調(diào)試過(guò)程中PC機(jī)也稱為宿主機(jī)和嵌入式系統(tǒng)通過(guò)串口協(xié)議或者TCP/IP協(xié)議連接起來(lái),遠(yuǎn)程主機(jī)上運(yùn)行被gdb規(guī)范斷點(diǎn)改造過(guò)的內(nèi)核,當(dāng)條件成立時(shí),斷點(diǎn)被激活,然后等待本地宿主機(jī)的連接命令,一旦連接成功,宿主機(jī)就可以向遠(yuǎn)程嵌入式系統(tǒng)發(fā)送調(diào)試命令了。在調(diào)試過(guò)程中g(shù)db通過(guò)調(diào)試stub來(lái)完成通信功能,調(diào)試stub是嵌入式操作系統(tǒng)中的一小段代碼,它提供了運(yùn)行g(shù)db的宿主機(jī)和嵌入式系統(tǒng)進(jìn)程之間交互的一個(gè)媒介。
除了使用調(diào)試器外還可以直接在程序中使用printf()或printk打印函數(shù),這種方法功能比較弱,效率低下,但在內(nèi)核模塊調(diào)試時(shí)這是唯一的方法。14
第4章USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
4.1設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介
Linux系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序扮演著特殊的角色。它就像一個(gè)獨(dú)立的黑盒子一樣,使某個(gè)特定的硬件可以相應(yīng)一個(gè)定義良好的內(nèi)部編程接口并且完成隱藏設(shè)備的作用。用戶只需調(diào)用一組標(biāo)準(zhǔn)化的函數(shù)完成操作,而且這些操作與特定的驅(qū)動(dòng)程序無(wú)關(guān)。驅(qū)動(dòng)程序的任務(wù)就是將這些函數(shù)映射到作用硬件的具體操作上。這樣的模塊化的驅(qū)動(dòng)程序結(jié)構(gòu)使得Linux系統(tǒng)中的驅(qū)動(dòng)程序可以獨(dú)立于內(nèi)核的其他部分,可以在需要使用的時(shí)候?qū)Ⅱ?qū)動(dòng)“插入”內(nèi)核。
從系統(tǒng)運(yùn)行順序來(lái)看,硬件平臺(tái)啟動(dòng)運(yùn)行Linux后,啟用了MMU單元即內(nèi)存管理單元,在這種模式下系統(tǒng)不能直接對(duì)物理地址進(jìn)行訪問(wèn)。若要對(duì)某一硬件外設(shè)進(jìn)行讀寫(xiě),需要通過(guò)內(nèi)核調(diào)用該硬件的驅(qū)動(dòng)來(lái)實(shí)現(xiàn)。
上面已經(jīng)說(shuō)過(guò),驅(qū)動(dòng)程序的作用在于向應(yīng)用程序提供訪問(wèn)硬件設(shè)備的接口,驅(qū)動(dòng)程序屏蔽了硬件實(shí)現(xiàn)上的細(xì)節(jié)操作,于是應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。Linux以模塊的形式加載設(shè)備類型,通常是一個(gè)模塊對(duì)應(yīng)實(shí)現(xiàn)一個(gè)設(shè)備驅(qū)動(dòng)。模塊是內(nèi)核的一部分,它們沒(méi)有被編譯到內(nèi)核中,而是分別被編譯并鏈接成一組目標(biāo)文件??梢愿鶕?jù)用戶的需要在不需要對(duì)內(nèi)核進(jìn)行重新編譯的情況下動(dòng)態(tài)載入正在運(yùn)行的內(nèi)核,或從正在運(yùn)行的內(nèi)核中卸載。利用這種機(jī)制,內(nèi)核尺寸可以保持在最小,并具有最大的靈活性,也便于檢驗(yàn)新的內(nèi)核代碼,而不需要重新編譯內(nèi)核并重新引導(dǎo)。設(shè)備驅(qū)動(dòng)程序一般需要完成以下功能:(l)對(duì)設(shè)備初始化和釋放;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);(3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序的請(qǐng)求數(shù)據(jù);(4)檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。
在Linux操作系統(tǒng)下有兩類主要設(shè)備文件類型:塊設(shè)備、字符設(shè)備。用戶進(jìn)程正是通過(guò)設(shè)備文件來(lái)與硬件打交道。每個(gè)設(shè)備文件都有其文件屬性,表示是字符設(shè)備還是塊設(shè)備。另外每個(gè)文件都有2個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序;第二個(gè)是從設(shè)備號(hào),標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)驅(qū)動(dòng)程序。
Linux驅(qū)動(dòng)程序可以分為三個(gè)主要部分: 15
(l)自動(dòng)配置和初始化子程序,負(fù)責(zé)檢測(cè)所要驅(qū)動(dòng)的硬件設(shè)備是否存在和能否正常工作。如果該設(shè)備正常,則對(duì)這個(gè)設(shè)備及其他必需的條件位口中斷、DMA通道)進(jìn)行申一請(qǐng)并初始化。這部分驅(qū)動(dòng)程序僅在初始化時(shí)被調(diào)用一次。
(2)服務(wù)于I/O請(qǐng)求的子程序,又稱為驅(qū)動(dòng)程序的上半部分。調(diào)用這部分程序是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行時(shí),系統(tǒng)仍認(rèn)為是與進(jìn)行調(diào)用的進(jìn)程屬于同一個(gè)進(jìn)程,只是由用戶態(tài)變成了核心態(tài),但仍具有進(jìn)行此系統(tǒng)調(diào)用的用戶程序的運(yùn)行環(huán)境,因而可以在其中調(diào)用與進(jìn)程運(yùn)行環(huán)境相關(guān)的函數(shù)。
(3)中斷服務(wù)子程序,又稱為驅(qū)動(dòng)程序的下半部分。在Linux操作系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動(dòng)程序的中斷服務(wù)子程序,而是由Linux系統(tǒng)來(lái)接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。中斷可以在任何一個(gè)進(jìn)程運(yùn)行時(shí)產(chǎn)生,因而在中斷服務(wù)子程序被調(diào)用時(shí),不能依賴于任何進(jìn)程的狀態(tài),也就不能調(diào)用任何與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。因?yàn)樵O(shè)備驅(qū)動(dòng)程序一般支持同一類型的若干設(shè)備,所以一般在系統(tǒng)調(diào)用中斷服務(wù)子程序時(shí),都帶有一個(gè)或多個(gè)參數(shù),以唯一標(biāo)識(shí)請(qǐng)求服務(wù)的設(shè)備。
在系統(tǒng)內(nèi)部,I/O設(shè)備的存取通過(guò)設(shè)備驅(qū)動(dòng)程序提供的一組固定的入口點(diǎn)來(lái)進(jìn)行,這組入口點(diǎn)在驅(qū)動(dòng)程序初始化時(shí)向系統(tǒng)進(jìn)行登記,以便在系統(tǒng)適當(dāng)?shù)臅r(shí)候調(diào)用。一般來(lái)說(shuō),字符型設(shè)備驅(qū)動(dòng)程序能夠提供如下幾個(gè)入口點(diǎn):(1)open入口點(diǎn):打開(kāi)設(shè)備準(zhǔn)備I/O操作,對(duì)字符特別設(shè)備進(jìn)行打開(kāi)操作,都會(huì)調(diào)用設(shè)備的open入口點(diǎn)。open子程序必須對(duì)將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,如清除緩沖區(qū)等。如果設(shè)備是獨(dú)占的,即同一時(shí)刻只能有一個(gè)程序訪問(wèn)此設(shè)備,則open子程序必須設(shè)置一些標(biāo)志以表示設(shè)備的狀態(tài)。
(2)close入口點(diǎn):關(guān)閉一個(gè)設(shè)備,當(dāng)最后一次使用設(shè)備結(jié)束后,調(diào)用dose子程序。獨(dú)占設(shè)備必須標(biāo)記設(shè)備可再次使用。
(3)read入口點(diǎn):讀取設(shè)備,對(duì)于有緩沖區(qū)的I/0操作,一般從緩沖區(qū)里讀取設(shè)備數(shù)據(jù)。
(4)write入口點(diǎn):向設(shè)備寫(xiě)數(shù)據(jù),對(duì)于有緩沖區(qū)的I/O操作,一般向緩沖區(qū)里寫(xiě)入數(shù)據(jù)。
(5)ioctl入口點(diǎn):執(zhí)行讀寫(xiě)之外的操作。
USB(Universal Serial Bus)即“通用串行外部總線”,用途廣泛,可以外接硬盤、鍵盤、鼠標(biāo)、打印機(jī)等多種設(shè)備,USB能夠使用盡可能少的接口支持盡可能多的外設(shè),尤為適合在嵌入式設(shè)備中使用,是嵌入式接口標(biāo)準(zhǔn)的一個(gè)很好的選擇。
USB總線規(guī)范有1.1版和2.0版。USB1.1支持兩種傳輸速率:低速1.5Mbit/s、全速12Mbit/s,這樣的速率完全滿足鼠標(biāo)、鍵盤、CD-ROM等設(shè)備,但是在嵌入式視頻監(jiān)控系統(tǒng)中,這樣的速度還是很慢。所以,USB2.0提供了一種更好的傳輸速率:高速,它可以達(dá)到480Mbit/s。USB2.0向下兼容USB1.1,可以將遵循USB1.1規(guī)范的設(shè)備連接到USB2.0控制器上,也可以把USB2.0的設(shè)備鏈接到USB1.1控制器上。
USB總線的硬件拓?fù)浣Y(jié)構(gòu)[12]如圖4.1所示。
USB主機(jī)控制器USB設(shè)備根集線器USB設(shè)備USB設(shè)備集線器USB設(shè)備集線器USB設(shè)備集線器USB設(shè)備USB設(shè)備USB設(shè)備USB設(shè)備 圖4.1 USB總線硬件拓?fù)鋱D
USB主機(jī)控制器通過(guò)根集線器與其他USB設(shè)備相連。集線器也屬于USB設(shè)備,通過(guò)它可以在一個(gè)USB接口上擴(kuò)展出多個(gè)接口。除根集線器外,最多可以層疊5個(gè)集線器,每條USB電纜的最大長(zhǎng)度是5m,所以USB總線的最大距離為30m。一條USB總線上可以外接127個(gè)設(shè)備,包括根集線器和其他集線器。整個(gè)結(jié)構(gòu)圖是一個(gè)星狀結(jié)構(gòu),一條USB總線上所有設(shè)備共享一條通往主機(jī)的數(shù)據(jù)通道,同一時(shí)刻只能有一個(gè)設(shè)備與主機(jī)通信。
通過(guò)USB主機(jī)控制器來(lái)管理外接的USB設(shè)備,USB主機(jī)控制器共分3種:UHCI、OHCI和EHCI。在配置Linux內(nèi)核的時(shí)候,看到的“HCD”字樣表示“Host Controller Drivers”,即主機(jī)控制器驅(qū)動(dòng)程序。
USB驅(qū)動(dòng)程序分為兩類:USB主機(jī)控制器驅(qū)動(dòng)程序(Host Controller Drivers)、USB設(shè)備驅(qū)動(dòng)程序(USB device drivers)。它們?cè)趦?nèi)核中的層次如圖4.2所示。
UserUSB Device DriversUSB Host Controller DriversHardware 圖4.2 USB驅(qū)動(dòng)程序?qū)哟谓Y(jié)構(gòu)
在試驗(yàn)中,教學(xué)平臺(tái)上的Linux嵌入式內(nèi)核已經(jīng)配置了USB主機(jī)控制器驅(qū)動(dòng)程序,只需要添加需要的USB設(shè)備驅(qū)動(dòng)程序,就能實(shí)現(xiàn)USB設(shè)備的正常使用。
4.2Linux下驅(qū)動(dòng)程序的實(shí)現(xiàn)
Linux操作系統(tǒng)下對(duì)硬件設(shè)備進(jìn)行驅(qū)動(dòng)開(kāi)發(fā)的一般步驟如下:(l)注冊(cè)設(shè)備
在系統(tǒng)啟動(dòng)時(shí)或者在模塊加載的時(shí)候需要將設(shè)備和重要的數(shù)據(jù)結(jié)構(gòu)登記到內(nèi)核的設(shè)備數(shù)組中,并確定該設(shè)備的主次設(shè)備號(hào)。在Linux系統(tǒng)中,對(duì)于字符設(shè)備一般通過(guò)調(diào)用register_chrdev向系統(tǒng)注冊(cè)設(shè)備驅(qū)動(dòng)程序,register_chrdev在fs/deviees.c文件中的定義如下:int register_chrdev(unsigned int major,const char*name,struct file_operations fops)定義中的major是設(shè)備驅(qū)動(dòng)程序向系統(tǒng)申請(qǐng)的主設(shè)備號(hào),如果major為O,則系統(tǒng)為該驅(qū)動(dòng)程序動(dòng)態(tài)的分配一個(gè)主設(shè)備號(hào),不過(guò)此設(shè)備號(hào)是臨時(shí)的;name是設(shè)備名:fops是各個(gè)調(diào)用入口點(diǎn)的說(shuō)明。函數(shù)返回O表示注冊(cè)成功,返回-INVAL表示申請(qǐng)的主設(shè)備號(hào)非法,返回-EBUSY表示申請(qǐng)的主設(shè)備號(hào)正在被其它設(shè)備驅(qū)動(dòng)程序使用。
以后對(duì)設(shè)備驅(qū)動(dòng)程序的file_operations的操作都可以通過(guò)該主設(shè)備號(hào)的索引來(lái)完成。register_chrdev函數(shù)操作成功后,設(shè)備名便出現(xiàn)在/proc/devices文件目錄中,使用命令cat/proc/devices可以查看設(shè)備的工作狀態(tài)。
(2)定義操作集
驅(qū)動(dòng)程序中要通過(guò)一系列函數(shù)完成對(duì)設(shè)備的不同操作,這些操作在面向?qū)ο缶幊绦g(shù)語(yǔ)中也稱為方法,該操作集通過(guò)數(shù)據(jù)結(jié)構(gòu)file_operations實(shí)現(xiàn)。內(nèi)核內(nèi)部通過(guò)file結(jié)構(gòu)識(shí)別設(shè)備,通過(guò)file_operations數(shù)據(jù)結(jié)構(gòu)提供的文件系統(tǒng)的入口點(diǎn)函數(shù)訪問(wèn)設(shè)備。
file_operations定義在
int(*release)(struct inode*, struct file*);int(*fsync)(struct file*, struct dentry*, int datasync);int(*fsyne)(int, struct file*, int);int(*lock)(struct file*,int, struct file_lock*);ssize_t(*readv)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*writev)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*sendpage)(struct file*, struct page*, int, size_t, loff_t*, int);unsigned long(*get_unmapped_area)(struct file*, unsigned long, unsigned long,unsigned long, unsigned long);}
這個(gè)結(jié)構(gòu)的每一個(gè)成員的名字對(duì)應(yīng)一個(gè)系統(tǒng)調(diào)用,在用戶程序利用系統(tǒng)調(diào)用對(duì)設(shè)備文件進(jìn)行諸如讀/寫(xiě)操作時(shí),系統(tǒng)調(diào)用會(huì)通過(guò)設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)的相應(yīng)函數(shù)指針,把控制權(quán)交給該函數(shù)。對(duì)于具體的設(shè)備驅(qū)動(dòng)并不需要實(shí)現(xiàn)結(jié)構(gòu)中所有的例程,只要完成設(shè)備功能就可以了。例如對(duì)于一個(gè)常見(jiàn)的字符設(shè)備驅(qū)動(dòng)來(lái)說(shuō),可能只有操作open(),write(),read(),ioctl()和close(),當(dāng)用戶程序通過(guò)系統(tǒng)調(diào)用訪問(wèn)設(shè)備時(shí),最終要通過(guò)這些操作集來(lái)完成。
(3)卸載模塊
當(dāng)不再需要使用一個(gè)模塊或設(shè)備時(shí),需要將其從內(nèi)核中卸載下來(lái),這時(shí)會(huì)動(dòng)態(tài)調(diào)用模塊中的module_exit()函數(shù),并需要在該函數(shù)中調(diào)用modul_unregister_chrdev()或module_unregister_blkdev()釋放掛入內(nèi)核的數(shù)據(jù)結(jié)構(gòu)同時(shí)釋放該設(shè)備號(hào)。
4.3USB攝像頭驅(qū)動(dòng)程序設(shè)計(jì)
攝像頭屬于視頻設(shè)備,在Linux內(nèi)核中,VideoforLinux(簡(jiǎn)稱V4L)是關(guān)于視頻設(shè)備的驅(qū)動(dòng)標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)為應(yīng)用程序定義了一系列的接口函數(shù),內(nèi)核、驅(qū)動(dòng)和應(yīng)用程序都是依靠這個(gè)標(biāo)準(zhǔn)來(lái)進(jìn)行交流。本系統(tǒng)所使用的USB攝像頭正是基于該標(biāo)準(zhǔn)來(lái)編寫(xiě)驅(qū)動(dòng)和應(yīng)用程序的。
Linux內(nèi)核是依據(jù)設(shè)備號(hào)來(lái)操作設(shè)備文件的,在內(nèi)核中,攝像頭對(duì)應(yīng)的設(shè)備文件名為/dev/video0,主設(shè)備號(hào)是81,次設(shè)備號(hào)根據(jù)攝像頭數(shù)目來(lái)確定,本系統(tǒng)中僅使用一個(gè)攝像頭,所以可以通過(guò)mknod/dev/video0 c 81 0來(lái)創(chuàng)建節(jié)點(diǎn)。USB攝像頭驅(qū)動(dòng)程序?qū)崿F(xiàn)原理如圖4.3所示。
USB攝像頭的驅(qū)動(dòng)和通用設(shè)備的驅(qū)動(dòng)準(zhǔn)則一樣,但需要與內(nèi)核提供的視頻驅(qū)動(dòng)掛鉤。即首先在驅(qū)動(dòng)中聲明一個(gè) video_device結(jié)構(gòu),并為其指定文件操作函數(shù)指針數(shù)組fops,向系統(tǒng)注冊(cè)。在應(yīng)用程序發(fā)出文件操作的相關(guān)命令時(shí),核心根據(jù)這些指針調(diào)用相應(yīng)函數(shù),并將該結(jié)構(gòu)作為參數(shù)傳遞給它們。這樣,就完成了驅(qū)動(dòng)和核心之間的通信。
例如: Static struct video_devie vdev_template={……};
聲明 video_deviee,指出掛接驅(qū)動(dòng)
用戶進(jìn)程系統(tǒng)調(diào)用攝像頭驅(qū)動(dòng)文件操作接口接收緩沖區(qū)發(fā)送緩沖區(qū)中斷服務(wù)程序攝像頭 圖4.3 攝像頭驅(qū)動(dòng)實(shí)現(xiàn)框圖
Static Struct file_operation spcasxx_fops= {……};
聲明本驅(qū)動(dòng)的文件操作函數(shù)指針 Struct video_device*vdev=video_devdata(file);從文件指針中提取出 video_deviee結(jié)構(gòu)
在video_deviee結(jié)構(gòu)中,有一個(gè)私有指針priv,可以將它指向一塊保留內(nèi)存。在這塊內(nèi)存中,保存著本驅(qū)動(dòng)、本設(shè)備的相關(guān)初始化信息。這塊內(nèi)存的申請(qǐng)、初始化、指針指向等工作都是在USB驅(qū)動(dòng)的枚舉函數(shù)probe中完成。這樣,在枚舉函數(shù)將控制權(quán)返還給系統(tǒng)后,因?yàn)閮?nèi)核不銷毀保留內(nèi)存,所以驅(qū)動(dòng)仍然保留著自己的信息。在驅(qū)動(dòng)卸載函數(shù)中需要將申請(qǐng)的各塊內(nèi)存全部釋放。
Linux系統(tǒng)中任何USB傳輸都通過(guò)URB實(shí)現(xiàn)。為提高速度,可以考慮擴(kuò)大URB的緩沖,這樣可以降低每個(gè)USB事務(wù)中握手信息所占比例,提高有效數(shù)據(jù)的輸速度。但是受限于總線帶寬和具體的USB設(shè)備芯片,單純擴(kuò)大URB的緩沖不能無(wú)限制地解決問(wèn)題。USB在操作系統(tǒng)中每次傳輸都要包括URB的建立、發(fā)出、回收、數(shù)據(jù)整理等階段,這些時(shí)間不產(chǎn)生有效數(shù)據(jù)。因此可以建立兩個(gè)URB,在等待一個(gè)URB被回收時(shí),也就是圖像正在被傳感器采集時(shí),處理、初始化另一個(gè)URB,并在回收后立刻將其發(fā)出。兩個(gè)URB交替使用,大大減少了額外時(shí)間。
由于嵌入式平臺(tái)上運(yùn)行的Linux2.4.20內(nèi)核,內(nèi)部已經(jīng)集成了對(duì)USB2.0的支持,所以無(wú)需移植相應(yīng)的USB驅(qū)動(dòng)。
在設(shè)計(jì)中,攝像頭芯片采用中星微的Z301系列芯片,Linux2.4內(nèi)核并不支持這種芯片,所以我們通過(guò)移植芯片驅(qū)動(dòng)程序來(lái)達(dá)到目的。芯片的驅(qū)動(dòng)程序是spca5**系列,如果不重新編譯內(nèi)核的話,將驅(qū)動(dòng)程序動(dòng)態(tài)加載就可以正常使用。設(shè)計(jì)中動(dòng)態(tài)加載的命令使用insmod命令,它和modprobe命令在使用上有所不同,modprobe在加載模塊時(shí)不用指定模塊文件的絕對(duì)路徑,也不用帶模塊文件的后綴.o或.ko;而insmod需要的是模塊的所在目錄的絕對(duì)路徑,并且一定要帶有模塊文件名后綴的.o或者.ko。但是在功能上,它們所達(dá)到的效果基本相同[13]。22
第5章視頻采集功能的設(shè)計(jì)
視頻采集程序是基于V4L開(kāi)發(fā)的,包括攝像頭的初始化、打開(kāi)/關(guān)閉、參數(shù)設(shè)置和數(shù)據(jù)讀取等操作,視頻采集程序流程圖如圖5.1所示[14]。
開(kāi)始初始化攝像頭init_videoIn()打開(kāi)攝像頭open_v4l()獲取攝像頭參數(shù)icotl(int->vd,int cmd,..)設(shè)置攝像頭參數(shù)ioctl()獲取一幀圖像N一幀是否截取完畢Y存儲(chǔ)并準(zhǔn)備傳輸N是否終止視頻采集Y關(guān)閉攝像頭終止 圖5.1 視頻采集程序流程圖
5.1基于V4L的編程 5.1.1攝像頭相關(guān)數(shù)據(jù)結(jié)構(gòu)
攝像頭的組成部分是傳感器、DSP、鏡頭、外殼、USB連線、電路板和周邊電路構(gòu)成,其中最重要的是傳感器和DSP(數(shù)字信號(hào)處理器)。本系統(tǒng)選用的攝像頭采用了CMOS傳感器和中星微301處理器。
V4L[15]提供了一系列的接口應(yīng)用程序,可以利用這些程序?qū)崿F(xiàn)對(duì)攝像頭的調(diào)用,其中有read、open、ioctl等。V4l同時(shí)將這些函數(shù)和參數(shù)封裝成一個(gè)數(shù)據(jù)結(jié)構(gòu)vdIn。struct vdIn {
int fd;char *videodevice;struct video_mmap vmmap;struct video_capability videocap;int mmapsize;struct video_mbuf videombuf;struct video_picture videopict;struct video_window videowin;struct video_channel videochan;struct video_param videoparam;
int cameratype;char *cameraname;char bridge[9];int sizenative;int sizeothers;int palette;int norme;int channel;int grabMethod;unsigned char *pFramebuffer;unsigned char *ptframe [4];
};int framelock [4];pthread_mutex_t grabmutex;int framesizeIn;volatile int frame_cour;int bppIn;int hdrwidth;int hdrheight;int formatIn;int signalquit;
int fd :打開(kāi)攝像頭時(shí),open函數(shù)返回的文件描述符,其他函數(shù)使用這個(gè)描述符對(duì)攝像頭進(jìn)行操作。
struct video_mmap vmmap: 用于內(nèi)存映射的結(jié)構(gòu)體。
struct video_capability videocap :描述攝像頭基本信息,如設(shè)備名稱、支持的最大分辨率、信號(hào)源信息、信道數(shù)等。
struct video_mbuf videombuf :在進(jìn)行內(nèi)存映射時(shí)讀取幀的信息,實(shí)際上是輸入到攝像頭存儲(chǔ)緩存中的幀信息。
struct video_picture videopict :攝像頭采集圖像的屬性,如亮度、色調(diào)、對(duì)比度、色度、深度等。
struct video_window videowin :表示采集窗口參數(shù),如分辨率等。struct video_channal videochan :關(guān)于信號(hào)源的屬性。
5.1.2攝像頭基本功能實(shí)現(xiàn)
(1)初始化攝像頭參數(shù)
在對(duì)攝像頭進(jìn)行操作之前,要對(duì)攝像頭進(jìn)行初始化,即對(duì)vdIn這個(gè)結(jié)構(gòu)進(jìn)行初始化。使用init_videoIn 函數(shù)。
int init_videoIn(struct vdIn *vd, char *device, int width, int height, int format, int grabmethod){
int err =-1;int i;if(vd == NULL || device == NULL)return-1;
} if(width == 0 || height == 0)return-1;grabmethod = 1;//read by default;if(grab method < 0 || grabmethod > 1)// check format
vd->videodevice = NULL;vd->cameraname = NULL;vd->videodevice = NULL;vd->videodevice =(char *)realloc(vd->videodevice, 16);vd->cameraname =(char *)realloc(vd->cameraname, 32);snprintf(vd->videodevice, 12, “%s”, device);if(debug)printf(“video %s n”,vd->videodevice);memset(vd->cameraname, 0, sizeof(vd->cameraname));memset(vd->bridge, 0, sizeof(vd->bridge));vd->signalquit = 1;vd->hdrwidth = width;vd->hdrheight = height;vd->formatIn = format;
vd->bppIn = GetDepth(vd->formatIn);vd->grabMethod = grabmethod;vd->pFramebuffer = NULL;err = init_v4l(vd);for(i = 0;i < OUTFRMNUMB;i++){
} vd->frame_cour = 0;pthread_mutex_init(&vd->grabmutex, NULL);return err;vd->ptframe[i] = NULL;(unsigned char *)realloc(vd->ptframe[i], sizeof(struct frame_t)+(size_t)vd->framelock[i] = 0;vd->framesizeIn);
(2)打開(kāi)攝像頭
在Linux中,類似攝像頭的設(shè)備是作為文件來(lái)看待的,叫做設(shè)備文件。我們可以使用open函數(shù)來(lái)對(duì)設(shè)備進(jìn)行打開(kāi)操作,open帶有兩個(gè)參數(shù),第一個(gè)為設(shè)備文件名稱,本實(shí)驗(yàn)的攝像頭設(shè)備名稱是/dev/video0,第二個(gè)則是打開(kāi)的類型。
在使用open函數(shù)打開(kāi)攝像頭之前,要判斷是否有攝像頭設(shè)備,即檢查參數(shù)videodevice是否為空。Open函數(shù)執(zhí)行結(jié)束后會(huì)返回?cái)z像頭的文件描述符,如果返回值為-1,則說(shuō)明打開(kāi)設(shè)備出錯(cuò)。
int open_v4l(char *vd->videodevice){
if(!vd->videodevice){
printf(“No device file, ERROR opening V4L interface”);
return-1;}
if((vd->fd=open(vd->videodevice, O_RDWR))==-1){
printf(“ERROR opening V4L interface”);
return-1;} return vd->fd;}(3)獲取攝像頭參數(shù)
成功打開(kāi)攝像頭后,需要獲取攝像頭的一些參數(shù),利用ioctl函數(shù)控制I/O通道來(lái)實(shí)現(xiàn)。Ioctl函數(shù)的使用是ioctl(int->fd, int cmd,……),fd代表文件描述符,cmd表示用戶對(duì)設(shè)備的控制命令,第三個(gè)參數(shù)是一個(gè)其他的參數(shù)。其中,cmd包括VIDIOCGCAP(獲得video_capbility中有關(guān)攝像頭的信息)、VIDIOCGPICT(獲取圖像信息)、VIDIOCSPICT(改變圖像信息)、VIDIOCGMBUF(獲取攝像頭存儲(chǔ)緩沖區(qū)幀信息)、VIDIOCAMCAPTURE(獲取視頻圖像)、VIDIOSYNC(判斷攝像頭是否截取成功)等。
讀取video_capability中有關(guān)攝像頭的信息
if(ioctl(vd->fd, VIDIOCGCAP, &(vd->videocap))==-1){ printf(“Fail to get video_capability!/n”);return-1;} 讀取video_picture中的圖像信息 printf(“Fail to get video_picture!/n”);return-1;} if(ioctl(vd->fd, VIDIOCGPICT, &(vd->videopict))==-1){
讀取video_window信息
if(ioctl(vd->fd,VIDIOCGWIN,&(vd->videowin))==-1){
printf(“Fail to get video_window!/n”);
return-1;}(4)設(shè)置攝像頭參數(shù)
在對(duì)攝像頭參數(shù)進(jìn)行設(shè)置的時(shí)候,應(yīng)該按照以下步驟:比如更改圖像信息,首先,先給video_picture結(jié)構(gòu)中所要修改的變量賦值,如vd->videopict.palette=vd->formaIn;vd->videopict.depth=GetDepth(vd->formatIn);然后通過(guò)ioctl函數(shù)的VIDIOCSPICT來(lái)設(shè)置,如if(ioctl(vd->fd,VIDIOCSPICT,&(vd->videopict))<0){ printf(Fail to set videopict params with VIDIOCSPICT!/n“);return-1;} 在設(shè)置好了之后可以通過(guò)VIDIOCGPICT命令來(lái)查詢圖像信息設(shè)置是否成功。(5)關(guān)閉攝像頭
在Linux編程過(guò)程中,必須養(yǎng)成一個(gè)好的編程習(xí)慣,就是在開(kāi)啟一個(gè)設(shè)備后一定要關(guān)閉它,這樣可以避免很多諸如內(nèi)存泄露等嚴(yán)重的問(wèn)題。
本系統(tǒng)支持兩種讀取方式來(lái)獲得視頻流,它們是內(nèi)存映射和直接讀取,所以首先需要判斷視頻采集的方式,如果是內(nèi)存映射,則在系統(tǒng)任務(wù)完成后關(guān)閉內(nèi)存映射,然后關(guān)閉攝像頭設(shè)備。同樣道理,如果采用的是直接讀取,則在任務(wù)完成后關(guān)閉直接讀取,然后在關(guān)閉攝像頭設(shè)備。在代碼中,采用了一個(gè)判斷語(yǔ)句,判斷vd->grabMethod的值來(lái)判斷系統(tǒng)采用哪種讀取方式。int close_v4l(struct vdIn *vd){
int i;if(vd->grabMethod){
} else { free(vd->pFramebuffer);vd->pFramebuffer = NULL;if(debug)printf(“unmapping frame buffern”);munmap(vd->pFramebuffer, vd->mmapsize);
} } if(debug)printf(“close video_devicen”);close(vd->fd);/* dealloc the whole buffers */ if(vd->videodevice){
} if(vd->cameraname){
} for(i = 0;i < OUTFRMNUMB;i++){
} pthread_mutex_destroy(&vd->grabmutex);if(vd->ptframe[i]){
} free(vd->ptframe[i]);vd->ptframe[i] = NULL;vd->framelock[i] = 0;if(debug)printf(“freeing output buffer %dn”, i);
free(vd->cameraname);vd->cameraname = NULL;free(vd->videodevice);vd->videodevice = NULL;5.1.3視頻數(shù)據(jù)采集
視頻數(shù)據(jù)的采集是系統(tǒng)實(shí)現(xiàn)的第一步,是所有工作的前提。嵌入式Linux系統(tǒng)支持兩種視頻數(shù)據(jù)采集的方式:內(nèi)存映射、直接讀取視頻。
(1)內(nèi)存映射
內(nèi)存映射方式是通過(guò)mmap系統(tǒng)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)的。mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過(guò)映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。普通文件被映射到進(jìn)程地址空間
后,進(jìn)程可以像訪問(wèn)普通內(nèi)存一樣對(duì)文件進(jìn)行訪問(wèn),不必再調(diào)用read()、write()等操作。
首先,使用ioctl系統(tǒng)調(diào)用的VIDIOCSFBUF命令獲得攝像頭存儲(chǔ)緩沖區(qū)的幀信息,之后初始化video_mbuf,修改video_mmap中的設(shè)置,重新設(shè)置圖像信息,如幀的垂直及水平分辨率、彩色顯示格式等。為了防止緩沖區(qū)的內(nèi)容與有用信息疊加產(chǎn)生干擾,在初始化之前可以先調(diào)用memset(&(vd->videombuf),0,sizeof(vd->videombuf)來(lái)清零緩沖區(qū)。然后使用函數(shù)vd->map=(unsigned char*)mmap(O,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,ff_t offset)使設(shè)備內(nèi)容映射到內(nèi)存區(qū),其中第一個(gè)參數(shù)為共享內(nèi)存的起始地址,一般設(shè)為0,表示由系統(tǒng)分配;第二個(gè)參數(shù)為映射到調(diào)用進(jìn)程地址空間的字節(jié)數(shù),它從被映射文件開(kāi)頭offset個(gè)字節(jié)開(kāi)始算起;第三個(gè)參數(shù)指定共享內(nèi)存的訪問(wèn)權(quán)限(PROT_READ(可讀),PROT_WRITE(可寫(xiě)),PROT_EXEC(可執(zhí)行));第四個(gè)參數(shù)可以是MAP_SHARED或者M(jìn)AP_PRIVATE;第五個(gè)參數(shù)為設(shè)備描述符。mmap()成功調(diào)用后返回系統(tǒng)實(shí)際分配的起始地址。
內(nèi)存映射方式下真正進(jìn)行視頻截取的是ioctl系統(tǒng)調(diào)用的VIDIOCMCAPTURE命令,若函數(shù)成功調(diào)用,再用VIDIOCSYNC命令來(lái)判斷圖像截取是否己經(jīng)完畢,若該函數(shù)調(diào)用成功,則表明一幀圖像的截取已完成,便開(kāi)始下一幀圖像數(shù)據(jù)的截取,并將當(dāng)前截取的幀號(hào)按緩沖區(qū)總幀數(shù)的模加上l。
vd->vmmap.height=vd->hdrheight;vd->vmmap.width=vd->hdrwidth;vd->vmmap.format=vd->formatln;/*判斷圖像截取是否完成*/ if(ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)<0){ perror(??cvsync errn);erreur=-I;} while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)usleep(1000);temps=ms_time();
pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(struct frame_t),vd->pFramebuffer+vd->videombuf.offsets[vd->vmmap.frame],vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeIn);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];
snprintf(headerframe->header, 5,”%s”.”SPCA”);
headerframe->seqtimes=ms_time();headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;pthread_mutex_unlock(&vd->grabmutex);/*截取視頻幀*/ if((ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->vmmap)))<0){ perror(“cmcapture”);
if(debug)printf(“>>cmcapture err n”);erreur=-l;} vd->vmmap.frame=(vd->vmmap.frame+1)%vd->videombuf.frames;vd->frame_cour=(vd->frame_cour+l)%OUT FRMNUMB;(2)直接讀取方式
直接讀取視頻數(shù)據(jù)是通過(guò)read系統(tǒng)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)。read是一個(gè)用來(lái)從指定的文件或設(shè)備中讀取數(shù)據(jù)的系統(tǒng)調(diào)用。參數(shù)表為read(fd,(void*)pFramebuff,(size_t)framesizeln)。其中fd為文件描述符,pFramebuffer為指向存放數(shù)據(jù)的內(nèi)存的指針,framesizeln為需要讀取的數(shù)據(jù)的長(zhǎng)度。對(duì)于攝像頭設(shè)備的讀取,需要先分配內(nèi)存空間,用來(lái)存儲(chǔ)從攝像頭讀取過(guò)來(lái)的視頻數(shù)據(jù),然后直接調(diào)用read系統(tǒng)調(diào)用讀取視頻數(shù)據(jù),返回值為實(shí)際讀取的視頻幀大小,也正是在視頻傳輸過(guò)程中發(fā)送的視頻數(shù)據(jù)大小。
size=vd->framesizeln;vd->pFramebuffer=(unsigned char*)realloc(vd->pFramebuffer,(size_t)size);Len=read(vd->fd, vd->pFramebuffer, size);if(len<0){ if(debug)printf(“v41 read errorn”);
if(debug)printf(“l(fā)en %d asked %dn”, len, size);return 0;}
/*是否有其他進(jìn)程正在使用該視頻幀*/ while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)
headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);
usleep(1000);temps=ms_time();
pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(structframe_t),vd->pFramebuffer,vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeln);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];snprintf(headerframe->header, 5,”%s”,”SPCA”);headerframe->seqtimes=ms_time();headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;vd->frame_cour=(vd->frame_cour+1)%OUTFRMNUMB;pthread_mutex_unlock(&vd->grabmutex);5.2圖像編解碼 5.2.1編解碼介紹
通過(guò)攝像頭采集到數(shù)據(jù)后,還并不能把它們直接通過(guò)網(wǎng)卡傳輸,因?yàn)檫@樣的數(shù)據(jù)很大,網(wǎng)絡(luò)不能承擔(dān)如此龐大的數(shù)據(jù)傳輸。所以,必須將采集到得數(shù)據(jù)進(jìn)行編碼,壓縮數(shù)據(jù)大小。通過(guò)這樣的操作,我們采集到得數(shù)據(jù)就會(huì)變得很小,然后再把這些數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸。同樣的道理,在輸出端我們還要把接收到的已經(jīng)壓縮的數(shù)據(jù)還原回來(lái),這就涉及到解碼的內(nèi)容。通過(guò)這一系列的操作,圖像和視頻數(shù)據(jù)就實(shí)現(xiàn)的遠(yuǎn)程的傳輸。如果沒(méi)有編解碼,遠(yuǎn)程傳輸就是實(shí)際上不可能的事情,所以圖像的編解碼是非常重要的。
現(xiàn)在普遍使用的編解碼技術(shù)。對(duì)于靜態(tài)圖像,普遍使用靜態(tài)壓縮JPEG標(biāo)準(zhǔn);對(duì)于動(dòng)態(tài)視頻,普遍使用動(dòng)態(tài)壓縮MPEG標(biāo)準(zhǔn)。
JPEG是由ISO和CCITT為靜態(tài)圖像壓縮所建立的國(guó)際上第一個(gè)靜態(tài)圖像壓縮標(biāo)準(zhǔn),JPEG有著較高的壓縮比,復(fù)雜度適中,既可以用硬件實(shí)現(xiàn),也可以用軟件實(shí)現(xiàn),實(shí)用性強(qiáng),被廣泛使用于計(jì)算機(jī)和通信行業(yè)。
MPEG中文譯名為動(dòng)態(tài)圖像專家組。到目前為止,MPEG標(biāo)準(zhǔn)主要有五個(gè),32
MPEG-
1、MPEG-
2、MPEG-
4、MPEG-7和MPEG-21。它是由ISO/IEC1172壓縮編碼標(biāo)準(zhǔn)得出的視頻壓縮格式,MPEG的出現(xiàn)使視聽(tīng)傳播進(jìn)入數(shù)碼化時(shí)代。MPEG標(biāo)準(zhǔn)的視頻壓縮編碼技術(shù)主要利用了具有運(yùn)動(dòng)補(bǔ)償?shù)膸g壓縮編碼技術(shù)以減少時(shí)間冗余度,利用DCT技術(shù)以減少圖像的空間冗余度,利用熵編碼技術(shù)在信息表示方面減少了統(tǒng)計(jì)冗余度。通過(guò)一系列技術(shù),極大的體現(xiàn)了壓縮性能[16]。
5.2.2系統(tǒng)壓縮技術(shù)
由于本系統(tǒng)要求實(shí)現(xiàn)遠(yuǎn)程視頻傳輸,為了達(dá)到預(yù)計(jì)的設(shè)計(jì)要求,設(shè)計(jì)采用基于MJPEG算法的壓縮技術(shù)進(jìn)行視頻壓縮。MJPEG和MPEG的不同點(diǎn)在于MJPEG不使用幀間編碼??墒荕JPEG與MPEG仍然是一脈相承的,它對(duì)MEPG進(jìn)行了一些改進(jìn)和發(fā)展,功能更加強(qiáng)大,能發(fā)送高質(zhì)圖片、清晰視頻,編碼容易實(shí)現(xiàn)。但MJPEG也有一些缺點(diǎn),由于功能的提升,MJPEG對(duì)帶寬的要求很高,編碼效率低。
參考文獻(xiàn)
1.張永強(qiáng),趙勇勇,李崇德.嵌入式遠(yuǎn)程視頻采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2006,05(02):57-60.2.Jing Li, Weidong Hao.Research and Design of Embedded Network Video Monitoring System Based on Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 1310-1313.3.陳章龍,唐志強(qiáng),涂時(shí)亮.嵌入式技術(shù)與系統(tǒng)——Intel Xscale 結(jié)構(gòu)與開(kāi)發(fā)[M].北 京:北京航空航天大學(xué)出版社,2004,143.4.奧爾博公司.PXA270嵌入式實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)——Linux實(shí)驗(yàn)指導(dǎo)[M],2007.5.Seon Gyu Kim and Sung Ho Cho.Implementation of an Embedded Software Modem Platform[J].Division of Electrical & Computer Engineering,2006,04(2):5-9 6.杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.7.朱珍民,隋雪青.嵌入式實(shí)時(shí)操作系統(tǒng)及其應(yīng)用開(kāi)發(fā)[M].北京:北京郵電大學(xué)出版社,2006.8.李亞峰 歐文盛.ARM嵌入式Linux系統(tǒng)開(kāi)發(fā)從入門到精通[M].北京:清華大學(xué) 33
出版社,2007,51-54.9.李善平.Linux內(nèi)核2.4版源代碼分析大全[M].北京:機(jī)械工業(yè)出版社,2002.10.廖日坤.ARM嵌入式應(yīng)用開(kāi)發(fā)技術(shù)白金手冊(cè)[M].北京:中國(guó)電力出版社,2007, 284-290.11.劉昆.Linux環(huán)境下宿主機(jī)與ARM開(kāi)發(fā)板NFS服務(wù)的配置[J].科技資訊,2008,05(04):65-80.12.韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民教育出版社,2008.13.孫紀(jì)坤,張小全.嵌入式Linux系統(tǒng)開(kāi)發(fā)技術(shù)詳解——基于ARM[M].北京:人民郵電出版社,2006.14.李冰,孫建平,譚悅,張啟勤.基于嵌入式Linux與S3C2410的網(wǎng)絡(luò)視頻監(jiān)控[J].河北:華北電力大學(xué)學(xué)報(bào),2006,2(4):15-30.15.董玲,朱宏,楊忠孝.基于ARM的嵌入式Linux應(yīng)用程序開(kāi)發(fā)研究[J].電子測(cè)試,2008,05(06):40-60.16.Yongqiang Zhang, Bing Zhang.Design of Embedded Audio and Video Compression System[J].Workshop on Intelligent Information Technology Application,2007,12(8):76-90.17.Xing Zhang, Li-Ming Song.Implementation of Video Data Transmission Between ARM and DSP Through Embedded Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia,2008,292-295.18.張躍進(jìn),謝昕.嵌入式網(wǎng)絡(luò)數(shù)字視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,12(9):70-100.19.Yi Wu, Jiangyong Cai, Xiao Lin, Lianfeng Shen.The Design and Realization of the Wireless Video Monitoring System Based on Embedded Linux and CDMA1X[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 179-184.20.王先春,郭杰榮,胡惟文,樊希平.基于ARM_Linux的嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,14(7):90-95.34
第三篇:基于嵌入式ARM平臺(tái)的遠(yuǎn)程IO數(shù)據(jù)采集系統(tǒng)的研究和開(kāi)發(fā).
Research and Development of the Remote I/O Data Acquisition System Based on Embedded ARM Platform
INTRODUCTION
With the wide use of the networked, intelligent and digital distributed control system, the data acquisition system based on the single-chip is not only limited in processing capacity, but also the problem of poor real-time and reliability.In recent years, with the rapid development of the field of industrial process control and the fast popularization of embedded ARM processor, it has been a trend that ARM processor can substitute the single-chip to realize data acquisition and control.Embedded ARM system can adapt to the strict requirements of the data acquisition system, such as the function, reliability, cost, size, power consumption, and so on.In this paper, a new kind of remote I/O data acquisition system based on ARM embedded platform has been researched and developed, which can measure all kinds of electrical and thermal parameters such as voltage, current, thermocouple, RTD, and so on.The measured data can be displayed on LCD of the system, and at the same time can be transmitted through RS485 or Ethernet network to remote DAS or DCS monitoring system by using Modbus/RTU or Modbus/TCP protocol.The system has the dual redundant network and long-distance communication function, which can ensure the disturb rejection capability and reliability of the communication network.The new
generation remote data acquisition and moni-toring system based on the high-performance embedded ARM microprocessor has important application significance.STRUCTRUE DESIGN OF THE WHOLE SYSTEM
The whole structure chart of the remote data acquisition and monitoring system based on embedded ARM platform is shown in Figure 1.In the scheme of the system, the remote I/O data acquisition modules are developed by embedded ARM processor, which can be widely used to diversified industries such as electric power, petroleum, chemical, metallurgy, steel, transportation and so on.This system is mainly used for the concentrative acquisition and digital conversion of a variety of electrical and thermal signals such as voltage, current, thermal resistance, thermo-couple in the production process.Then the converted data can be displayed on the LCD directly, and also can be sent to the embedded controller through RS485 or Ethernet network communication interface by using Modbus/RTU or Modbus/TCP protocol.The data in the embedded controller platform is transmitted to the work-stations of remote monitoring center by Ethernet after further analyzed and pro-cessed.At the same time, these data can be stored in the real time database of the database server in remote monitoring center.The system has the dual redun-dant network and long-distance communication
function, which can ensure the disturb rejection capability and reliability of the communication network.The hardware platform of the Remote I/O data acquisition system based on emb-edded ARM uses 32-bit ARM embedded microprocessor, and the software plat-form uses the real-time multi-task operating system uC/OS-II, which is open-source and can be grafted, cut out and solidified.The real time operating system(RTOS makes the design and expansion of the application becomes very easy, and without more changes when add new functions.Through the division of the appli-cation into several independent tasks, RTOS makes the design process of the application greatly simple.Figure 1 Structure of the whole system THE HARDWARE DESIGN OF THE SYSTEM
The remote I/O data acquisition system based on embedded ARM platform has high universality, each acquisition device equipped with 24-way acquisition I/O channels and isolated from each other.Each I/O channel can select a variety of voltage and current signals, as well as temperature signals such as thermal resis-tance, thermocouple and so on.The voltage signals in the range of 0-75 mV ,1-5V ,0-5V, and so on, the current signals in the range of 0-10mA and 4-20 mA, the thermal resistance measurement components including Cu50, Cu100, Pt50, Pt100, and the thermocouple measurement components including K, E, S, T, and so on.Figure2.Structure of the remote I/O data acquisition system based on ARM processor The structural design of the embedded remote I/O data acquisition system is shown in Figure 2.The system equipped with some peripherals such as power, keyboard, reset, LCD display, ADC, RS485, Ethernet, JTAG, I2C, E2PROM, and so on.The A/D interface circuit is independent with the embedded system, which is independent with the embedded system, which is system has setting buttons and 128*64 LCD, which makes the debugging and modification of the parameters easy.The collected data can be sent to the remote embedded controller or DAS, DCS system by using
Modbus/RTU or Modbus/TCP protocol through RS485 or Eth-ernet communication interface also, and then be used
for monitoring and control after farther disposal.The system of RS485 has a dual redundant network and long-distance communication function.As the embedded Ethernet interface makes the remote data exchange of the applications become very easy, the system can choose RS485 or Ethernet interface through jumper to communicate with host computer.Ethernet interface use independent ZNE-100TL intelligent embedded Ethernet to serial port conversion module in order to facilitate the system maintenance and upgrade.The ZNE-100TL module has an adaptive 10/100M Ethernet interface, which has a lot of working modes such as TCP Server, TCP Client, UDP, Real COM, and so on, and it can support four connections at most.Figure3.Diagram of the signal pretreatment circuit
Figure 3 shows the signal pretreatment circuit diagram.The signals of thermo-couple such as K,E,S,T etc and 0-500mV voltage signal can connect to the positive end INPx and the negative end INNx of the simulate multiplexers(MUX directly.The 4-20mA current signal and 1-5V voltage signal must be transformed by resis-tance before connecting to the positive end INPx and the negative end INNx of the MUX of certain channel.The RTD thermal resistance signals such as Cu50, Cu100, Pt50 and Pt100 should connect one 1mA constant current before connecting to the positive end INPx and the negative end INNx of the MUX of certain channel.Figure4.Diagram of ADC signal circuit Figure 4 shows the ADC signal circuit, which using the 16-bit ADC chip AD7715.The connection of the chip and the system is simple and only need
five lines which are CS(chip select, SCLK(system clock, DIN(data input, DOUT(data output and DRDY(data ready.As the ARM microprocessor has the characteristics of high speed, low power, low voltage and so on, which make its capacity of low-noise, the ripple of power, the transient response performance, the stability of clock source, the reliability of power control and many other aspects should be have higher request.The system reset circuit use special microprocessor power monitoring chip of MAX708S, in order to improve the reliability of the system.The system reset circuit is shown in Figure 5.Figure5.Diagram of system reset circuit
SOFTWARE DESIGN AND REALIZATION OF THE SYSTEM
The system software of the remote I/O data acquisition system based on embedded ARM platform use the real-time operating system(RTOS uC/OS-II, which is open-source and can be grafted,cut out and solidified.The key part of RTOS is the real-time multi-task core, whose basic functions including task management, resource management, system management, timer management, memory management, information management, queue management and so on.These functions are used though API service functions of the core.The system software platform use uC/OS-II real-time operating system core simplified the design of application system and made the whole structure of the system simple and the complex application hierarchical.The design of the whole system includes the tasks of the operating system and a series of user applications.The main function of the system is mainly to realize the initialization of the system hardware and the operating system.The initialization of hardware includes interr-upt、keyboard、LCD and so on.The initialization of operating system includes the control blocks and events control blocks, and before the start of multi-task schedu-ling, one task must be started at least.A start task has been created in this system, which is mainly responsible for the initialization and startup of clock, the start-up of interruption, the initialization of communication task module, as
well as the division of tasks and so on.The tasks must be divided in order to complete various functions of the real-time multi-task system.Figure6.Functional tasks of the system software Figure6 shows the functional tasks of the system software.According to importance of the tasks and the demands of real-time, the system applications are divided into six tasks with different priority, which including the tasks of A/D data acquisition, system monitoring, receive queue, data send, keyboard input, LCD display.The A/D data acquisition task demands the highest real-time requirements and the LCD display task is the lowest.Because each task has a different priority, the higher-priority task can access the ready one by calling the system hang up function or delay function.Figure7.Chart of AD7715 data transfer flow Figure 7 shows the data conversion flow of AD7715.The application A/D conversion is an important part of the data acquisition system.In the uC/OS-II real-time operating system core, the realization process of A/D driver depends mainly on the conversion time of A/D converter, the analog frequency of the conversion value, the number of input channels, the conversion frequency and so on.The typical A/D
conversion circuit is made up of analog multiplexer(MUX, amplifier and analog to digital converter(ADC.Figure8.Diagram of the application transfer driver Figure8 shows the application procedure transfer driver.The driver chooses the analog channel to read by MUX, then delay a few microseconds in order to make the signal pass through the MUX, and stabilize it.Then the ADC was triggered to start the conversion and the driver in the circle waiting for the ADC until its completion of the conversion.When waiting is in progress, the driver is detecting the ADC state signal.If the waiting time is longer than the set time, the cycle should be end.During waiting time of the cycle, if the conversion completed signal by ADC has been detected, the driver should read the results of the conversion and then return the result to the application.Figure9.Diagram of serial receive Figure9 shows the serial receive diagram with the buffer and signal quantity.Due to the existence of serial peripheral equipment does not match the speed of CPU, a buffer zone is needed, and when the data is sending to the serial, it need to be written to the buffer, and then be sent out through serial one by one.When the data is received from the serial port, it will not be processed until several bytes have been received, so the advance data can be stored in buffer.In practice, two buffer zones, the receiving buffer and the sending buffer, are needed to be opened from the memory.Here the buffer zone is defined as loop queue data structure.As the signal of uC/OS-II provides the overtime waiting mechanism, the serial also have the overtime reading and writing ability.If the initialization of the received data signal is 0, it expresses the loop buffer is empty.After the interrupt received, ISR read the received bytes from the UART receiving buffer, and put into receiving buffer region, at last wake the user task to execute read operation with the help of received signal.During the entire
process, the variable value of the current bytes in recording buffer can be inquired, which is able to shows whether the receive buffer is full.The size of the buffer zone should be set reasonable to reduce the possibility of data loss, and to avoid the waste of storage space.CONCLUSIONS
With the rapid development of the field of industrial process control and the wide range of applications of network, intelligence, digital distributed control System, it is necessary to make a higher demand of the data accuracy and reliability of the control system.Data acquisition system based on single-chip has been gradually eliminated because the problem of the poor real-time and reliability.With the fast popularization of embedded ARM processor, there has been a trend that ARM processor can alternate to single-chip to realize data acquisition and control.The embedded ARM system can adapt to the strict requirements of the data acquisition system, such as the function, reliability, cost, size, power consum-ption, and so on.In this paper, A kind of ARM-based embedded remote I/O data acquisition system has been researched and developed, whose hardware platform use 32-bit embedded ARM processor, and software platform use open-source RTOS uC/OS-II core.The system can be widely applied to electric power, petroleum, chemical, metallurgy, steel, transportation and so on.And it is mainly used in the collection and monitoring of all
kinds of electrical and thermal signals such as voltage, current, thermal resistance, thermocouple data of the production process.Then these data can be sent to the remote DAS, DCS monitoring system through RS485 or Ethernet interface.The system has the dual redundant network and long-distance communication function, which can ensure the disturb rejection capability and reliability of the communication network.基于嵌入式ARM平臺(tái)的遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)的研究和開(kāi)發(fā)
導(dǎo)言
隨著網(wǎng)絡(luò)化,智能化,數(shù)字化分布式控制系統(tǒng)的廣泛使用,基于單芯片的數(shù)據(jù)采集系統(tǒng)不僅在處理能力上受限制,并且在實(shí)時(shí)性和可靠性方面也出現(xiàn)了問(wèn)題。近幾年來(lái),隨著工業(yè)過(guò)程控制領(lǐng)域的迅速發(fā)展和嵌入式ARM處理器的迅速普及,ARM處理器代替單芯片實(shí)現(xiàn)數(shù)據(jù)的采集和控制成為了趨勢(shì)。嵌入式ARM系統(tǒng)能適應(yīng)數(shù)據(jù)采集系統(tǒng)的嚴(yán)格要求,如功能性,可靠性,成本,體積,功耗等等。
在本文中提出一種新型的基于ARM嵌入式平臺(tái)的遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)已被研制開(kāi)發(fā),它可以衡量各種電氣和熱參數(shù),如電壓,電流,熱電偶,熱電阻等等。那個(gè)測(cè)量數(shù)據(jù)可以顯示在液晶顯示器的系統(tǒng)中,同時(shí)可通過(guò)使用Modbus / RTU或的Modbus / TCP協(xié)議從RS485或以太網(wǎng)網(wǎng)絡(luò)傳送到DAS或DCS遠(yuǎn)程監(jiān)控
系統(tǒng)。該系統(tǒng)具有雙冗余網(wǎng)絡(luò)和長(zhǎng)途電通信功能,它可以確保通信網(wǎng)絡(luò)的干擾抑制能力和可靠性?;诟咝阅芮度胧紸RM微處理器的新一代遠(yuǎn)程數(shù)據(jù)采集和監(jiān)控系統(tǒng)具有重要的應(yīng)用意義。
整個(gè)系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
基于嵌入式ARM的平臺(tái)的遠(yuǎn)程數(shù)據(jù)采集和監(jiān)控系統(tǒng)的整個(gè)結(jié)構(gòu)圖在以下的圖1中展示。在這系統(tǒng)的計(jì)劃中,通過(guò)使用廣泛用于多種行業(yè)如電氣電力,石油,化工,冶金,鋼鐵,運(yùn)輸?shù)鹊那度胧紸RM處理器來(lái)開(kāi)發(fā)遠(yuǎn)程I / O數(shù)據(jù)采集模塊。該系統(tǒng)主要用于的集中采購(gòu)和將各種電和熱信號(hào)如電壓,熱電阻,熱電偶在生產(chǎn)過(guò)程中進(jìn)行數(shù)字轉(zhuǎn)換。轉(zhuǎn)換的數(shù)據(jù)可直接在液晶顯示器上顯示,也可以通過(guò)使用的Modbus / RTU或的Modbus / TCP協(xié)議的RS485總線或以太網(wǎng)網(wǎng)絡(luò)通信接口被發(fā)送到嵌入式控制器。嵌入控制器平臺(tái)的數(shù)據(jù)通過(guò)進(jìn)一步以太網(wǎng)的分析和處理被傳送至遠(yuǎn)程監(jiān)控中心的工作站。與此同時(shí),這些數(shù)據(jù)可以存儲(chǔ)在遠(yuǎn)程監(jiān)控中心數(shù)據(jù)庫(kù)服務(wù)器的實(shí)時(shí)數(shù)據(jù)庫(kù)中。該系統(tǒng)具有雙冗余網(wǎng)絡(luò)和遠(yuǎn)程通訊功能,它可以確保通信網(wǎng)絡(luò)的干擾抑制能力和可靠性。
基于嵌入式ARM遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)的硬件平臺(tái)使用32位ARM嵌入式微處理器和軟件平臺(tái)使用的是開(kāi)源的并且可移植,削減和鞏固的實(shí)時(shí)多任務(wù)操作系統(tǒng)的第二代UC / OS核心。實(shí)時(shí)操作系統(tǒng)(RTOS)使設(shè)計(jì)和應(yīng)用的擴(kuò)大變得非常容
易,增加新的功能時(shí)也沒(méi)多大變化。通過(guò)幾個(gè)獨(dú)立的任務(wù)的應(yīng)用,實(shí)時(shí)操作系統(tǒng)使得應(yīng)用的設(shè)計(jì)過(guò)程極為簡(jiǎn)單。
系統(tǒng)的硬件設(shè)計(jì)
基于嵌入式ARM平臺(tái)的遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)具有很高的普遍性,每個(gè)購(gòu)置設(shè)備配備24收購(gòu)方式的I / O渠道且彼此孤立。每個(gè)I / O通道可以選擇不同的電壓和電流信號(hào),以及溫度信號(hào)如熱電阻,熱電偶等。在05V的,010毫安和4100TL智能嵌入式以太網(wǎng)串口轉(zhuǎn)換模塊。該ZNE500mV的電壓信號(hào)可以直接接到模擬多路復(fù)用器(復(fù)用器)的INPx正極和INNx負(fù)極。45V的電壓信號(hào)必須用阻抗轉(zhuǎn)換。熱電阻的電阻信號(hào)如Cu50,Cu100,Pt50和Pt100應(yīng)在接到某些頻道的復(fù)用器INPx正極和INNx負(fù)極前連接一1毫安的恒流源。
圖4顯示了使用16位ADC芯片AD7715的ADC信號(hào)電路。芯片與系統(tǒng)的連接非常簡(jiǎn)單,只需要CS(芯片選擇),SLCK(系統(tǒng)時(shí)鐘),DIN(數(shù)據(jù)輸入),DOUT(數(shù)據(jù)輸出)和DRDY(數(shù)據(jù)準(zhǔn)備)5根線。
由于ARM微處理器具有高速,低功耗,低電壓等優(yōu)點(diǎn),這使它在低噪音,紋波權(quán)力,瞬態(tài)響應(yīng)性能,時(shí)鐘來(lái)源的穩(wěn)定,功率控制和許多其他方面需要有更高的要求。為了改善系統(tǒng)的可靠性該系統(tǒng)復(fù)位電路中使用特殊的微處理器電源監(jiān)測(cè)芯片MAX708S。圖5展示了該系統(tǒng)復(fù)位電路。
系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn)
基于嵌入式ARM平臺(tái)的遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)的軟件使用的是開(kāi)源的并且可移植,削減和鞏固的實(shí)時(shí)多任務(wù)操作系統(tǒng)的第二代UC / OS核心。RTOS的關(guān)鍵部分是實(shí)時(shí)多任務(wù)的核心,其基本功能包括任務(wù)管理,資源管理,系統(tǒng)管理,計(jì)時(shí)器管理,內(nèi)存管理,信息管理,隊(duì)列管理等。通過(guò)API服務(wù)職能核心使用這些功能。
該系統(tǒng)軟件平臺(tái)使用的是單一化的uC/ OS第二代實(shí)時(shí)簡(jiǎn)化操作系統(tǒng)核心,使整個(gè)結(jié)構(gòu)系統(tǒng)簡(jiǎn)單和應(yīng)用層次復(fù)雜。整個(gè)系統(tǒng)的設(shè)計(jì)包括操作系統(tǒng)的任務(wù)和一系列的用戶應(yīng)用程序。系統(tǒng)的主要職能是實(shí)現(xiàn)系統(tǒng)硬件和操作系統(tǒng)的初始化。硬件初始化包括中斷,鍵盤,液晶顯示器等。操作系統(tǒng)初始化包括控制模塊和事件控制,在多任務(wù)調(diào)度前,至少有一個(gè)任務(wù)開(kāi)始。一個(gè)開(kāi)端任務(wù)已建立在這一系統(tǒng),這系統(tǒng)主要負(fù)責(zé)初始化和啟動(dòng)的時(shí)鐘,開(kāi)辦中斷,通信任務(wù)模塊的初始化,以及任務(wù)分工等。為了完成實(shí)時(shí)多任務(wù)系統(tǒng)的多種職能那個(gè)任務(wù)必須被劃分。
圖6顯示系統(tǒng)軟件的功能任務(wù)。根據(jù)任務(wù)的重要性和實(shí)時(shí)要求,系統(tǒng)的應(yīng)用曾劃分為六個(gè)不同優(yōu)先級(jí)的任務(wù),其中包括A / D數(shù)據(jù)采集任務(wù),系統(tǒng)監(jiān)控,接受隊(duì)列,數(shù)據(jù)傳送,鍵盤輸入,液晶顯示屏顯示。A / D數(shù)據(jù)采集任務(wù)要求最高的實(shí)時(shí)要求和液晶顯示器顯示任務(wù)是最低的。因?yàn)槊總€(gè)任務(wù)都有不同的優(yōu)先事項(xiàng),通過(guò)使用系統(tǒng)掛斷功能或延遲功能更高的優(yōu)先任務(wù)可以開(kāi)始已經(jīng)準(zhǔn)備好的任務(wù)。
圖7顯示的是AD7715的數(shù)據(jù)轉(zhuǎn)換流。A / D轉(zhuǎn)換器的應(yīng)用是數(shù)據(jù)采集系統(tǒng)的一個(gè)重要組成部分。在uS/ OS的第二代實(shí)時(shí)操作系統(tǒng)的核心中,A / D驅(qū)動(dòng)程序的實(shí)現(xiàn)過(guò)程主要取決于A / D轉(zhuǎn)換器的轉(zhuǎn)換時(shí)間,有轉(zhuǎn)換價(jià)值的模擬頻率,輸入通
道的數(shù)量,轉(zhuǎn)換頻率等等。典型的A / D轉(zhuǎn)換電路由模擬復(fù)用器(復(fù)用器),放大器和模擬到數(shù)字轉(zhuǎn)換器(ADC)組成。
圖8顯示了申請(qǐng)程序轉(zhuǎn)移的驅(qū)動(dòng)程序。驅(qū)動(dòng)程序可以在模擬通道讀取由復(fù)用器,那么幾微秒的延遲,以便使信號(hào)通過(guò)多路開(kāi)關(guān),并使其穩(wěn)定。然后,當(dāng)轉(zhuǎn)換開(kāi)始時(shí),ADC被觸發(fā),并且驅(qū)動(dòng)程序在一個(gè)周期內(nèi)等待ADC的觸發(fā),直到完成轉(zhuǎn)換。當(dāng)?shù)却倪M(jìn)展,該驅(qū)動(dòng)程序檢測(cè)ADC的狀態(tài)信號(hào)。如果等待時(shí)間比規(guī)定的時(shí)間越長(zhǎng),周期應(yīng)該結(jié)束。在等待的周期時(shí)間,如果轉(zhuǎn)換完成ADC的信號(hào)被檢測(cè)到,驅(qū)動(dòng)程序應(yīng)改為轉(zhuǎn)換的結(jié)果,然后將結(jié)果返回給應(yīng)用程序。
圖9顯示了緩沖區(qū)和信號(hào)量的序列接收?qǐng)D。由于外圍串行設(shè)備的存在CPU的運(yùn)行速度匹配,一個(gè)緩沖區(qū)是必要的,當(dāng)數(shù)據(jù)發(fā)送到序列,它必須被寫(xiě)入緩沖區(qū),然后通過(guò)串行逐一地被發(fā)送出去。當(dāng)從串行端口收到數(shù)據(jù),這些數(shù)據(jù)將不會(huì)被處理直到收到一些字節(jié),因此先前的數(shù)據(jù)可以存儲(chǔ)在緩沖區(qū)中。在實(shí)踐中,兩個(gè)緩沖區(qū),一個(gè)接收緩沖區(qū)和一個(gè)發(fā)送緩沖區(qū),它們是需要從內(nèi)存開(kāi)放出來(lái)。在這里緩沖區(qū)像循環(huán)隊(duì)列數(shù)據(jù)結(jié)構(gòu)一樣被定義。
由于uC/OS-II提供額外時(shí)間等待機(jī)制的信號(hào),串口也具有額外的閱讀和寫(xiě)作能力。如果收到的數(shù)據(jù)信號(hào)初值為0,它表示循環(huán)緩沖區(qū)是空的。在中斷收到后,ISR從UART接受緩沖區(qū)中讀到收到的數(shù)據(jù),并投入接收緩沖區(qū)域,最后通過(guò)收到的數(shù)據(jù)開(kāi)始用戶執(zhí)行讀操作的的任務(wù)。在整個(gè)過(guò)程中,變量?jī)r(jià)值目前字節(jié)在存儲(chǔ)緩沖區(qū)中的字節(jié)的變量值是可以被詢問(wèn)的,這能夠表明接收緩沖區(qū)是否已滿。為了降低數(shù)據(jù)丟失的可能性和避免浪費(fèi)存儲(chǔ)空間應(yīng)合理地設(shè)置緩沖區(qū)的大小。
結(jié)論
隨著工業(yè)過(guò)程控制領(lǐng)域的快速發(fā)展和網(wǎng)絡(luò),智能,數(shù)字化分布式控制系統(tǒng)廣泛應(yīng)用,有必要發(fā)展對(duì)數(shù)據(jù)準(zhǔn)確性和控制可靠性要求更高的系統(tǒng)。由于較差的實(shí)時(shí)性和可靠性基于單片機(jī)數(shù)據(jù)采集系統(tǒng)已逐步被淘汰。隨著嵌入式ARM處理器的迅速普及,ARM處理器替代單芯片實(shí)現(xiàn)數(shù)據(jù)采集與控制成為了一種新的趨勢(shì)。嵌入式ARM系統(tǒng)能夠適應(yīng)數(shù)據(jù)采集系統(tǒng)的嚴(yán)格要求,如功能,可靠性,成本,大小,耗電量等等。
在本文中一種基于ARM的嵌入式遠(yuǎn)程I / O數(shù)據(jù)采集系統(tǒng)已被研究和開(kāi)發(fā),其硬件平臺(tái)采用32位嵌入式ARM處理器和軟件平臺(tái)的使用開(kāi)源的RTOS uS/ OS-Ⅱ核心。該系統(tǒng)可廣泛應(yīng)用于電力,石油,化工,冶金,鋼鐵,交通運(yùn)輸?shù)确矫?。這是主要用于收集和監(jiān)測(cè)各種電氣和熱信號(hào),如電壓,電流,熱電阻,生產(chǎn)過(guò)程中的熱電偶數(shù)據(jù)。然后通過(guò)RS485或以太網(wǎng)接口將這些數(shù)據(jù)發(fā)送到遠(yuǎn)程的DAS,DCS控制系統(tǒng)的監(jiān)測(cè)系統(tǒng)。該系統(tǒng)具有雙冗余網(wǎng)絡(luò)和長(zhǎng)途通信功能,它可以確保干擾抑制和通信網(wǎng)絡(luò)的可靠性。
第四篇:數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)研究論文
摘要:針對(duì)LabVIEW及MSP430F5529單片機(jī)構(gòu)成的多路數(shù)據(jù)采集系統(tǒng)研究及設(shè)計(jì),分為上位機(jī)和下位機(jī)兩個(gè)主要模塊來(lái)進(jìn)行闡述。MSP430F5529作為前端數(shù)據(jù)采集系統(tǒng)進(jìn)行數(shù)據(jù)采集,采集到的電壓通過(guò)串口傳到上位機(jī)LabVIEW界面。
關(guān)鍵詞:MSP430F5529,單片機(jī),數(shù)據(jù)采集,LabVIEW
LabVIEW程序設(shè)計(jì)方面相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,但是,Lab-VIEW的使用靈活性和功能完整性也很強(qiáng)大。MSP430F5529單片機(jī)多路電壓數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì),從結(jié)構(gòu)上來(lái)看比較簡(jiǎn)單,此類單片機(jī)工作電壓區(qū)間比較低,耗能相對(duì)較低,內(nèi)部集成了許多功能模塊,功能完整性比較強(qiáng)大。結(jié)構(gòu)簡(jiǎn)單的單片機(jī)系統(tǒng)與LabVIEW上位機(jī)的串行通信的功能結(jié)合,增加了系統(tǒng)靈活性。同時(shí),又利用了MSP430F5529的超低耗功能,降低成本,使用簡(jiǎn)便。另外,虛擬儀器除了在物理形式上實(shí)現(xiàn)之外,也可以實(shí)現(xiàn)系統(tǒng)內(nèi)的軟件、硬件資源共享。將兩者結(jié)合的多路電壓數(shù)據(jù)采集系統(tǒng)無(wú)論是從運(yùn)行效率還是編程方式,都展現(xiàn)了強(qiáng)大的優(yōu)勢(shì)。
1數(shù)據(jù)采集系統(tǒng)
1.1數(shù)據(jù)采集系統(tǒng)需求基于LabVIEW及單片機(jī)構(gòu)成的多路電壓數(shù)據(jù)采集系統(tǒng)研究和設(shè)計(jì),其中MSP430F5529單片機(jī)、ADC轉(zhuǎn)換器組成的下位機(jī)數(shù)據(jù)采集系統(tǒng)實(shí)現(xiàn)采集電壓的功能;采集到的多路電壓信號(hào)被發(fā)送至LabVIEW程序功能模塊進(jìn)行分析和處理,并顯示數(shù)據(jù)處理的結(jié)果;研究電平的轉(zhuǎn)換。下位機(jī)的TTL電平轉(zhuǎn)換成上位機(jī)能夠接收的RS232電平。首先系統(tǒng)進(jìn)行初始化,然后單片機(jī)通過(guò)串口進(jìn)行多路數(shù)據(jù)采集,打開(kāi)ADC轉(zhuǎn)換器,開(kāi)始轉(zhuǎn)換,讀取轉(zhuǎn)換結(jié)果。然后發(fā)送到上位機(jī)界面,顯示得到的數(shù)據(jù)處理結(jié)果。1.2數(shù)據(jù)采集系統(tǒng)方案設(shè)計(jì)的采集系統(tǒng)以上位機(jī)數(shù)據(jù)顯示界面和數(shù)據(jù)采集系統(tǒng)實(shí)物的形式呈現(xiàn),研究上位機(jī)與下位機(jī)的數(shù)據(jù)交互機(jī)制,實(shí)現(xiàn)數(shù)據(jù)的交互。方案:在上位機(jī)與下位機(jī)之間需要研究一個(gè)電平轉(zhuǎn)換,采用MSP430系列單片機(jī)作為下位機(jī)采集模塊,LabVIEW作為上位機(jī)處理模塊;兩個(gè)模塊之間加入電平轉(zhuǎn)換模塊,采用的是CP2102轉(zhuǎn)換芯片。此方案編程簡(jiǎn)單且方便,成本也相對(duì)較低,從整體來(lái)說(shuō)也比較嚴(yán)謹(jǐn)。系統(tǒng)初始設(shè)計(jì)時(shí),第一部分設(shè)計(jì)下位機(jī)單片機(jī)模塊,啟動(dòng)A/D轉(zhuǎn)換,得到的轉(zhuǎn)換結(jié)果發(fā)送到單片機(jī)處理。并且加入了LCD顯示模塊;第二部分設(shè)計(jì)上位機(jī)LabVIEW程序處理模塊,將采集到的結(jié)果上傳到上位機(jī)顯示。設(shè)計(jì)方案的流程圖如圖1所示。
2下位機(jī)采集系統(tǒng)設(shè)計(jì)此次設(shè)計(jì)采用
MSP430F5529Launchpad,MSP430F5529開(kāi)發(fā)板內(nèi)部集成A/D轉(zhuǎn)換模塊,多路電壓采集系統(tǒng)下位機(jī)的重點(diǎn)在于A/D轉(zhuǎn)換,所謂A/D轉(zhuǎn)換即指模擬量等轉(zhuǎn)換為數(shù)字量。MSP430F5529單片機(jī)可以自定義參考電壓,此次設(shè)計(jì)的參考電壓設(shè)計(jì)的是3.3V。所以本數(shù)據(jù)采集系統(tǒng)可采集的電壓范圍是0~3.3V。本設(shè)計(jì)是采集多路電壓,轉(zhuǎn)換的方法模式是采用轉(zhuǎn)換速度較快的序列通道多次轉(zhuǎn)換,提高轉(zhuǎn)換速率。在程序設(shè)計(jì)里面是用ADC12CONSEQ_3來(lái)選擇采樣模式。同時(shí),定義了ADC12SHP等于1,來(lái)定義信號(hào)的來(lái)源是采樣定時(shí)器。ADCMEMx存儲(chǔ)器用來(lái)存儲(chǔ)轉(zhuǎn)換結(jié)果。此類存儲(chǔ)器是CSTARTADDx位定義的。參考電壓和通道是需要經(jīng)過(guò)定義才能工作的,一般是通過(guò)ADC12MCTLx寄存器。多路電壓數(shù)據(jù)采集的下位機(jī)流程圖如圖2所示。首先執(zhí)行端口初始化,第一步便是關(guān)閉看門狗,在MSP430單片機(jī)中,主程序首先要關(guān)閉看門狗,如果不關(guān)閉看門狗,程序執(zhí)行一段時(shí)間后,可能會(huì)導(dǎo)致程序無(wú)法運(yùn)行。因?yàn)榭撮T狗有定期重置CPU的功能。然后端口定義,ADC轉(zhuǎn)換和串口通信的工作模式的初始化,之后進(jìn)入中斷采集數(shù)據(jù),在有信號(hào)輸入的時(shí)候才會(huì)進(jìn)入中斷,如果沒(méi)有外部電壓信號(hào)的輸入不會(huì)進(jìn)行中段。采集電壓信號(hào)后開(kāi)始轉(zhuǎn)換,轉(zhuǎn)換完成之后數(shù)據(jù)被傳送兩個(gè)方向:一是傳送到LCD顯示,二是發(fā)送到上位機(jī)LabVIEW程序界面顯示。在AD轉(zhuǎn)換的過(guò)程中是進(jìn)入中斷進(jìn)行數(shù)據(jù)測(cè)量的,此次多路數(shù)據(jù)采集系統(tǒng)的下位機(jī)設(shè)計(jì)的中斷標(biāo)志位采用ADC12IFG寄存器設(shè)置。MSP430單片機(jī)的中斷可以說(shuō)是非常大的一個(gè)亮點(diǎn)。想要有效提高程序運(yùn)行的速率,在程序中加入中斷便可實(shí)現(xiàn)。MSP430單片機(jī)的每個(gè)片上運(yùn)行后,CPU便被喚醒,此時(shí)低功耗模式是不存在的,中斷完成后,CPU脫離喚醒模式。此時(shí)的單片機(jī)回到低功耗狀態(tài)。在下位機(jī)串口發(fā)送方面,U-CA0CTL控制寄存器來(lái)定義了時(shí)鐘源,需要通過(guò)相應(yīng)的時(shí)鐘源來(lái)確定波特率,此控制寄存器的第0位是USCWRST,它具有軟件復(fù)位的功能,在設(shè)計(jì)中需要使它置1,那么邏輯將會(huì)在復(fù)位狀態(tài)一直保持。第6到7位的UCSSEL,用來(lái)選擇時(shí)鐘源,時(shí)鐘源選擇的是AMCLK,那么UCSSEL的狀態(tài)是01,此時(shí)的波特率需要求出相應(yīng)的分頻細(xì)數(shù)來(lái)定義,AMCLK的頻率是32768Hz。跟據(jù)定義,在低頻時(shí)鐘的情況下,分頻參數(shù)是時(shí)鐘頻率與波特率的比重,此次設(shè)計(jì)的波特率是9600,因此可以得出的是分頻參數(shù)是3.41,所以,UCA0BR0等于3。
3顯示界面上位機(jī)設(shè)計(jì)
3.1上位機(jī)LabVIEW設(shè)計(jì)此次多路電壓數(shù)據(jù)采集系統(tǒng)的上位機(jī)LabVIEW程序流程圖如圖3所示。上位機(jī)的部分,首先設(shè)計(jì)了單路的電壓數(shù)據(jù)采集系統(tǒng),其程序框圖如圖4所示。上位機(jī)LabVIEW的設(shè)計(jì)首先是配置串口參數(shù),參數(shù)的配置與下位機(jī)端要保持一致,參數(shù)配置完成后要進(jìn)入while循環(huán)中的VISAREAD,讀取從下位機(jī)傳來(lái)的數(shù)據(jù)。單路數(shù)據(jù)采集就是直接顯示電壓。加入while循環(huán)的目的是使程序可以一直運(yùn)行,而且是直接只運(yùn)行讀取緩沖區(qū)數(shù)據(jù)部分,不用每次都配置串口參數(shù),提高了程序運(yùn)行速率。3.2TTI與RS232電平轉(zhuǎn)換MSP430單片機(jī)輸出的L電平與上位機(jī)接收的電平不是同一種,分別為TTL和RS232。所以上位機(jī)與下位機(jī)之間需要進(jìn)行轉(zhuǎn)換,15V~5V指的是RS232電平邏輯1時(shí)的狀態(tài),而邏輯0的話,是在+5V~+15V,而TTL電平邏輯0在0~0.8V之間,邏輯1在2.4V~5V之間,所以在TTL電平與RS232之間,需要進(jìn)行正負(fù)邏輯的轉(zhuǎn)換。在此次設(shè)計(jì)中選用的是主要由CP2102轉(zhuǎn)換芯片構(gòu)成的轉(zhuǎn)換模塊。同時(shí)里面也集成了MAX2485和MAX232通信芯片。CP2102是一種品質(zhì)較好,工作比較穩(wěn)定的且性能強(qiáng)大的轉(zhuǎn)換芯片。整個(gè)轉(zhuǎn)換模塊體積小,便于移動(dòng)。此次設(shè)計(jì)用MSP430F5529專門用于串口發(fā)送的P3.3口與RX引腳連接。如圖5所示。CP2102的RX引腳專門用來(lái)接收TTL電平。CP2102的另一端與電腦相連,打開(kāi)上位機(jī)LabVIEW程序,串口信息配置好之后,便可以顯示采集的電壓數(shù)據(jù)。
4多路電壓數(shù)據(jù)采集系統(tǒng)測(cè)試
為了便于系統(tǒng)能夠成功采集數(shù)據(jù),采集的電壓采取就近原則,直接采集單片機(jī)管腳電壓,此次測(cè)試三次電壓分別為:3.3V電源管腳電壓、普通管腳電壓(1.78V)以及GND管腳電壓(0V)。由于誤差作用,系統(tǒng)不能準(zhǔn)確測(cè)到3.3V,以及3.3V會(huì)對(duì)旁邊線路產(chǎn)生影響,所以第二路電壓信號(hào)會(huì)從1.78V拉高到2.76V,第三路接地,所以是0.00V。除去顯示結(jié)果以外,增加了波形顯示,使采集到的電壓變化變得一目了然。此外加入了串口工作燈指示,在串口正常工作的情況下,串口燈是綠色,在串口工作異常的情況下,串口燈是紅色。改變某一路電壓后,把第三路采集電壓的管腳從接地端拔了下來(lái),懸空時(shí)的電壓是1.78V,同樣會(huì)被3.3V的電壓拉高,電壓的變化直接在上位機(jī)界面呈現(xiàn)出來(lái),直觀明了,如圖7所示。波形顯示的坐標(biāo)是可以自動(dòng)變換的,根據(jù)數(shù)據(jù)的大小智能變換,改變采集管腳的電壓后,如圖8所示。
5結(jié)束語(yǔ)
基于MSP430F5529和LabVIEW進(jìn)行多路電壓數(shù)據(jù)采集系統(tǒng),實(shí)際應(yīng)用的結(jié)果,下位機(jī)與上位機(jī)的通信功能正常,操作也非常簡(jiǎn)單方便,完成了設(shè)計(jì)之初的要求,可以實(shí)現(xiàn)的功能有:①采集三路0V~3.3V的電壓;②采集到的電壓在LCD屏顯示;③采集到的電壓上傳至LabVIEW上位機(jī)數(shù)據(jù)采集編寫(xiě)模塊顯示;④上位機(jī)LabVIEW界面顯示電壓數(shù)據(jù)及電壓波形。研究并實(shí)現(xiàn)了MSP430F5529單片機(jī)的數(shù)據(jù)采集及處理、ADC轉(zhuǎn)換、TTL電平轉(zhuǎn)RS232電平、上位機(jī)與下位機(jī)之間的串口通信。同時(shí),此次設(shè)計(jì)也存在些許不足:①只能采集三路數(shù)據(jù);②不能調(diào)取歷史采集數(shù)據(jù)。
參考文獻(xiàn)
[1]陳美玉.基于單片機(jī)及LabVIEW的多路數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].企業(yè)技術(shù)開(kāi)發(fā),2017,36(1):69-71
[2]王克勝.系統(tǒng)軟件設(shè)計(jì)及控制分析[J].科技與企業(yè),2013(4):81-81
[3]段新燕.單片機(jī)液晶顯示系統(tǒng)的設(shè)計(jì)[J].電子科技,2012,25(8):13
[4]周麗,裴東興.基于MSP430單片機(jī)的超低功耗溫度采集系統(tǒng)設(shè)計(jì)[J].電子測(cè)試,2011(10):35-38
第五篇:?jiǎn)挝粩?shù)據(jù)采集系統(tǒng)用戶手冊(cè)
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
西安市醫(yī)療保險(xiǎn)管理信息系統(tǒng)
單位數(shù)據(jù)采集子系統(tǒng)
用 戶 手 冊(cè)
Ver 1.0
沈陽(yáng)東軟軟件股份有限公司
二零零二年四月 西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
目
錄
目 錄.............................................................2 版權(quán)聲明............................................................3 第一章 系統(tǒng)概要介紹................................................5
§1.1 系統(tǒng)進(jìn)入說(shuō)明..................................................................................................................5
§1.2 系統(tǒng)主界面介紹..............................................................................................................5 §1.3 系統(tǒng)主要功能介紹..........................................................................................................5
第二章 繳費(fèi)工資...................................錯(cuò)誤!未定義書(shū)簽。
§2.1 界面布局如下:..............................................................................................................6 §2.2 操作說(shuō)明..........................................................................................................................6
第三章 醫(yī)療保險(xiǎn)數(shù)據(jù)采集............................................8
§3.1界面布局如下圖:...........................................................................................................8 §3.2操作說(shuō)明:.......................................................................................................................9
第四章 其他........................................................9
§4.1 實(shí)用工具........................................................................................................................10 §4.2 窗口................................................................................................................................11 §4.3 退出................................................................................................................................11 §4.4 幫助................................................................................................................................11
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
版權(quán)聲明
西安市醫(yī)療保險(xiǎn)信息管理系統(tǒng)Ver1.00版權(quán)歸沈陽(yáng)東軟軟件股份有限公司所有,任何侵犯版權(quán)的行為將被追究法律責(zé)任。未經(jīng)沈陽(yáng)東軟軟件股份有限公司的書(shū)面準(zhǔn)許,不得將本手冊(cè)的任何部分以任何形式、采用任何手段(電子的或機(jī)械的,包括照相、復(fù)制或錄制)、或?yàn)槿魏文康?,進(jìn)行復(fù)制或擴(kuò)散。
(C)copyright 2000—2003沈陽(yáng)東軟軟件股份有限公司。版權(quán)所有,翻制必究。
是沈陽(yáng)東軟軟件有限公司的注冊(cè)商標(biāo)。
單位數(shù)據(jù)采集系統(tǒng)用于單位報(bào)盤,各單位操作員在使用本系統(tǒng)時(shí)必須詳細(xì)閱讀此說(shuō)明書(shū),嚴(yán)格按照操作規(guī)范;如果因?yàn)椴僮鲉T的失誤而造成數(shù)據(jù)的不準(zhǔn)確性,其后果由操作員自行負(fù)責(zé)。
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
閱讀指南
〖手冊(cè)目標(biāo)〗
本手冊(cè)是沈陽(yáng)東軟軟件股份有限公司的軟件產(chǎn)品——西安市醫(yī)療保險(xiǎn)管理信息系統(tǒng)單位數(shù)據(jù)采集子系統(tǒng)的用戶手冊(cè)。本手冊(cè)詳細(xì)介紹了該系統(tǒng)的操作過(guò)程。
〖閱讀對(duì)象〗
本手冊(cè)是為西安市醫(yī)療保險(xiǎn)信息管理系統(tǒng)單位數(shù)據(jù)采集子系統(tǒng)涉及的醫(yī)療保險(xiǎn)參保單位相關(guān)的操作人員編寫(xiě)的。用戶在使用西安市醫(yī)療保險(xiǎn)信息管理系統(tǒng)單位數(shù)據(jù)采集子系統(tǒng)之前,應(yīng)該首先閱讀本手冊(cè),以避免誤操作。
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
第一章
系統(tǒng)概要介紹
§1.1 系統(tǒng)進(jìn)入說(shuō)明
正確安裝單位數(shù)據(jù)采集子系統(tǒng)(在桌面有快捷圖表):企業(yè)數(shù)據(jù)采集,點(diǎn)擊即啟動(dòng)本系統(tǒng)。
§1.2 系統(tǒng)主界面介紹
雙擊圖標(biāo)后出現(xiàn)如下主界面:
§1.3 系統(tǒng)主要功能介紹
系統(tǒng)包括的功能有:
單位年審:完成參保職工在每年工資變更時(shí)的維護(hù)工作。新參保人員上報(bào):采集本次要進(jìn)入醫(yī)療保險(xiǎn)信息庫(kù)中的數(shù)據(jù)。單位基本信息變更:完成對(duì)醫(yī)療保險(xiǎn)信息庫(kù)中的單位信息的修改。
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
第二章 單位年審
該業(yè)務(wù)主要是用于對(duì)參保職工工資變更時(shí)由單位批量的修改后再報(bào)盤給醫(yī)療保險(xiǎn)管理事業(yè)處。主要是在每年年審的時(shí)候使用!
§2.1 界面布局如下:
圖2-1 §2.2 操作說(shuō)明
1.點(diǎn)擊【取檔】按鈕,出現(xiàn)如下的選擇文件的選擇文件的窗口:
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
圖2-2 選擇一個(gè)擴(kuò)展名為dbf的文件,然后打開(kāi),如果數(shù)據(jù)格式不是很符合規(guī)范或不是有效的導(dǎo)出數(shù)據(jù),會(huì)出現(xiàn)一些提示,禁止用戶導(dǎo)入。選擇確定,取出數(shù)據(jù),如圖2-3:
圖2-3 在此基礎(chǔ)上修改數(shù)據(jù),修改完畢后,點(diǎn)擊【保存】按鈕,進(jìn)行數(shù)據(jù)準(zhǔn)確性校驗(yàn)并且保存,然后出現(xiàn)如圖2-2的界面,把數(shù)據(jù)重新存儲(chǔ)為一個(gè)擴(kuò)展名為dbf的文件,用于上報(bào)醫(yī)保處。
【單位名稱輸入】如需在打印“工資申報(bào)花名冊(cè)”報(bào)表時(shí),在表頭添加單位名稱,則需在此錄入單位名稱。
【打印】把所有的數(shù)據(jù)打印出來(lái);
【清屏】清除屏幕,使窗口回到如圖2-1界面。
【關(guān)閉】關(guān)閉此窗口,進(jìn)行其他業(yè)務(wù)的工作。如果數(shù)據(jù)修改,也會(huì)提示保存!注意:修改數(shù)據(jù)時(shí)要格外仔細(xì),以免造成數(shù)據(jù)的不準(zhǔn)確性?!静樵儭奎c(diǎn)擊此查詢按鈕的時(shí)候,彈出如2-4的查詢條件窗口:
西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
圖2-4 輸入姓名或者身份證號(hào)然后按【確定】按鈕可以查找出對(duì)應(yīng)的數(shù)據(jù),并定位光標(biāo)到符合條件的行,如果沒(méi)有符合條件的數(shù)據(jù),則查詢不出!
第三章 新參保人員上報(bào)
該業(yè)務(wù)主要是用于一個(gè)新參保單位的員工批量新參保時(shí)的數(shù)據(jù)采集。
§3.1界面布局如下圖:
圖3-1 8 西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
§3.2操作說(shuō)明:
點(diǎn)擊【添加】按鈕,出現(xiàn)如下界面:
圖3-2 在此界面下錄入一個(gè)新參保人員的基本信息,錄入完后,再按【添加】按鈕再次添加一個(gè)新參保人員的基本信息。
如果發(fā)現(xiàn)其中某條信息不正確,則選中其中該條信息,按【刪除】按鈕就可以刪除光標(biāo)所在行的信息,注意:刪除時(shí)要十分小心,以免誤操作!
在數(shù)據(jù)正確無(wú)誤的錄入完畢后,按【存盤】按鈕,出現(xiàn)如圖3-2所示的界面,把所有數(shù)據(jù)存為一個(gè)擴(kuò)展名為dbf的文件,用于上報(bào)醫(yī)保處。
【打印】把所有數(shù)據(jù)打印出來(lái);
【關(guān)閉】關(guān)閉該窗口,進(jìn)行其他的業(yè)務(wù)操作。關(guān)閉窗口的時(shí)候會(huì)提示保存數(shù)據(jù)!注意:錄入數(shù)據(jù)時(shí)要格外小心,如果由于錄入員疏忽造成數(shù)據(jù)不準(zhǔn)確,其后果由錄入員自行負(fù)責(zé)。
【取上次存檔文件】緊接上次保存文件進(jìn)行數(shù)據(jù)錄入。
第四章 單位信息變更
該業(yè)務(wù)主要是用于單位基本信息的變更修改。西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
§4.1界面布局如下圖:
圖4-1 §4.2操作說(shuō)明:
在此界面下錄入單位需要變更的基本信息,錄入完后,再按【添加】按鈕再次添加一個(gè)新參保人員的基本信息。
如果發(fā)現(xiàn)其中某條信息不正確,則選中其中該條信息,按【清屏】按鈕就可以刪除光標(biāo)所在行的信息,注意:刪除時(shí)要十分小心,以免誤操作!
在數(shù)據(jù)正確無(wú)誤的錄入完畢后,按【存盤】按鈕,出現(xiàn)如圖3-2所示的界面,把所有數(shù)據(jù)存為一個(gè)擴(kuò)展名為bg的文件,用于上報(bào)醫(yī)保處。
【打印】把所有數(shù)據(jù)打印出來(lái);
【關(guān)閉】關(guān)閉該窗口,進(jìn)行其他的業(yè)務(wù)操作。關(guān)閉窗口的時(shí)候會(huì)提示保存數(shù)據(jù)!注意:錄入數(shù)據(jù)時(shí)要格外小心,如果由于錄入員疏忽造成數(shù)據(jù)不準(zhǔn)確,其后果由錄入員自行負(fù)責(zé)。
第五章
其他
§5.1 實(shí)用工具
為了方便操作員,程序中集成了windows操作系統(tǒng)的工具:計(jì)算器和記事本。西安市醫(yī)療保險(xiǎn)數(shù)據(jù)采集系統(tǒng)(單位端)
§5.2 窗口
可以改變窗口的幾種顯示方式,用戶可以根據(jù)自己的需要選擇。
§5.3 退出
退出系統(tǒng)操作。
§5.4 幫助
關(guān)于,可以查閱一些基本信息,如系統(tǒng)信息,軟件版本信息等,如下圖:
圖5-1 11