嵌入式系统是指将应用程序操作系统与计算机硬件集成在一起的系统?它以应用为中心?以计算机技术为基础,而且软硬件可以裁剪,因而是能满足应用系统对功能、可靠性、成本、体积和功耗的严格要求的专用计算机系统。
本文给出一种适合于中/低端应用的通信平台设计方案,它可支持Ethernet网络之间的数据传输,并且具有RS232、RS485、USB等接口。文中围绕嵌入式uClinux环境设计了基于嵌入式通信微处理器S3C44B0X的硬件通信平台,从而实现了嵌入式SOCKET通信。
1 、嵌入式网络通信系统结构
作为一类特殊的计算机系统, 嵌入式系统通常由嵌入式处理器嵌入式外围设备。嵌入式操作系统和嵌入式应用软件等几大部分组成?嵌入式处理器是嵌入式系统的核心部件,它可分为嵌入式微处理器?嵌入式微控制器?嵌入式DSP(DigitalSignal Processor)和高度集成的嵌入式SoC(System on Chip)。嵌入式外围设备是指嵌入式硬件系统中除中心控制部件以外的存储、通信、保护、调试、显示等其它辅助部件。嵌入式操作系统一般在比较大型或需要多任务的应用场合才考虑使用,它可方便嵌入式应用软件的设计,大大提高嵌入式系统的功能,但同时也要占用宝贵的嵌入式资源。嵌入式应用软件和普通的应用软件有一定的区别,它是针对特定的实际专业领域,基于相应的嵌入式硬件平台能完成用户预期任务的计算机软件。
嵌入式处理器有许多种流行的处理器核,本文主要介绍采用SAMSUNG公司基于ARM公司32位RISC的ARM7TDMI核的S3C44B0X处理器来进行SOCKET通信的软硬件平台的设计和实现方法。
S3C44B0X是高性价比、高性能的微控制器,它采用ARM7TDMI核,可工作在66MHz ARM7TDMI是一种32位嵌入式RISC处理器,但也配备了16位压缩指令集Thumb。它支持片上调试,允许处理器响应调试请求暂停,芯片内的增强型乘法器(multiplier)可进行两个32位数相乘从而直接产生64位结果,也可为嵌入式ICE硬件提供片上断点和调试点支持。此外,它还可以提供三级流水线及冯?诺依曼结构。实际上,S3C44B0X已在ARM7TDMI内容基础上扩展了一系列完整的通用外围器件?图1所示是一种嵌入式网络通信系统的硬件体系结构。
2 、外围电路设计
作为优秀的网络控制器,基于S3C44B0X处理器的系统必须要有一个与之匹配的控制芯片。这里,选用了Cirruslogic公司的CS8900A。CS8900A是一个单芯片全双工的以太网解决方案,片内集成了用于完成以太网电路所必需的所有模拟和数字电路。图2为系统中的CS8900A以太网接口电路?图中的信号发送和接收端通过网络隔离变压器和RJ45接口接入传输媒体。另外,为了系统能够正常工作,还需要外接一个20MHz的晶振。
3 、基于uCliunx的SOCKET通信
本系统的软件是基于嵌入式操作系统uClinux而设计的?uClinux是一个完全符合GNU/GPL公约的操作系统,它与UNIX系统兼容,其代码完全开放?uClinux是在标准Linux基础上进行适当裁剪和优化后的操作系统,uClinux是一个高度优化?代码紧凑的Linux的嵌入式子集?虽然体积很小,但仍然保留了Linux的大多数优点,如:稳定?良好的移植性;优秀的网络功能;对各种文件系统的完备支持,以及标准丰富的API等?uClinux是专门面向没有存储器管理单元(MMU)的处理器的嵌入式操作系统,并且专为嵌入式系统做了许多小型化工作,它可以直接在Flash上运行,也可以加载到内存中运行?u-Cliunx带有一个完整的TCP/IP协议,同时也支持其他许多网络协议,对于嵌入式系统来说,它是一个网络完备的操作系统,因此得到了广泛的应用。
为了实现基于uClinux的应用系统的开发,建立或拥有一个完备的uCliunx开发环境是十分必要的?基于uClinux操作系统的应用开发环境一般由目标系统硬件开发板和宿主PC机构成3?通常需在安装有Linux的宿主PC机上安装交叉编译器,以把用户应用程序编译成目前uClinux只支持的flat格式的可执行文件和编译操作系统内核?目标硬件开发板用于运行操作系统和系统应用软件?目标硬件开发板和PC宿主机之间一般通过串口?并口或以太网接口来建立连接?本文SOCKET通信使用的软件开发及仿真环境如图3所示。
SOCKET即“套接字”,表示网络通信进程的ID?最常用的有流式套接字和数据报套接字两种?在Linux中,分别称为“SOCK STREAM”和“SOCKDGRAM”?经裁剪的uClinux保留了Linux中的大部分SOCKET库函数?基于S3C44B0X处理器的嵌入式SOCKET通信所要调用的主要库函数如下:
(1)SOCKETint SOCKET(int domain int type int proto-col)
此函数用来建立一个新的SOCKET,以通知系统建立一个通信端口?函数中的domain参数用于指定使用何种地址类型;type参数用于指定套接字类型;protocol参数通常为0,表示使用默认协议。
(2)bind intbind(int sockfd,struct sockaddr*myaddr,int addrlen)
bind函数可把SOCKET返回的套接字端口与网络上的物理位置相关联?其中sockfd参数是函数SOCKET返回的套接字描述符;myaddr参数是本地地址;ad-drlen参数是套接字地址结构的长度?服务器和客户机都可以调用函数bind来绑定套接字地址,但一般是由服务器调用函数bind来绑定自己的公认端口号。
(3)listenint listen(int sockfd,int backlog)
利用该函数可以使SOCKET端口接受从客户机发送来的连接请求backlog参数是所能接受的客户机的最大数目?对SOCKET?bind?listen三个函数的综合调用最终可在服务器上产生一个能接受客户机请求的*文件描述符sockfd。
(4)acceptint accept(int sockfd,struct sockaddr*address,int*address_len)
当有客户机发出连接请求时,此函数初始化这个连接?其中参数address用来存储客户机的信息,此信息由accept填入?当与客户机连接时,客户机的地址与端口将填到此处;addresslen是客户机地址长度的字节数,也由accept填入。
(5)connectint connect(int sockfd,struct sockaddr*address,size_t address_len)
客户机调用socket建立传输端口后,接着将调用connect函数来建立与远程服务器相连的连接线路?此函数的参数调用同bind。
本文设计的Socket通信采用server/client模式,即服务器端的应用程序用于接受客户端的连接请求。接收客户端的信息、处理客户端的计算请求、向客户端发送计算结果以及应答信息等。客户端的应用程序用于申请与服务器的连接、向服务器发送计算请求、处理服务器发回的计算结果和其它信息。
服务器在创建一个socket后,接着会将该socket与本地地址/端口号进行捆绑,成功之后就在相应的socket上*,当accpet捕捉到一个连接服务请求时,即完成一个新的连接,稍后可向客户端发送数据?
客户端代码相对来说要简单一些,首先通过服务器域名获得其IP地址,然后创建一个socket,接着调用connect函数来与服务器建立连接,连接成功之后再接收从服务器发送过来的数据,最后在通信结束后关闭socket。
mso-ascii- mso-hansi-
char buffer[256];
struct sockaddr_in addr;
struct hostent *hp;
struct in_addr in;
struct sockaddr_in local_addr;
if (argc 《 2) return;
if(!(hp=gethostbyname (argv[1]))){
fprintf(stderr,"Can't resolve host.n");
exit (1);
}if ((s = socket(AF_
INET,SOCK_STREAM,0)) 《0){
perror ("socket");
exit (1);
}
bzero (&addr,sizeof (addr));
addr.sin_family = AF_INET;
addr.sin_port=htons((unsigned short)atoi(argv[2]));
hp = gethostbyname(argv[1]);
memcpy(&local_addr.sin_addr.s_addr,hp-》h addr,4);
in.s_addr = local_addr.sin_addr.s_addr;
printf ("Domain Name %sn" argv
printf ("IP address :%sn",inet_ntoa (in));
printf("%s,%sn",hp-》h_name,argv[2]);
addr.sin_addr.s_addr=inet_addr(hp-》h_name);
if connect(s,(struct sockaddr *)&addr,sizeof (addr))《0){
perror ("connect");
exit (1);
}
recv (s,buffer,sizeof (buffer),0);
printf ("%sn",buffer);
while(1);
bzero(buffer,sizeof (buffer));
read (STDIN_FILENO,buffer,sizeof(buffer));
if (send (s,buffer,sizeof (buffer),0)《0){
perror ("send");
exit (1);
}
}
}
4 、结束语
设计开发了基于S3C44B0X的以太网通信系统,并利用uClinux操作系统强大的网络功能实现了Socket通信。由于uClinux目前只支持flat格式的可执行文件,因此本设计是在先建立好uClinux开发环境的情况下,把用户自行开发的应用程序通过宿主PC机上的交叉编译器转化为flat格式,然后再通过FTP添加到目标硬件开发平台上运行的。文中的客户端应用程序已经在基于ARM7TDMI核的S3C44B0X处理器的嵌入式开发平台上成功运行,并成功地和宿主PC机的服务器端应用程序实现了Socket通信。当然,也可以把目标硬件开发平台当作服务器端,而把宿主PC机当作客户端来进行双向文件传输。
上一篇:基于S3C44BOX处理器和Linux操作系统实现物流PDA无线终端的设计
下一篇:基于在S3C2410处理器平台上实现Windows CE.NET的应用设计
推荐阅读最新更新时间:2024-11-05 19:50
推荐帖子
- 请问IIs和IIC有什么区别?
- 请问IIs和IIC有什么区别?请问IIs和IIC有什么区别?一直没有弄明白。。。。I2S(Inter—ICSound)是用来传输音频的,对时钟要求非常严格。I2C(Inter-IntegratedCircuit)类似UART/SPI,两线制,比如EEPROM很多都使用I2C。区别。。。。是没有啥共同点好吧,这还用区别吗,应用是完全不同的,你要是I2S和SPI区别一下还差不多。完全不同的两种通讯方式,你记住字母不同就行了。I2S主要用于音频I2C是通用总线,用来传输数据。百度
- huangyan1127 单片机
- 频率计
- 小弟要做个频率计用32测外部输入频率没接触过32现在又急着用那位大哥大姐有这个程序或者有这方面的程序请发我下1501806575@qq.com万分感激。频率计被测频率是什么信号?电流还是电压还是别的?什么样的波形?输入幅值有多大?被测信号的频率范围是多少?要求测量精度是多少?等等这些基本要素都没有,怎么就知道32一定能行?拿到32程序就能做频率计了吗?俺不信。我要做的就是简单的测下测下几khz范围内的频率,现在只有块32在手上所以就想用下这个了应该是可以的吧,
- liubuwei8888 stm32/stm8
- 【转】采购经验分享
- 虽然不算是资深的老采购员,但从事采购工作也小有几年,写下这些东西,希望老采购员们给指点指点,也希望能给新采购员点帮助刚做采购的时候,在一家小公司负责零件采购,接手的时候有三家供应商同时供应,采购比例分别是甲:55% 乙:25% 丙:20%.由于甲的态度比较好,交期也保证,很快我就取消了乙丙的单子,全部由甲来供应。乙和丙停掉后不久,有一次甲方的产品出了问题,耽误了公司的事。老板大发雷霆,说:原来用三家供应商,就是让他们自己竞争,你倒好,就用一家了,它能好好服务吗?虽然被骂了,可以也觉得
- wstt 淘e淘
- 【挖电源】TOP系列开关电源制作
- 以前不懂开关电源怎么调试,以为把变压器饶好一定的砸数就完事,可是做出来的电源总是不行,要不就是带负载不行,或者是启动不了,偶尔烧东西然后才知道,TOP算是反激式的需要调整初级电感量的,原来如此!这个是用公司里的EE25的磁芯饶的AC85~265V输入,5V,2。5A输出【挖电源】TOP系列开关电源制作好东西,楼主给力啊不知道楼主发这个意义何在,能讲讲开关电源制作流程么。好的TOP原理图我还是参考PDF典型的图然后输入滤波电容的选取(老师说经验值可以按每W/3UF)来
- 蓝雨夜 模拟与混合信号
- C2000 Piccolo LaunchPad 资料
- C2000PiccoloLaunchPad资料挺全的顶顶:rose:真的够全了。好资料资料不错。顶一个很全面的资料,感谢啦资料齐全了。不错。顶一个真是学习资料大全啊呵呵太经典了,非常全啊顶上很不错啊dddddddddddddddddddddddd不错啊!!顶起!!回复楼主qinkaiabc的帖子非常的全面好帖子必须顶一个大补大补,谢谢楼主谢谢楼主分享可惜全是英文,有中文就更加好給力好全啊牛逼很
- qinkaiabc 微控制器 MCU
- 一本RF的好书 -------《无线通信射频电路技术与设计》
- 本帖最后由dontium于2015-1-3015:23编辑 刚刚下载的,看了后觉得非常好,可惜是逐页的图片,正在整理。转换为PDF时,不知道这个图片是什么格式,Acrobat不认,所以只有一页一页地将图片编辑---另存为……---选择文件类型……,然后再一页一页地“插入”PDF文件中。等我慢慢整理,献给大家个好的文档,以下回复可见,给大家一个挣工分的机会Timson,如果您要查看本帖隐藏内容请回复Timson,如果您要查看本帖隐藏内容请回复
- dontium RF/无线
设计资源 培训 开发板 精华推荐
- 使用 Epson America, Inc 的 FT232RQ 的参考设计
- VAR-DVK-OM37_CE7,基于安装了 Windows Embedded Compact 7 的 VAR-SOM-OM37 SOM 处理器的开发套件
- 使用 Omron 的 S8VS-09024S 的参考设计
- PEmicro Cyclone FX编程器
- 机顶盒 2.5V DC 至 DC 单路输出电源
- AD5342 并行接口、双电压输出、12 位 DAC 的典型应用
- MC33074ADTBR2G 高顺从电压至灌电流转换器的典型应用
- 适用于STM32L552ZE MCU,SMPS的STM32 Nucleo-144开发板,支持Arduino,ST Zio和morpho连接
- 使用 ON Semiconductor 的 RC1584 的参考设计
- TDA1541 模拟输出-双运放
- 下载有礼喽!2017年泰克亚太专家大讲堂第三期: 超宽带复杂电磁信号产生与实时分析技术
- 如何在FPGA设计环境中加时序约束
- 有奖直播|2021年STM32峰会暨粉丝狂欢节
- 有奖直播【如何在几分钟之内完成高效可靠的USB PD电源设计——PI Expert™分步教程】(9:30开始入场)
- 与英飞凌一起,探索Matter奥义!
- 泰克 4200A-SCS 带您走进半导体材料测试世界 下载赢好礼!
- 有奖问答 | TE 互连解决方案助力智慧城市智能监控
- 找小伙伴们一起去闯 STM32 F7英雄联盟设计大赛
- 如何突破时域和频域测试的壁垒?
- ADI有奖下载活动之19:ADI可编程逻辑控制器(PLC)解决方案(更新版)