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