PXA270嵌入式系统在Socket通信的应用

最新更新时间:2014-07-11来源: 21IC关键字:PXA270  嵌入式系统 手机看文章 扫描二维码
随时随地手机看文章

1 引言

英特尔公司于2003年底推出了性能最为强劲的PXA27x系列嵌入式处理器,PXA27x系列嵌入式处理器基于ARMv5E的Xscale核心,最高频率可达624MHz.作为一款性能极其强劲的嵌入式处理器,配合嵌入式Linux或Wince操作系统,PXA270理论上可以支持任何媒体格式,并通过软件升级,支持未来媒体格式。它最初出现在PDA(比如惠普HP4700)和智能手机(如MOTO E680)上。因此它的扩展接口相当丰富,扩展接口有SD/SDIO/MMC、CF/PCMCIA、CMOS/CCD CAMERA、蓝牙、USB1.1、OTG等。

Socket接口是TCP/IP网络的API,socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。

2 系统设计

系统的设计分为服务器端和客户端设计两部分,服务器端为运行Linux操作系统的PC机,客户端为PXA270系统,在该系统中移植和构建Linux嵌入式操作系统,两者通过Switch交换机进行网络通信。

2.1 系统工作原理

在Linux 操作系统中,Socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取。Linux 拥有POSIX 标准库函数,Socket()、Bind()、Sendto()、Recvfrom()等库函数可以方便地实现客户/ 服务器模型中数据的传送与接收。系统设计主要的目的是完成服务器和客户端网络通信的实现。首先启动宿主机和客户机的操作系统Linux,然后每个模块加载网络设备驱动程序,最后通过TCP/IP协议建立双方的通信链路,完成Socket通信,详细情况如图1所示。

2.2 嵌入式TCP/IP协议架构

TCP/IP(TransmissionControlProtocol/InternetProtocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。TCP/IP是一个四层的分层体系结构。高层为传输控制协议,它负责聚集信息或把文件拆分成更小的包。低层是网际协议,它处理每个包的地址部分,使这些包正确的到达目的地。

嵌入式系统作为TCP服务器,在三次握手建立连接的过程中,嵌入式系统作为监听状态的服务器,处于LISTEN状态,等待对方发起连接。当它接收到SYN数据片,立即发出SYN+ACK的数据片确认收到对方的SYN,此时变为SYN_ RECEIVED状态。再接收到对方返回的一个包含ACK的空数据片则三次握手完成,进入ESTABLISHED状态,最后进行TCP数据通讯。

 

 

图1 系统的原理示意图

嵌入式系统建立连接时初始化序列号,然后根据对方发包中的值来确定序列号,不记忆序列号,不能识别重复报文。嵌入式服务器仅仅在服务器端响应客户端的请求,接收一个发送一个确认回答,不考虑失序问题。同时接收到TCP请求后,将存储于发送缓冲区中的数据立即发送即可,只需一个数据包就能完成,也不需考虑失序问题。

因为嵌入式系统采用滑动窗口为1的传输方式,即发送一次数据包就等待返回应答,因此当接收不到确认包,就认为自己发送的包丢失,直接发送上次发送的数据。TCP的连接中,当客户机异常导致连接崩溃时,嵌入式系统发数据时会被回复复位信号,回到初始状态。嵌入式TCP/IP协议如图2所示。

嵌入式系统是"控制、监视或者辅助装置、机器和设备运行的装置"(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

3 客户端/服务器端功能设计

在TCP/IP网络中,通信的两个进程间相互作用的主要模式是客户/服务器模式,即客户端向服务器端发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式在操作过程中采取的是主动请求方式。

 

 

图2 嵌入式TCP/IP图解

3.1 客户端程序设计

socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的socket,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

客户端可以向服务器端发送连接请求,并且客户端也可以接收到来自服务器端发送回来的数据。客户端可以判断当前自己的工作状态,如连接的建立,启动的成功和数据包通信的个数等。客户端程序设计主要按以下的步骤完成函数的调用:

①建立自己的Socket(并验证建立成功);

②启动连接(并验证建立成功);

③返回连接信息;

④接收收到的数据;

⑤判断数据的属性。

客户端程序设计的程序基本流程如图3所示。

 

 

图3 客户端程序简单示意图

客户端打开通信通道,并连接到服务器所在主机的特定端口,向服务器发送请求报文,等待并接收应答,请求结束后关闭通信通道并终止通信。客户端主要程序如下:

Int main(int argc,char *argv[])

if(argc!=3)

printf("error!!!please enter the remote IP and PORT please!!! the form like 192.168.0.* 4000 ");

mysocket=socket(AF_INET,SOCK_STREAM,0); //建立一个套接字

if(mysocket==-1)

printf("error!!! failed to created the new socket,program end here ");

printf("OK-- you have successful created a socket named mysocket ");

return(0); //socket 建立不成功,回初始位置

connectcheck=connect(mysocket,(struct sockaddr*)&addr_remote,sizeof(struct sockaddr));

//调用connect函数连接服务器端

if(connectcheck==-1)

printf("error!!!sorry you have failed to connect the remote server!!try again !program end here ");

// connect不成功回初始位置

printf("OK-- Now you have successful connect the server,this server IP =%s,and it's PORT =%s,now you can communicat with this server!!!!!!! ",argv[1],argv[2])

//打印服务器IP地址和端口号

while(1)

bzero(gotbuffer,long);

number=recv(mysocket,gotbuffer,long,0);

//调用阻塞函数

if(number==-1)

printf("error!!! some thing wrong !let you can not got the data form server,program end here ");

return(0);

gotbuffer[number]='\0';

close(mysocket);3.2 服务器端程序设计

服务器端可以快速的做出客户端的连接请求反映,服务器端反映来自客户端的连接参数,如连接的IP、连接时间、连接的当前状态等。服务器启动后根据请求提供以下服务:

①打开通信通道并告知本地主机,在某一公认地址上接收客户请求;

②等待客户请求到达该端口;

③接收到重复服务请求,处理该请求并发送应答信号;

④返回第二步,等待另一客户请求;

⑤关闭服务器。

服务器端程序设计的流程如图4所示。

客户端与服务器端进程的作用是非对称的,因此编码不同。同时,服务器进程一般是先于客户请求请求而启动的,只要系统运行,该服务进程一直存在,直到正常或强迫终止。服务器端主要程序如下:

mysocket=socket(AF_INET,SOCK_STREAM,0);

//建立新的套接字

if(mysocket==-1)

printf("error!!! failed to created mysocket ");

return(0); //socket建立不成功,回初始位置

mybindcheck=bind(mysocket,(struct sockaddr*)&addr_local,sizeof(struct sockaddr));

if(mybindcheck==-1)

printf("error!!!failed to bind the IP and port with mysocket ");

return(0);

 

 

图4 服务器端程序简单示意图

{ printf("OK--you have successed bind your IP with port %d ",port);

listencheck=listen(mysocket,howmany);

if(listencheck==-1)

printf("error!!! you have failed listen this port,program end here ");

return(0); //调用监听函数

sin_size=sizeof(struct sockaddr_in);

newsocket=accept(mysocket,(struct sockaddr*)&addr_remote,&sin_size);

//调用接收函数

if(newsocket==-1)

printf("error!!!failed to got remote connect this server,program end here ");

return(0); //建立新的socket失败返回

printf("OK-- now have created the newsocket to use this own connection,use this communicate with clint%s ",inet_ntoa(addr_remote.sin_addr),port);

printf("OK-- server have successed got connect from clint IP = %s,port = %d,now connecting is running; ",inet_ntoa(addr_remote.sin_addr),port)

pid_t pid;

pid=fork(); //调用fork()建立子进程

if(pid>0)

printf("OK-- i am a father procces,child proccess will continue for you,it's ID= %d,now end newsock and use old socket to listen again…… ",pid);

close(newsocket);

printf("OK-- i am a child procces,i am responsible for this new communicate,blow i will do for connect ");

printf("OK-- please enter your data which you want to send n");

while(1)

bzero(sendbuffer,long);

scanf("%s",sendbuffer);

sendcheck=send(newsocket,sendbuffer,strlen(sendbuffer),0); //发送数据

if(sendcheck==-1)

printf("error!!!failed to send to remote ");

close(newsocket);

else

printf("OK--now you have send %d byte data to remote!!!pleases send again!!!! ",sendcheck);

4 应用与测试

 

 

图5 数据发送验证客户端

系统测试前,服务器端通过以太网和客户端实现连接。客户端构建了linux嵌入式操作系统,客户端的程序通过嵌入式交叉编译环境进行调试。测试前应保证网络的顺畅和串口的操作正常。

启动服务器端,运行Linux操作系统,并建立新的用户终端,然后运行服务器端socket通信程序。

启动客户端,运行Linux嵌入式操作系统,配置IP地址为192.168.15.15,运行客户端socket通信程序。

服务器端和客户端连接,在服务器端会有详细的连接请求显示出来,如IP地址、服务器当前状态,通信模式等。服务器开始发送数据,客户端开始接收来自服务器的数据,验证是否正确。图5为数据发送验证客户端。

5 结论

通过在PXA270中增加嵌入式操作系统Linux的基础上实现一个较为简单的网络通信模块,验证了嵌入式系统socket通行的可行性,实现嵌入式系统基于TCP/IP协议的网络接入,针对各种智能设备如家用电器、工业控制装置或仪器、安全监控系统、汽车电子接入互联网变得简单容易。

关键字:PXA270  嵌入式系统 编辑:探路者 引用地址:PXA270嵌入式系统在Socket通信的应用

上一篇:基于CSU8RP3429芯片的LCD移动电源设计
下一篇:提高RS485通信可靠性的设计方法

推荐阅读最新更新时间:2023-10-12 22:42

嵌入式系统设计师必备的在线ARM仿真器知识
本文提供了一些关于在线 ARM 仿真器 的信息,以及给作为嵌入式系统设计师的你带来的好处。根据你的需要,你将在产品开发中对开发工具作出更恰当的选择。    一、嵌入式产品的开发周期   典型的嵌入式微控制器开发项目的第一个阶段是用C编译器从源程序生成目标代码,生成的目标代码将包括物理地址和一些调试信息。目前代码可以用软件模拟器、目标Monitor或在线仿真器来执行和调试。软件模拟器是在PC机或工作站平台上,以其CPU(如x86)及其系统资源来模拟目标CPU(如P51XA),并执行用户的目标代码;而目标Monitor则是将生成的目标代码下载到用户目标板的程序存储器中,并在下载的代码中增加一个Monitor任
[单片机]
基于嵌入式系统的GPRS系统的设计
  嵌入式系统就是一个具有特定功能或用途的计算机软硬件结合体,或指装入另一个设备并且控制该设备的专用计算机系统。嵌入式系统的最大特点是其具有目的性和针对性,即每一套嵌入式系统的开发都有其特殊的应用场合与特定功能。嵌入式系统包含硬件和软件两部分:硬件架构以嵌入式处理器为中心,配置存储器、I/O设备、通信模块等;软件部分以软件开发平台为核心,向上提供应用编程接口API,向下屏蔽具体硬件特性的板级支持包BSP。嵌入式系统中,软件和硬件紧密配合,协调工作,共同完成系统预定的功能。   GPRS是General Packet Radio Service的简称,即通用无线分组业务。它是基于现在运行的GSM基础上发展的数据业务,类似于固定
[单片机]
基于<font color='red'>嵌入式系统</font>的GPRS系统的设计
嵌入式系统看现代计算机产业革命
摘要 人类近代史上有两次重大的产业革命: 一次是18世纪的由蒸汽机推动的第1次产业革命,另一次是当前人们正面临着始于20世纪中期,由集成电路开启的现代计算机产业革命。现代计算机产业革命是一场智力革命,以普遍的智能化工具代替人的脑力劳动。嵌入式系统成为智能化工具的归一化智力内核。现代计算机产业革命构建的知识平台,将资本经济推向知识经济时代。知识平台的广泛使用必将对人类社会经济、生活方式产生极其重大的影响。 关键词 产业革命 嵌入式系统 知识经济 知识平台 时空量子化 智力平台 智力嵌入   现代计算机是微处理器技术基础上的数字计算机,现代计算机产业革命是一场空前的智力革命,它将人类独有的知识行为能力(智力)集成到工具中,
[嵌入式]
如何将Linux2.4移植到ARM平台的嵌入式系统
目前 , 在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用 , 建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点。S3C2410是SAMSUNG公司基于ARM920T处理器内核开发的一款16/32位嵌入式处理器,运行频率高达200多M,具有MMU和高速缓存等丰富片上资源,是目前基于ARM920T内核的出货量最大的一款芯片。目前嵌入式操作系统也较多,如 Tor2nado 的VxWork、微软的 Windows CE等等。大量开发人员选择的却都是Linux,这是因为它源代码开放,可以轻松修改移植到自己的目标平台系统里使用。并且事实证明,效果令人满意。两者的结合必将在嵌入式系统的世界里打出一片天
[单片机]
如何将Linux2.4移植到ARM平台的<font color='red'>嵌入式系统</font>
基于硬件隐藏思想设计MCF5307嵌入式系统驱动程序
1引言 嵌入式系统软件人员经常读取系统外设寄存器和控制寄存器,直接控制硬件,这样对软件开发者来说是一种繁复的事,而且嵌入式微处理器内部集成外设种类越来越多,如串口设备、时钟/定时器设备、IIC总线等,对嵌入式编程带来更多的困难。如果读写硬件的语句散布在整个应用程序中或者不同的功能模块可能会读写同一个硬件,那么当系统硬件发生变动时,应用程序就必须全盘重写。怎么避免这样的情况?一个好的方法就是按照尽量隐藏硬件的原则编制设备驱动程序。 在设计驱动程序中尽量隐藏硬件,有几个优点:①因为模块化,软件的总体结构更容易理解; ②只要是与某一个外设相互作用,必然是通过他的驱动程序来起作用的,这样查找错误和故障就更容易些;
[单片机]
基于硬件隐藏思想设计MCF5307<font color='red'>嵌入式系统</font>驱动程序
基于EP9312的金融嵌入式系统实现方案
  阐述了采用EP9312来构造银行税务类嵌入式系统的理由,将EP9312与其它嵌入式处理器进行了比较。根据EP9312的特点和系统需求,提出了一种基于EP9312的嵌入式系统硬件设计方案。介绍了系统的技术指标及其所使用的Super I/O、PHY、接口电平转换器、Flash、SDRAM、Boot-loader等各组成部分。该系统主要应用于高端打印机、计算机终端和高端收款机等产品。   1 嵌入式系统的概念与特点   嵌入式系统结合微处理器或微控制器的系统电路与其专属软件,其特性可归纳为下列四项:   (1)通常执行特定功能;   (2)以微电脑与外围构成核心;   (3)严格的时序与稳定性要求;
[单片机]
基于EP9312的金融<font color='red'>嵌入式系统</font>实现方案
XScale PXA270在Linux下的FPGA设备驱动
引言 Intel公司推出的XScale采用ARM V5TE结构,是Strong ARM的升级换代产品。XScale PXA270处理器最高主频可达到624M赫兹,加入了Wireless MMX、Intel SpeedStep等新技术,以其高性能、低功耗、多功能等特点在信息家电、工业控制等领域得到了广泛的应用。在嵌入式控制中,“微处理器+FPGA”是一种常用的解决方案,FPGA(现场可编程门阵列)有编程方便、集成度高、速度快等特点,电子设计人员可以通过硬件编程的方法来实现FPGA芯片各种功能的开发,在我们的一个数控平台的研究项目中,采用XScale PXA270作为主CPU,并对其进行FPGA扩展,使其具有插补、电机驱动、信
[嵌入式]
用户关注实时性性,Linux使用率仍然偏低
日前在美国硅谷举办的嵌入式系统研讨会(Embedded Systems Conference)上,一份针对嵌入式操作系统的调查显示,目前(美国)只有17%的嵌入式系统设计工程师采用嵌入式Linux,而66%的人表示他们要么对此没有兴趣,要么就是今后也不会用。 EE Times及其姊妹出版物Embedded Systems Design的“2006年嵌入式系统设计状况调查报告”发现,34%的受调查表示对Linux不感兴趣,2/3的受调查对象说他们对Linux有兴趣,但是,最近不会使用;而17%的人则说他们可能很快就会采用。相比之下,2005年有24%的受调查者表示他们正在使用嵌入式Linux。 在
[嵌入式]
小广播
热门活动
换一批
更多
最新电源管理文章
更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved