摘 要 隨著中國(guó)移動(dòng)GPRS和中國(guó)聯(lián)通CDMA1X網(wǎng)絡(luò)的建成商用,GPRS/CDMA無線數(shù)據(jù)終端的應(yīng)用范圍越來越廣。本文介紹了ATMEL公司基于ARM7TDMI核的微控制器AT91M40800的內(nèi)部結(jié)構(gòu)和擴(kuò)展外圍,并在此硬件平臺(tái)上移植了μC/OSII嵌入式操作系統(tǒng)、Interniche網(wǎng)絡(luò)協(xié)議棧和μC/FS文件系統(tǒng),從而給出了一個(gè)完整的GPRS/CDMA無線數(shù)據(jù)終端的實(shí)現(xiàn)方案。
關(guān)鍵詞 ARM處理器,μC/OSII嵌入式操作系統(tǒng),μC/FS文件系統(tǒng),Interniche網(wǎng)絡(luò)協(xié)議棧
1 引 言
GPRS/CDMA無線數(shù)據(jù)網(wǎng)絡(luò)系統(tǒng)由于其覆蓋范圍廣,通信質(zhì)量高,永遠(yuǎn)在線和按流量計(jì)費(fèi)等優(yōu)點(diǎn),在無線上網(wǎng)、環(huán)境監(jiān)控和數(shù)據(jù)采集等許多行業(yè)得到了廣泛應(yīng)用。作為系統(tǒng)重要組成部分的GPRS/CDMA無線數(shù)據(jù)終端,為了滿足其成本低,體積小和移動(dòng)靈活的要求,目前普遍使用的方案是在單片機(jī)系統(tǒng)上加載一些操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議棧來控制無線模塊登錄GPRS/CDMA網(wǎng)絡(luò),從而實(shí)現(xiàn)數(shù)據(jù)的傳輸。但由于目前的單片機(jī)大多仍是8位系統(tǒng),處理速度較慢,且硬件資源有限,對(duì)操作系統(tǒng)和協(xié)議棧的支持能力不夠強(qiáng),因此實(shí)際運(yùn)行起來效果并不理想。ARM處理器憑借其功能強(qiáng),功耗低,性能高的優(yōu)勢(shì)迅速成為了各種控制應(yīng)用領(lǐng)域的首選。本文通過采用ATMEL公司的AT91M40800處理器并外擴(kuò)大容量存儲(chǔ)器的方法來構(gòu)建功能強(qiáng)大的硬件平臺(tái),并在此硬件平臺(tái)上移植了μC/OSII嵌入式操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧和文件系統(tǒng),從而大大提高了終端的可靠性,增強(qiáng)了系統(tǒng)的可擴(kuò)展性和產(chǎn)品開發(fā)的可延續(xù)性。
2 硬件平臺(tái)
GPRS/CDMA無線數(shù)據(jù)終端采用ATMEL公司的一款A(yù)RM7微控制器AT91M40800,其特點(diǎn)如下:
集成了ARM7TDMI處理器內(nèi)核,高性能的32位RISC體系結(jié)構(gòu),具有高密度的16位指令集和嵌入式ICE(InCircuit Emulation);
8 KB片內(nèi)SRAM;
完全可編程的外部總線接口(EBI),片選線多達(dá)8個(gè),最大可尋址空間為64 MB,具有軟件可編程的8位或16位外部數(shù)據(jù)總線;
8優(yōu)先級(jí)、可單獨(dú)屏蔽的向量中斷控制器,具有4個(gè)外部中斷,包括一個(gè)高優(yōu)先級(jí)、低延遲的中斷請(qǐng)求;
32個(gè)可編程I/O口;
3通道16位定時(shí)器/計(jì)數(shù)器;
2個(gè)UART;
可編程的看門狗定時(shí)器。
圖1為GPRS/CDMA無線數(shù)據(jù)終端的結(jié)構(gòu)框圖。AT91M40800內(nèi)部只集成了8 KB的SRAM,為了使μC/OSII操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧和文件系統(tǒng)能夠正常移植運(yùn)行,系統(tǒng)外擴(kuò)了1 MB的FLASH和SRAM。使用的片選信號(hào)分別是NCS0和NCS1,處理器上電REMAP后分別映射到0x01000000和0x02000000的地址空間。為了滿足系統(tǒng)存儲(chǔ)數(shù)據(jù)和一些須修改的配置信息的需要,終端在外擴(kuò)的FLASH里創(chuàng)建了μC/FS文件系統(tǒng),文件系統(tǒng)和用戶程序共用一片F(xiàn)LASH。用戶程序固化在0x01000000~0x0107FFFF前512 KB的地址空間內(nèi);文件系統(tǒng)創(chuàng)建在0x01080000~0x010FFFFF后512 KB的地址空間內(nèi)。
終端提供了RS232、RS485和RJ45 3種用戶接口。由于AT91M40800內(nèi)部集成了2個(gè)UART,因此只須外加一片RS232電平轉(zhuǎn)換芯片和一片RS485收/發(fā)驅(qū)動(dòng)芯片就能很容易地?cái)U(kuò)展出RS232和RS485用戶接口。擴(kuò)展RJ45以太網(wǎng)口時(shí),系統(tǒng)使用了RTL8019AS以太網(wǎng)接口芯片。
RTL8019AS是Realtek公司高集成度的專用以太網(wǎng)接口芯片,支持EthernetII、IEEE802.3、10Base5、10Base2和10BaseT,支持UTP、AUI&BNC和PnP自動(dòng)探測(cè)模式,并且內(nèi)嵌16 KB SRAM用于收/發(fā)緩沖,降低了對(duì)主處理器的速度要求。它還支持8位、16位數(shù)據(jù)總線模式,有全雙工的通信接口,是進(jìn)行以太網(wǎng)通信的理想芯片。要實(shí)現(xiàn)這些功能,需要依據(jù)RTL8019用戶手冊(cè)的描述,對(duì)其進(jìn)行正確的配置,編寫出發(fā)送包、接收包函數(shù)以及外部中斷處理程序;系統(tǒng)加載TCP/IP網(wǎng)絡(luò)協(xié)議棧后通過調(diào)用這些函數(shù)即可實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的傳送。
系統(tǒng)還通過TL16C550擴(kuò)展了一個(gè)標(biāo)準(zhǔn)的9線串口以連接GPRS/CDMA無線貓。TLl6C550的主要功能是在接收外部器件或MODEM的數(shù)據(jù)時(shí)完成數(shù)據(jù)串行到并行的轉(zhuǎn)換;在接收CPU的數(shù)據(jù)時(shí),完成數(shù)據(jù)并行到串行的變換并進(jìn)行串行發(fā)送。在任何工作狀態(tài)下,CPU均可讀取和通報(bào)器件的狀態(tài)。TLl6C550的內(nèi)部包含一個(gè)可編程的波特率發(fā)生器,波特率為16x內(nèi)部輸入時(shí)鐘頻率,此內(nèi)部輸入時(shí)鐘頻率由輸入的參考基準(zhǔn)振蕩器分頻(由波特率分頻寄存器的值決定)得到。TLl6C550具有完全的MODEM控制能力,根據(jù)用戶的需要可以設(shè)置成中斷或查詢方式。對(duì)TL16C550的操作比RTL8019更為簡(jiǎn)單,只需對(duì)其為數(shù)不多的寄存器操作,便可實(shí)現(xiàn)對(duì)器件的模式設(shè)置、收發(fā)處理和狀態(tài)控制等。在此基礎(chǔ)上通過封裝一些收/發(fā)的函數(shù)即可完全實(shí)現(xiàn)和GPRS/CDMA無線貓的全雙工通信。
終端上電初始化后,從文件系統(tǒng)中讀出相應(yīng)的配置信息,接著通過TL16C550向無線貓發(fā)送相應(yīng)的AT指令;無線貓登陸網(wǎng)絡(luò)成功后,系統(tǒng)通過加載PPP/TCP/UDP/IP等協(xié)議,同中心建立起SOCKET連接;然后在μC/OS-II實(shí)時(shí)操作系統(tǒng)下通過多個(gè)任務(wù)的調(diào)度,即可實(shí)現(xiàn)RS232/RS485/RJ45數(shù)據(jù)和中心站的相互通信。
3 μC/OSII嵌入式操作系統(tǒng)
μC/OSII是一種免費(fèi)公開源代碼,結(jié)構(gòu)小巧,具有可剝奪實(shí)時(shí)內(nèi)核的實(shí)時(shí)操作系統(tǒng),其內(nèi)核提供任務(wù)調(diào)度與管理、時(shí)間管理、任務(wù)間同步與通信,以及內(nèi)存管理和中斷服務(wù)等功能。μC/OSII是面向中小型嵌入式系統(tǒng)的,如果包含全部功能(信號(hào)量、消息郵箱、消息隊(duì)列及相關(guān)函數(shù)),則編譯后的內(nèi)核僅有6~10 KB,可以廣泛應(yīng)用于從8位到64位單片機(jī)各種不同類型、不同規(guī)模的嵌入式系統(tǒng)。要使μC/OSII正常運(yùn)行,處理器必須滿足以下要求:
處理器的C編譯器能產(chǎn)生可重入代碼;
用C語言即可打開和關(guān)閉中斷;
處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常為10~100 Hz);
處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧;
處理器有將堆棧指針和其他CPU寄存器讀出或存儲(chǔ)到堆;騼(nèi)存中的指令。
AT91M40800完全可以滿足這些要求,因此可將μC/OSII移植到上面運(yùn)行。μC/OSII的移植比較簡(jiǎn)單,在完成對(duì)CPU的初始化以后,首先對(duì)時(shí)鐘節(jié)拍進(jìn)行設(shè)置(10~100 Hz)。只須對(duì)AT91M40800編寫相應(yīng)的定時(shí)器中斷處理程序,在程序中調(diào)用操作系統(tǒng)的函數(shù)OSTimeTick(),并在其AIC(Advanced Interrupt Controller )中設(shè)置定時(shí)器的優(yōu)先級(jí)別,將定時(shí)器中斷處理程序的地址放到相應(yīng)的中斷向量表中。使定時(shí)器產(chǎn)生中斷,必須在開始多任務(wù)調(diào)度后,即在第一個(gè)任務(wù)中使能定時(shí)器。其次,對(duì)μC/OS-II移植主要集中在includes.h、OS_CPU_A.S和OS_CPU_C.C等CPU相關(guān)文件的改動(dòng),上層任務(wù)調(diào)度部分無需任何修改。對(duì)于多任務(wù)操作系統(tǒng),只需將復(fù)雜的應(yīng)用分成簡(jiǎn)單的、相互聯(lián)系的任務(wù),再把各個(gè)不同優(yōu)先級(jí)的任務(wù)交給操作系統(tǒng)去管理。
4 Interniche網(wǎng)絡(luò)協(xié)議棧
為了使GPRS/CDMA模塊能登錄無線網(wǎng)絡(luò)并與中心建立SOCKET連接,系統(tǒng)移植了Interniche公司源碼開放的嵌入式TCP/IP/PPP協(xié)議棧。Interniche能使系統(tǒng)很容易在μC/OS-II操作系統(tǒng)的調(diào)度下為開發(fā)平臺(tái)增加網(wǎng)絡(luò)通信和網(wǎng)絡(luò)管理等功能。由于它是專門為嵌入式系統(tǒng)而設(shè)計(jì)的,所以占用的系統(tǒng)資源很少。Interniche協(xié)議全部用標(biāo)準(zhǔn)C語言,除了可以運(yùn)行在如μC/OSII、VRTX、CMX和Threadx等多種RTOS下,還可在無RTOS的環(huán)境下獨(dú)立運(yùn)行。常用的Interniche包括:
。1) 核心協(xié)議
NicheStackTM: InternicheTCP協(xié)議包含TCP、UDP、IP、TFTP、DHCP Client、ICMP、ARP、SLIP、BootTP以及DNS Client。
Niche ToolTM: 菜單驅(qū)動(dòng)的協(xié)議調(diào)試和測(cè)試工具(包含在NicheStack和Nichelite中)。
NicheLiteTM: Interniche微型化的TCP/IP協(xié)議,全部代碼在12 KB以內(nèi);它包含全部NichestackTM的所有協(xié)議和1個(gè)最小化的Socket API,易于移植到從8位到32位的CPU上。
可選擇應(yīng)用模塊:PPP、PPPoE、Telnet(Server&Client)、FTP(Server&Client)、IP Multicast和NichePOP3等。它為TCP/IP上的附加模塊增加了POP3 Email服務(wù)器收郵件功能。
(2) 管理和配置協(xié)議
WebportTM: 嵌入式Web服務(wù)器,讓最終用戶通過WWW瀏覽器配置和監(jiān)控嵌入式設(shè)備,而避免編寫專用的GUI界面。這些界面多數(shù)是與主機(jī)OS(如Win98)相關(guān)的,而且需要目標(biāo)環(huán)境大量的資源,如文件系統(tǒng)。
Email Alerte: 為嵌入式系統(tǒng)增加預(yù)告和報(bào)警功能。它允許用戶向本地或遠(yuǎn)程的Email地址發(fā)出預(yù)先設(shè)置好的信息(比如某個(gè)條件下的報(bào)警信息)。
Interniche協(xié)議棧同樣具有良好可移植特性,它對(duì)系統(tǒng)的要求只有:
時(shí)鐘,至少1 s“滴答”;
內(nèi)存和操作系統(tǒng);
至少具有一個(gè)網(wǎng)絡(luò)接口設(shè)備(查詢或中斷驅(qū)動(dòng));
相配的編譯器和調(diào)試器。
只須根據(jù)以太網(wǎng)控制器手冊(cè)的描述,編寫出發(fā)送包、接收包的函數(shù),以及用于以太網(wǎng)控制器的外部中斷處理程序即可完成對(duì)Interniche網(wǎng)絡(luò)部分的移植。由于Interniche協(xié)議棧也是可以獲得源碼的,所以對(duì)于任何網(wǎng)絡(luò)控制器都可通過不斷的調(diào)試最終完成自己的驅(qū)動(dòng)程序。此外,為了方便調(diào)試,使Niche ToolTM工作,還應(yīng)完成對(duì)Interniche中向串口收/發(fā)字符putchar()和getch()的移植,這樣就可以在PC端使用超級(jí)終端經(jīng)過串口與終端設(shè)備上的Interniche基于命令行進(jìn)行交互了。Interniche的各種協(xié)議簇可以根據(jù)需要由μC/OS-II調(diào)度的狀態(tài)查詢?nèi)蝿?wù)。
5 μC/FS文件系統(tǒng)
μC/FS是FAT型文件系統(tǒng),它適用于所有存儲(chǔ)介質(zhì),需要用戶為這些儲(chǔ)存介質(zhì)提供基本的硬件訪問函數(shù)。μC/FS在速度、多功能性和內(nèi)存封裝上都做了優(yōu)化,支持FAT12、FAT16和FAT32文件系統(tǒng),支持各種不同的設(shè)備驅(qū)動(dòng),從而允許用戶在同一時(shí)間通過文件系統(tǒng)訪問不同類型的硬件,通過設(shè)備驅(qū)動(dòng)在同一時(shí)間訪問不同的介質(zhì)。μC/FS還支持操作系統(tǒng),包括μC/OSII在內(nèi)的多種操作系統(tǒng)都可以很方便地與μC/FS結(jié)合,這樣用戶即可在多線程環(huán)境下進(jìn)行文件操作。
μC/FS根據(jù)其組織邏輯機(jī)構(gòu),可以分為4層,如圖2所示。
① API層: μC/FS與用戶應(yīng)用程序之間的接口。它包含了一個(gè)與文件函數(shù)相關(guān)的ANSI C庫,如FS_FOpen和FS_FWrite等。API層把這些調(diào)用傳遞給文件系統(tǒng)層。目前在μC/FS下只有FAT型文件系統(tǒng)可以獲取, 但API層可以同時(shí)處理不同類型的文件系統(tǒng)層,所以在μC/FS下可以同時(shí)使用FAT和其他文件系統(tǒng)。
、 文件系統(tǒng)層: 把文件操作請(qǐng)求傳遞給邏輯塊操作。通過這種傳遞,文件系統(tǒng)調(diào)用邏輯塊操作來為設(shè)備指定相應(yīng)的設(shè)備驅(qū)動(dòng)。
、 邏輯塊層:主要功能是使對(duì)設(shè)備驅(qū)動(dòng)的訪問同步,并為文件系統(tǒng)層提供一個(gè)方便的接口。邏輯塊層調(diào)用一個(gè)設(shè)備驅(qū)動(dòng)來進(jìn)行塊操作。
、 設(shè)備驅(qū)動(dòng): 設(shè)備驅(qū)動(dòng)是處于系統(tǒng)底層的例程,用以訪問存儲(chǔ)硬件。設(shè)備驅(qū)動(dòng)結(jié)構(gòu)簡(jiǎn)單,易于與用戶自己的存儲(chǔ)設(shè)備進(jìn)行整合。
μC/FS是為與所有類型的硬件協(xié)同工作而設(shè)計(jì)的,為了在μC/FS中使用某種特定的硬件,需要提供該硬件的設(shè)備驅(qū)動(dòng)。當(dāng)用戶要使用自己的設(shè)備驅(qū)動(dòng)時(shí),需要通知μC/FS設(shè)備的名稱以及采用的文件系統(tǒng)層的類型(目前只支持FAT)。用戶可在FS_Conf.h文件中通過設(shè)置FS_DEVINFO來實(shí)現(xiàn),F(xiàn)S_Conf.h文件用于初始化μC/FS的全局設(shè)備信息表。第一個(gè)參數(shù)是設(shè)備名稱,在調(diào)用μC/FS API時(shí)會(huì)用到;第二個(gè)參數(shù)是指向文件系統(tǒng)層函數(shù)表的指針,目前只支持FAT;第三個(gè)參數(shù)是指向設(shè)備驅(qū)動(dòng)函數(shù)表的指針。
如果要將μC/FS移植到用戶系統(tǒng)的FLASH里,則只有幾個(gè)文件須修改。一個(gè)是CONFIG目錄下的fs_conf.h和fs_port.h文件,需要根據(jù)系統(tǒng)的具體情況(如文件系統(tǒng)的設(shè)備類型,以及是否使用操作系統(tǒng)等)修改。還有DEVICE目錄下的flash_conf.h和flash_device.c這兩個(gè)文件。flash_conf.h里需要設(shè)置用戶的FLASH信息,如FLASH的類型、訪問模式,以及FLASH的起始地址和長(zhǎng)度等。flash_device.c需要根據(jù)用戶FLASH手冊(cè)做些修改,主要是在Flash command definitions部分,需要修改相應(yīng)的操作命令宏,如擦除、編程命令字等。如果所有配置均正確,則可在目標(biāo)系統(tǒng)上編譯使用設(shè)備的應(yīng)用程序。正常情況下,編譯μC/FS的源代碼不會(huì)出現(xiàn)任何編譯警告,應(yīng)用程序一經(jīng)編譯即可在目標(biāo)系統(tǒng)的調(diào)試器下運(yùn)行。如果μC/FS有問題而不能運(yùn)行,則可先測(cè)試一下各項(xiàng)FLASH的底層驅(qū)動(dòng)函數(shù)(如FLASH_WriteAdr、FLASH_WriteOff和FLASH_EraseSector等),看是否能直接對(duì)FLASH進(jìn)行操作。如果FLASH的底層驅(qū)動(dòng)函數(shù)沒有問題,則可能是在調(diào)用μC/FS的API時(shí),初始化或者傳遞的命令不正確,特別要檢查一下FS_IoCtl的命令參數(shù)。
6 結(jié)束語
本文提出了一種基于ARM處理器和嵌入式操作系統(tǒng)的GPRS/CDMA無線數(shù)據(jù)終端的實(shí)現(xiàn)方案。首先給出了系統(tǒng)硬件的的原理結(jié)構(gòu)框圖,說明了系統(tǒng)中主要元器件的性能和使用方法;然后分別介紹了μC/OSII嵌入式操作系統(tǒng)、Interniche網(wǎng)絡(luò)協(xié)議棧和μC/FS文件系統(tǒng)的結(jié)構(gòu)、特性以及主要的移植步驟。目前筆者已完成了終端軟硬件的調(diào)試工作,系統(tǒng)測(cè)試穩(wěn)定可靠,可以廣泛應(yīng)用在水電氣費(fèi)管理(如遠(yuǎn)程抄表)、環(huán)保和電力監(jiān)控等場(chǎng)合,具有廣闊的使用前景。