推广 热搜: 电机  PLC  变频器  服务机器人  培训  变送器  危化品安全,爆炸  西门子PLC  触摸屏  阀门 

基于S3C44B0X的嵌入式网络通信研究

   日期:2013-03-23     来源:工控之家网    作者:工控之家    浏览:22    评论:0    
摘要:S3C44B0X作为一款以ARM7TDMI为内核的微处理器,得到了广泛的应用。本文采用该处理器,使用到广泛应用的源代码公开的uClinux操作系统,实现CPU处理器与RTL8019AS以太网控制器网络通信。对于网络通信工程在嵌入式设备中的应用有很好的借鉴意义。

关键词:嵌入式系统; S3C44B0X;ARM

1.引言

  ARM7TDMI是一种高性能,低功耗的RISC处理器核。采用该内核的S3C44B0X是一款集成了许多外围设备的芯片,同时其性能价格比也是非常高的,非常适合做嵌入式产品的处理器。在众多的嵌入式操作系统中,uClinux由于代码开放性,适用于多种CPU和多种硬件平台,以及强大的网络功能,在中低端的嵌入式设备中有广泛应用。

  本文采用基于ARM核的S3C44B0X处理器,使用到广泛应用的源代码公开的uClinux操作系统,实现CPU处理器与RTL8019AS以太网控制器网络通信。

2.以太网接口电路的设计思路与实现

  从硬件的角度看,以太网接口电路主要由MAC控制器和物理层接口(Physical Layer, PHY)两大部分构成。

  RTL8019AS是台湾readlted公司生产的以太网控制器,支持IEEE802.3;支持8位或16位数据总线;它内部集成了两块RAM,一块16KB,地址为0x4000~0x7FFF;一块32字节,地址为0x0000~0x001F。16K的RAM用作收发数据的缓冲区,一般将0x4000~0x46FF作为发送缓冲区,0x4700~0x7FFF作为接收缓冲区。全双工模式时,收发同时达到10Mbps;支持10Base5、10Base2、10BaseT,并能自动检测所连接的介质。

  RTL8019AS与主机的接口模式有三种,(1)跳线模式 这种模式与早期的网络控制器兼容。RTL8019AS的端口基地址、中断口等都由开关或跳线器决定。跳线模式简单,但配置资源麻烦。(2)PnP模式 与微软的PnP协议兼容。在这种模式下,RTL8019AS的端口基地址、中断口等都由EEPROM93C46设定,但需要进行PnP芯片的识别,不便与ARM接口。(3)RT模式为了避免PnP模式下的PnP芯片识别和配置过程, readlted公司提供RT模式。在RT模式下,RTL8019AS的端口基地址、中断口等也是由EEPROM93C46决定的。

  S3C4510B内嵌一个以太网控制器,支持MII和BDI接口,可在半双工或全双工模式下提供10M/100Mbps的以太网接入。在半双工模式下,控制器支持CSMA/CD协议,在全双工模式下支持IEEE802.3MAC控制层协议。因此,S3C4510B内部实际上已包含了以太网MAC控制,但并未提供物理层接口,故需外接一片物理层芯片,以提供以太网的接入通道。

  物理层接口(PHY)完成所有输入输出数据的编码解码,10Base-T采用Manchester编码;100Base-X采用4B/5B编码;100Base-T4采用8B/6T编码。在接收数据时,MII接收从前缀到末尾CRC的原始数据包。在发送数据时,MII给数据包加上前缀和末尾的CRC。MAC层同时还产生填充数据并传给PHY。


图1 以太网接口电路

  网络电路如图1所示,S3C44B0X使用nGCS2和数据地址总线访问rtl8019的内部寄存器和缓冲区。TS6121是隔离变压器,RJ45是网络接口。

3. 协议分析

  Linux下的TCP/IP网络协议栈的各层之间是通过一系列互相连接层的软件来实现Internet地址族的。INET socket为基于IP的协议TCP和UDP管理传输端点。UDP(用户数据报协议)是一个无连接协议,而TCP(传输控制协议)是一个可靠的端对端协议。传输UDP包的时候,Linux不知道也不关心它们是否安全到达了目的地。TCP则不同。在TCP连接的两端都需要加上一个编号,以保证传输的数据被正确接收。在IP层,实现了Internet协议代码,这些代码要给传输的数据加上一个IP头,并且知道如何把传入的IP包送给TCP或者UDP协议。在IP层以下,就是网络设备来支持所有的Linux网络工作,结构层次图如图2所示。


图2 结构层次

4 socket编程

  常用的socket类型有两种:流式socket和数据报式socket。两者的区别在于:前者对应于TCP服务,后者对应于UDP服务,主要包括以下函数:

  (1) socket函数

  Int socket( int family, int type, int protocol )

  family指明协议族;type是套接口的类型; protocol通常设置为0;函数成功时返回一个小的非负整数值。

  (2)connect函数

  Int connect( int sockfd, const struct sockaddr* servaddr, socklen_t addrlen )

  Sockfd由socket函数返回数值,servaddr是一个套接口地址结构的指针,addrlen是该结构的大小,该结构必须含有服务器的IP地址和端口号。

  (3)bind函数

  Int bind( int sockfd, const struct sockaddr* myaddr, socklen_t addrlen )

  myaddr指向特定于协议地址结构的指针,addrlen是该地址结构的长度。对于TCP,调用函数bind可以指定一个端口,指定一个IP地址。可以两者都指定,也可以一个也不指定。

  (4)listen函数

  Int listen( int sockfd, int backlog )

  backlog规定了内核为此套接口排队的最大连接个数,函数listen将未连接的套接口转换成被动套接口,指示内核应接受指向此套接口的连接请求。根据TCP状态转换调用函数listen导致套接口从CLOSED状态转换到LISEN状态。

  (5)accept函数

  int accept( int sockfd, struct sockaddr* cliaddr, socklen_t* addrlen )

  cliaddr是返回的客户端的协议地址, addrlen返回套接口地址结构的长度

  accept函数由TCP服务器调用,从已完成连接队列头返回下一个已完成连接。若已完成连接队列为空,则进程睡眠。

  系统流程图如图3所示:


图3 系统流程图

5.结束语

  本文理论联系实际,主要介绍了RTL8019AS与S3C44B0X的网络接口硬件电路的搭建,并实现了嵌入式系统下的软件程序的设计,且通过验证是正确的。对于在嵌入式设备中,特别是Linux的系统中网络通信应用有重要的参考意义。

本文作者创新点:

  1.硬件电路中采用RTL8019作为网络接口,并实现了Linux下的网卡程序设计,且通过验证是正确的

  2.软件系统模块化,有很好的可移植性和扩展性。

参考文献:

  [1] 李崴巍.基于图像的虚拟现实技术在驾驶模拟器中的应用[J]. 微计算机信息.2006,第9-2期. P230-232.

  [2] 姜沫歧,林伟. Protel2004原理图与PCB设计实例[M]. 机械工业出版社,2005.

  [3] 吴明晖.基于ARM的嵌入式系统开发与应用[M].人们邮电出版社,2004.

 
打赏
 
更多>同类环保知识
0相关评论

推荐图文
推荐环保知识
点击排行
网站首页  |  免责声明  |  联系我们  |  关于我们  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅  |  违规举报  |  鲁ICP备12015736号-1
Powered By DESTOON