基于嵌入式ARM-Linux的GPS智能終端設計
2.2.1 ARM主控模塊
AT91RM9200的串口UART2和UART3分別與CDMA模塊、GPS模塊通信,在實際通信時兩路連接都加有LVTTL電平到RS 232電平的轉換電路。AT91RM9200接收GPS模塊從串口3發出的位置信息,解析出其中有用數據進行封裝,然后以規定格式通過串口2交給CDMA模塊,通過CDMA網絡接入Internet網最終送至ITS監控中心;接收并解析ITS控制中心發來的短消息命令,按命令進行上傳定位等操作;把系統運行狀態及ITS控制中心發來的信息在液晶屏上顯示出來。
2.2.2 CDMA通信模塊
CDMA模塊是整個系統的通信基礎,設計中采用Fidelix公司的CDMA通信模塊FD810。該模塊內嵌的高通Qualcomm MSM6025芯片,除支持基本的通話和SMS短消息外,還支持CDMA20001x無線數據傳輸。高速上下行速率與大緩存,數據傳輸速率高達153.6 Kb/s,可通過AT命令遠程控制內置TCP/IP協議堆棧。DTGS-800與AT91RM9200通過串口UART2實現數據的收發和AT指令的操作。
2.2.3 GPS模塊
GPS接收模塊選用芬蘭Fastrax公司的iTrax100。該模塊支持NMEA0183和Sony ASCⅡ協議的數據格式。GPS模塊通過串口3將數據以固定的幀格式發送至AT91RM9200。GPS模塊需要配備專門的GPS天線接收GPS衛星信號。一般在比較開闊的地區,需接收到3顆以上的GPS衛星信號才能進行準確定位。
2.2.4 存儲器系統
存儲器系統采用4 MB NOR FLASH,64 MBNAND FLASH和32 MB SDRAM。NOR FLASH通過16位數據總線與CPU交換數據,用來存儲Uboot,Linux內核、文件系統;NAND FLASH存儲應用程序,作為系統的數據存儲器,如加載電子海圖等。為充分發揮32位ARM處理器的數據處理能力,選用2片16位的HY57V281620HG并聯,以構建32位SDRAM與ARM交換數據。SDRAM在系統中主要用作程序的運行空間、數據及堆棧區。
首先,通過JTAG口將Uboot、Linux內核、文件系統燒寫到NOR FLASH,將應用程序燒寫到NANDFLASH。在系統啟動時,CPU首先從復位地址0x0處讀取啟動代碼,并將存有引導程序Uboot的NORFLASH存儲器配置到:Bank0,即AT91RM9200的NCS0引腳接至NOR FLASH芯片AT49BV322AD的CE端,這樣就可以從NOR FLASH啟動嵌入式Linux操作系統。
3 GPS智能終端的軟件設計
嵌入式Linux系統只需引導程序、Linux微內核、初始化進程3個基本元素,移植嵌入式Linux,就是使實時內核能在其他處理器(CPU)或微控制器(MCU)上運行。將嵌入式Linux移植到AT91RM9200平臺上,一般需要4個步驟:下載源碼和建立交叉編譯環境,配置編譯內核,制作文件系統,下載和調試內核。
3.1 應用程序設計
應用程序包括Uboot啟動代碼、串口設備驅動程序、CDMA網絡數據傳輸程序、GPS串口通信程序等。
(1)系統加電后復位;
(2)Uboot初始化CPU,SDRMA,分配地址空間等;
(3)Uboot把Linux內核的壓縮文件解壓到SDRAM中,同時Uboot把控制權移交到Linux。
Linux的內核有在FLASH存儲器上直接運行和加載到內存中運行2種工作方式。這里采用的FLASH存儲器運行方式相對較復雜,但運行速度更快;
(4)開始執行SDRMA中的代碼,Linux內核初始化,完成堆棧和中斷的分配等;
(5)加載串口驅動模塊,完成串口的初始化;
(6)運行CDMA網絡數據傳輸程序,通過CDMA網絡與Internet進行連接;
(7)運行GPS串口通信程序,通過串口將GPS數據送至AT91RM9200。
至此,已建立了從GPS數據采集到數據傳輸的完整的嵌入式監控系統。
3.2 無線接入網絡程序
終端由CDMA網絡接入Internet后,通過互聯網進行數據傳輸。系統上電和載入Linux后,首先初始化CDMA模塊,進行端口設置和波特率設置(115 200 b/s);然后進入撥號等待狀態。由于該終端在功能上映射為無線Modem,所以登陸網絡需進行PPP撥號連接,接入號為#777,用戶名和密碼均為CARD。啟動程序后,確認是否撥號成功,若成功撥號,則調用GPS串口通信程序和網絡數據傳輸程序;最后使用Internet結束后,關閉無線連接。
3.3 CDMA網絡數據傳輸程序
在Linux操作系統下,監控終端通過CDMA網絡與Internet連接,將數據上傳到監控中心。套接字Socket是許多操作系統網絡編程的通用API,是介于網絡應用層和傳輸層之間的編程接口。套接字提供了訪問下層通信協議的大量系統調用和相應數據結構,進程在Linux上的網絡通信過程就是使用套接字傳輸數據的過程。,文中介紹的Socket通信采用面向連接的TCP協議。
客戶端和服務器端的TCP應用程序流程如圖3所示。客戶機部分先由Socket()創建本地套接口,給服務器端套接口地址結構賦值;用Connect()函數使本地套接口向服務器端套接口發出建立連接請求,經3次握手建立TCP連接;若連接建立成功,則用Send()和Recv()函數與服務器通信;通信結束,用Close()關閉套接口。
服務器部分由Socket()創建套接口,并給套接口地址結構賦值;調Bind()函數綁定套接口、用Listen()函數在該套接口上監聽請求;當Accept()函數接受請求,產生新的套接口及描述字,并與客戶端連接;在用Fork()函數派生新的子進程與客戶端通信,主進程繼續處理其他請求。
3.4 GPS串口通信程序
GPS串口通信程序是對采集到的GPS數據和車輛狀態數據進行解析;對時間、經度、緯度、速度及超速報警等數據解析,并以固定格式通過串口3傳送到AT91RM9200。GPS模塊的工作流程如圖4所示。
評論