当前位置:论文网 > 论文宝库 > 信息科技类 > 网络安全论文 > 正文

基于以太网技术的嵌入式控制平台设计

来源:UC论文网2015-10-30 23:24

摘要:

基于网络化技术的嵌入式控制平台成为了主要的发展方向,并通过中断标志位通知S3C2440A,当DM9000A接收到外部网络送来的

摘要:本文设计并实现了一个基于以太网技术的嵌入式控制平台。在硬件方面采用了三星公司的 S3C2440处理器作为核心控制单元,网络控制采用一款高速以太网接口芯片DM9000,本文重点阐述了系统的网络模块设计和Linux操作系统网络程序设计,实现了数据的嵌入式网络传输。
论文关键词:嵌入式,S3C2440,DM9000,Linux操作系统
  随着信息处理技术的不断发展,基于网络化技术的嵌入式控制平台成为了主要的发展方向,以太网技术以IP地址来识别所有的监控设备,采用先进的网络传输协议来进行模拟量或数字量信号的处理与传输。利用现有的网络资源,轻而易举地实现远程监控。布控区域广阔,系统扩展能力强,只要有网络的地方就可以对工业设备进行监控、参数设定和修改,性能上更稳定,且便于安装、维护,易于实现系统的模块化设计,便于维护和管理。本文针对工业技术应用,设计了基于以太网技术的嵌入式控制平台。
  2硬件系统设计
  为了满足系统实时性以及易于扩展的功能要求,本文以S3C2440作为核心芯片,它具有丰富的接口资源,内部具有A/D 转换器,可以实现数据的实时采样、分析和传输。该芯片是基于ARM920T内核的嵌入式微处理器,由内核、高速缓存和内存管理单元组成,具有性能高、功耗低和体积小等优良特性。其实时性、可扩展性完全可以达到嵌入式控制平台的要求[1]。
  本文在该芯片的基础上进行开发设计,本系统的硬件结构包括12个模块,分别是电源模块、Nand-Flash/Nor-Flash存储模块、SDRAM模块、A/D转换模块、复位模块、通用I/O模块、键盘模块、USB模块、LCD模块、JTAG模块、串行通信模块以及以太网控制器模块。其中网络模块由于RS232、RS485等总线组成的工业网络有效半径小,数据交换速度慢,有关的通信协议少等缺陷,已经越来越不能适应日渐复杂的工业需求,本文采用网络接口芯片DM9000实现现场数据的远程传送,建立工业以太网的通信网络[2] 。
  DM9000是一款高速以太网接口芯片,其基本特征是:集成10/100M物理层接口;内部带有16K字节SRAM用作接收发送的FIFO缓存;支持8/16bit两种主机工作模式;通过HP认证的AUTO-Mdix(支持直接互连自动翻转)功能;支持TCP/IP加速(IPV4 check sum offload)减轻CPU负担,提高整机效能;10ns I/O读写时间。DM9000A以太网控制器遵循IEEE颁布的802.3以太网传输协议。
  当系统上电时,S3C2440A通过总线配置DM9000A内部网络控制寄存器(NCR)、中断寄存器(ISR)等,完成DM9000A的初始化。随后,DM9000A进入数据收发等待状态。当S3C2440A向以太网发送数据时,先将数据打包成UDP或IP数据包,并通过16 bit总线发送到DM9000A的数据发送缓存中,然后将数据长度等信息填充到DM9000A的相应寄存器内,使能发送。当DM9000A接收到外部网络送来的以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在CRC校验错误,则将该帧数据丢弃。否则将数据帧缓存到内部RAM,并通过中断标志位通知S3C2440A,由S3C2440A对DM9000A接收到的数据进行处理。
  DM9000(A)包含一系列可被访问的控制状态寄存器,这些寄存器是字节对齐的,他们在硬件或软件复位时被设置成初始值。访问其寄存器的方法是通过总线驱动的方式,即通过对IOR、IOW、AEN、CMD以及SD0--SD15等相关引脚的操作来实现。其中CMD引脚为高电平时为写寄存器地址,为低电平时为写数据到指定地址的寄存器中。通过对这些寄存器的操作访问,我们便可以实现对DM9000的初始化、数据发送、接收等相关操作。
  3 软件实现
  在嵌入式系统中linux 系统是目前最为流行的一款开放源代码的操作系统,它为用户提供了丰富、强大的网络功能,完善的内置网络是 Linux 的一大特点[3]。同时Linux 还免费提供了大量支持 Internet 的软件,并可以进行文件传输以及远程访问。本文就是通过在装有linux系统的PC机上配置编译内核、制作文件系统和编写编译应用程序,然后通过串口、并口、网口或者USB 下载到目标板上运行调试的。
  3.1 数据网络传输的具体实现
  嵌入式网络系统的优势就在于它利用现有的网络系统进行数据传输,无需重新架设线路,本文将数据利用linux提供的网络编程接口Socket传送到PC机来显示[4]。
  (1)协议选择
  Linux中的网络编程通过套接字Socket实现,网络程序通过Socket和其它几个系统调用返回一个通信的文件描述符,可以将这个文件描述符看成普通的文件描述符来操作,这也正是设备无关性的好处。可以通过读写描述符实现网络之间的数据交流。套接字一共有三种类型:流式套接字,它提供可靠的、面向连接的通讯流,使用TCP协议,保证数据传输的正确性和顺序性;数据报套接字,它定义了一种无连接的网络服务,数据通过相互独立的报文件进行传输,不能保证数据的可靠、无差错,使用的协议是UDP协议;原始套接字,它允许使用IP协议,主要用于新网络协议的测试。由此可见选择什么类型的套接字与实际的控制平台要求有着密切的关系,当对传输数据要求准确性比较强时应该选择TCP协议,当要求数据量比较大或者要求系统实时性比较好时,采用UDP协议。由于UDP将安全和排序等功能移交给上层应用来完成,极大地降低了执行时间,使速度得到了保证,所以UDP具有TCP所望尘莫及的速度优势,本文主要介绍UDP的程序设计过程[5]。
  (2)UDP网络编程
  基于UDP协议的网络编程分为两个方面:服务器程序设计,客户端程序设计。
  1)服务器程序设计
  ① 创建一个Socket套接字。系统调用Socket( )的用法如下:
  #include
  #include
  int socket(int domain, int type, int protocol);
  其中,参数domain设置AF _ INET,以允许远程主机之间通信。参数type是套接口的类型:SOCK_STREAM或SOCK_DGRAM。SOCK_STREAM表明使用的是TCP协议,SOCK_DGRAM表明使用的是UDP协议。参数protocol设置为0。系统调用socket()返回一个套接口描述符来获得文件描述符,如果出错,则返回1。
  ② 绑定一个IP地址。有了一个套接口以后,下一步就是把套接口绑定到本地计算机的某一个端口上。可以使用bind()来实现。系统调用bind()的用法如下:
  int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
  其中,参数sockfd 是由socket()调用返回的套接口文件描述符。参数my_addr是指向数据结构sockaddr的指针。数据结构sockaddr中包括了关于地址、端口和IP地址的信息。参数addrl

核心期刊推荐