1 引言 嵌入式系統是繼IT網絡技術之后,又一個新的技術發展方向。由于嵌入式系統具有體積小,性能強,功耗低,可靠性高以及面向行業應用的突出特征,目前已經廣泛的應用于軍事國防,消費電子,網絡通信,工業控制等各個領域。隨著計算機技術與通信技術的發展,嵌入式系統的研究與開發有著越來越重要的實際意義。現階段Internet的普及,使市場對嵌入式設備的網絡功能和性能提出了更高的要求。8/16位單片機的速度和內存較難滿足嵌入式設備的網絡要求,因此32位RISC處理器越來越受到青睞。ARM公司自1990年正式成立以來,在32位CPU開發領域不斷取得突破,已經處于業界領軍地位,加上其設計的芯核具有功耗低、成本低等顯著優點,因此獲得眾多的半導體廠家和整機廠商的大力支持,在32位嵌入式應用領域獲得了巨大的成功。 嵌入式系統的網絡服務通信設備作為嵌入式系統重要的一個組成部分具有很強的實用性和研究價值,為遠程的控制和網內信息傳輸提供了一個很好的手段。本文基于ARM720T內核的HMS30C7202嵌入式系統和Redhat9.0操作系統,對基于TCP/IP協議的嵌入式板機網絡通信程序的設計與開發技術進行了研究,實現了板機之間的通信,為以后網絡服務在實際環境中的應用打下了堅實的基礎。 2. HMS30C7202開發板簡介 HMS30C7202是32位高集成度低功耗微處理器,是由ARM720T內核和其他一些外圍接口器件組成,支持8K的數據與指令Cache,支持段式和頁式存儲的MMU,寫緩沖器及AMBA接口。HMS30C7202采用0.25mm低功耗CMOS工藝片內電壓2.5V,I/O支持3.3V電壓,采用了256管腳QFP/BGA封裝。HMS30C7202片上資源十分豐富,具有極高的集成度,非常適用于嵌入式系統應用。主要應用于PDA,智能電話,個人音頻設備等場合。芯片HMS30C7202支持的內外圍設備包括多通道DMA(直接存儲器存取),3個定時器和一個看門狗定時器,智能中斷控制器,存儲器控制器(如ROM,Flash,SRAM,SDRAM),電源管理單元LCD控制器,定時時鐘(32 .768kHz晶振),紅外通訊接口(支持SIR),4個串口(兼容16C550),PS2外部鍵盤/鼠標接口,2通道PWM接口,矩陣鍵盤控制接口(8*8),普通I/O口,MMC/SMC卡接口,2個CAN接口,USB接口,片內ADC接口模塊(可用于電池檢測,音頻輸入,觸摸屏),片內DAC接口模塊(8bit立體音頻輸出),3個PLL時鐘JTAG調試接口等。 網絡傳輸是現在最為重要的數據傳輸途徑之一,由于HMS30C7202本身并沒有以太網控制模塊,所以需要一個與之匹配的控制芯片,比如CS8900,CS8900是單芯片全雙工的以太網控制器,配合必要的數字和模擬電路合成了完整的以太網電路,其主要結構包括ISA總線接口,802.3MAC,buffer,串行EEPRCM接口和帶有10BABE—T和AUI模擬前端。HMS30C7202通過操作CS8900的控制寄存器和讀寫CS8900的內部數據寄存器,實現網絡的鏈路層連接。 (CS8900與開發板連接示意圖) 3 . TCP/IP協議簡介 TCP/IP協議是一組包括TCP (Transfer Controln Protocol)協議和IP(Internet Protocol)協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。 絕大多數的客戶-服務器應用程序都使用TCP或UDP TCP(傳輸控制協議)以連接為基礎,也就是說兩臺電腦必須先建立一個連接,然后才能傳輸數據。事實上,發送和接收的電腦必須一直互相通訊和聯系。 UDP(使用者數據報協議)它是一個無連接服務,數據可以直接發送而不必在兩臺電腦之間建立一個網絡連接。它和有連接的TCP相比,占用帶寬少,但是你不知道你的數據是否真正到達了你的客戶端,而客戶端收到的數據也不知道是否還是原來的發送順序。 在此次程序的編寫和調試過程中我們應用TCP協議。 4. 程序設計 此程序設計是自動售貨機實現網絡化的重要基礎,是校園網絡化建設的組成部分之一。現階段高校內部自動售貨機多為投幣消費模式,貨幣識別系統是實現此種消費模式的重要硬件設備,此設備成本高,穩定性差,制約了自動售貨機的普及。通過在自動售貨機中嵌入ARM,并實現嵌入式系統的網絡化,可以實現自動售貨機的刷卡式消費,而且可以遠程查詢自動售貨機的狀態信息,使管理者及時掌握自動售貨機的狀態。所以此程序的設計實現具有很強的現實意義。 此程序設計是基于客戶機和服務器模式進行的(如下圖)。服務器上建立套接字,綁定后用listen()函數監聽綁定端口,通過accept()函數準備接收或發送信息。客戶端同樣建立套接字,但是不綁定端口,直接通過connect()函數與服務器建立連接,進而發送或接受數據。 本文分別以ARM板為服務器端和客戶端來介紹具體程序。分別實現了兩種模式下的TCP通信。即:ARM板作為服務器端,PC機作為客戶端。ARM板作為客戶端,PC機作為服務器端。用以太網口連接,實現信息的通訊。 模式一 ARM板作為服務器端,PC機作為客戶端。按流程編寫具體程序如下: #define MYPORT 3490 //服務器監聽的端口 #define BACKLOG 10 //能夠同時接受的連接數量 int sockfd,newfd; //在sockfd上進行監聽,用newfd接受新的連接 struct sockaddr_in my_addr; //存放自己的地址信息 struct sockaddr_in their_addr; //存放連接者的地址信息 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } //建立套接字,判斷是否出錯,如果出錯,返回出錯信息 my_addr.sin_family = AF_INET; //主機字節順序 my_addr.sin_port = htons(MYPORT); //網絡字節順序 my_addr.sin_addr.s_addr = INADDR_ANY; //將本機IP自動填充 bzero(&(my_addr.sin_zero),8); //結構其他部分清零 if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) { perror("bind"); exit(1); } //綁定本地IP地址和端口 if (listen(sockfd, BACKLOG) == -1) { perror("listen"); exit(1); } //監聽端口 while(1) { sin_size = sizeof(struct sockaddr_in); if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) { perror("accept"); continue; } //返回新的套接字描述符,就是跟遠程計算機的連接,第一個套接字描述符仍然在機器原來的哪個端口listen() if (!fork()) //建立子進程處理連接 if (numbytes=(recv(new_fd, buf, maxdatasize,0)) == -1) { perror("recv"); exit(1); } //接收客戶端發送的信息進緩沖區 close(newfd); //關閉套接字 程序實現在ARM板上監聽3490端口,準備接收建立連接的遠程計算機送來的信息。 printf("Received: %s",buf);可以顯示緩沖區中遠程計算機送來的信息。 模式二 ARM板作為客戶端,PC機作為服務器端。按流程編寫程序如下: #define PORT 3490 //定義遠程端口信息 #define DEST_IP "210.43.8.21" //定義遠程計算機IP信息 struct sockaddr_in their_addr; //定義結構存放遠程計算機地址 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } //建立套接字 if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } //連接遠程計算機 if ((send(sockfd, "hello,my world!\n", MAXDATASIZE, 0)) == -1) { perror("send"); exit(1); } //向服務器發送數據 close(sockfd); //發送完成關閉套接字 程序實現了從ARM板通過3490端口連接遠程計算機,連接成功后發送數據。 此程序實現了板機之間的信息通訊,為自動售貨機與服務器之間的通信打下了堅實基礎。為自動售貨機的網絡化提供了一個可行的手段。 5.總結 TCP/IP協議已成為目前最為重要的以太網協議,TCP通信已經成為嵌入式系統有線通信的主要方式。ARM板既可以作為客戶端也可以作為服務器端,這種通信方式應用廣泛,具有很高的研究價值。 本文作者創新點在于對基于TCP/IP協議的嵌入式板機網絡通信程序的設計與開發技術進行了研究,給出了基于TCP協議的板機通信程序的編寫方法,實現了PC機與ARM板的通信。為以后基于網絡的嵌入式系統的應用和通訊程序開發打下了堅實的基礎。 |