引言
嵌入式系统是继IT网络技术之后,又一个新的技术发展方向。由于嵌入式系统具有体积小,性能强,功耗低,可靠性高以及面向行业应用的突出特征,目前已经广泛的应用于军事国防,消费电子,网络通信,工业控制等各个领域。随着计算机技术与通信技术的发展,嵌入式系统的研究与开发有着越来越重要的实际意义。现阶段Internet的普及,使市场对嵌入式设备的网络功能和性能提出了更高的要求。8/16位单片机的速度和内存较难满足嵌入式设备的网络要求,因此32位RISC处理器越来越受到青睐。ARM公司自1990年正式成立以来,在32位CPU开发领域不断取得突破,已经处于业界领军地位,加上其设计的芯核具有功耗低、成本低等显著优点,因此获得众多的半导体厂家和整机厂商的大力支持,在32位嵌入式应用领域获得了巨大的成功。
嵌入式系统的网络服务通信设备作为嵌入式系统重要的一个组成部分具有很强的实用性和研究价值,为远程的控制和网内信息传输提供了一个很好的手段。本文基于ARM720T内核的HMS30C7202嵌入式系统和Redhat9.0操作系统,对基于TCP/IP协议的嵌入式板机网络通信程序的设计与开发技术进行了研究,实现了板机之间的通信,为以后网络服务在实际环境中的应用打下了坚实的基础。
1. 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与开发板连接示意图)
2 . 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协议。
3. 程序设计
此程序设计是自动售货机实现网络化的重要基础,是校园网络化建设的组成部分之一。现阶段高校内部自动售货机多为投币消费模式,货币识别系统是实现此种消费模式的重要硬件设备,此设备成本高,稳定性差,制约了自动售货机的普及。通过在自动售货机中嵌入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! ", MAXDATASIZE, 0)) == -1)
{
perror("send");
exit(1);
} //向服务器发送数据
close(sockfd); //发送完成关闭套接字
程序实现了从ARM板通过3490端口连接远程计算机,连接成功后发送数据。
此程序实现了板机之间的信息通讯,为自动售货机与服务器之间的通信打下了坚实基础。为自动售货机的网络化提供了一个可行的手段。
4.总结
TCP/IP协议已成为目前最为重要的以太网协议,TCP通信已经成为嵌入式系统有线通信的主要方式。ARM板既可以作为客户端也可以作为服务器端,这种通信方式应用广泛,具有很高的研究价值。
本文作者创新点在于对基于TCP/IP协议的嵌入式板机网络通信程序的设计与开发技术进行了研究,给出了基于TCP协议的板机通信程序的编写方法,实现了PC机与ARM板的通信。为以后基于网络的嵌入式系统的应用和通讯程序开发打下了坚实的基础。