基于HMS30C7202嵌入式系统的通信程序设计

2008-06-04 14:21:43来源: 微计算机信息 关键字:嵌入式系统  TCP  ARM  sockfd  客户端  recv  描述符  struct

  摘 要:由于嵌入式系统具有体积小,性能强,功耗低,可靠性高以及面向行业应用的突出特征,目前已经获得广泛应用。本文基于ARM720T内核的HMS30C7202嵌入式系统和Redhat9.0操作系统,对基于TCP/IP协议的嵌入式板机网络通信程序的设计与开发技术进行了研究,设计了程序,实现了PC机和板子之间的网络通信服务。

  关键词: HMS30C7202;TCP/IP;嵌入式系统;通信

  引言

  嵌入式系统是继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!n", MAXDATASIZE, 0)) == -1)

  {

  perror("send");

  exit(1);

  } //向服务器发送数据

  close(sockfd); //发送完成关闭套接字

  程序实现了从ARM板通过3490端口连接远程计算机,连接成功后发送数据。

  此程序实现了板机之间的信息通讯,为自动售货机与服务器之间的通信打下了坚实基础。为自动售货机的网络化提供了一个可行的手段。

  4.总结

  TCP/IP协议已成为目前最为重要的以太网协议,TCP通信已经成为嵌入式系统有线通信的主要方式。ARM板既可以作为客户端也可以作为服务器端,这种通信方式应用广泛,具有很高的研究价值。

  本文作者创新点在于对基于TCP/IP协议的嵌入式板机网络通信程序的设计与开发技术进行了研究,给出了基于TCP协议的板机通信程序的编写方法,实现了PC机与ARM板的通信。为以后基于网络的嵌入式系统的应用和通讯程序开发打下了坚实的基础。

关键字:嵌入式系统  TCP  ARM  sockfd  客户端  recv  描述符  struct

编辑:孙树宾 引用地址:http://www.eeworld.com.cn/afdz/2008/0604/article_736.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:步态加速度信号的无线采集系统设计
下一篇:Xilinx FPGA开发环境的配置

论坛活动 E手掌握
关注eeworld公众号
快捷获取更多信息
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
嵌入式系统
TCP
ARM
sockfd
客户端
recv
描述符
struct

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved