原帖转自http://www.chuandong.com/cdbbs/2008-12/31/0812311186B9A07.html
1 引言
随着通信网络技术和集成电路设计的高速发展,以tcp/ip网络传输通信协议为代表,成熟度较高的开放式网络通信技术向各种自动化系统进行渗透,连接并控制所有设备。
而在工业控制和各种通讯设备中,更多的却是符合rs-232标准的串行口设备。要将串行口的数据转发到网络上以实现数据的远程传输,就必须使用网关系统。网关又被称为网间协议变换器,用于连接采用不同通信协议的网络,实现网络之间的数据传输。本文提出了一种基于嵌入式系统来实现串口和以太网口之间的数据传输的设计方案。
本文以32位嵌入式微处理器s3c241o为核心,通过移植嵌入式操作系统linux,并在linux上开发相应的驱动程序和应用程序来构建一个方便、实用的网关。
2 嵌入式网关的结构化设计
本网关主要实现串口和以太网口之间的数据传输。其总体结构可简化为硬件层和软件层两部分。硬件层由高性能的微处理器和多个功能模块组成,软件层由嵌入式操作系统及应用软件构成.其系统结构如图1所示。
图1 系统结构图
2.1 硬件设计
本系统采用结构化设计,由串行口模块,协议转换模块和以太网接口模块等三部分组成。串口的数据以报文的格式发送到以s3c2410为核心的协议转换模块中,协议转换模块完成对该报文的接收和翻译,并通过以太网接口模块转发到internet上,最终实现串口设备到以太网的协议转换。嵌入式网关结构图如图2所示。
图2 嵌入式网关结构图
各模块基本组成描述如下:
(1) 微处理器mcu
基于arm92ot内核的s3c241o微处理器是一个多用途的通用芯片,它内部集成了微处理器和常用外围组件,特别适用于手持设备;
(2) 1o/1oom以太网接口
选用realtek公司生产的rtl82oi芯片作为以太网的物理层接口控制芯片。再通过rj45就可连接到以太网;
(3) flash存储器
采用一片hy29lv16o构建flash存储器系统,其存储容量为2mb;
(4) sdram存储器
选用两片hynix公司的hy57v64162o芯片并联构建sdram存储器系统;
(5) jtag接口
可对芯片内部的所有部件进行访问,通过该接口可对系统进行调试,编程等;
(6) 串行接口
s3c241o自身就带有两个uart控制器,我们将它们与max232相连进行电平转换,就可以得到两个标准rs-232串行接口;
(7) i/o接口
主要包括键盘控制模块和液晶显示模块等。
网关的软件体系结构设计分为3个层次:
(1) linux内核:提供文件系统管理、中断和中断处理、系统初始化、网络协议栈等;
(2) 硬件驱动层:包括驱动串口、以太网等;
(3) 应用程序:如串口通信程序、网络服务程序等。
● 建立linux开发环境。基于linux操作系统的应用开发环境由s3c2410的开发板和宿主pc机所构成。目标板所用到的操作系统的内核编译、应用程序的开发和调试由宿主pc机来完成。双方通过串口和以太网接口建立连接关系。
首先,在宿主机上安装linux操作系统,然后从网上下载工具链如:arm-elf-gcc-2.95.3-2.i386.rpm将它复制到宿主机上的任一目录下,键入安装命令,将交叉编译器安装到宿主机,建立起交叉开发环境.就可以用交叉编译器arm-elf-gcc编译操作系统内核和用户应用程序了。
● 设备驱动程序。设备驱动程序是内核和硬件之间的接口。它是一组数据结构和函数的集合,其中以init_module和cleanup_module这两个函数和file_operations,inode,file这三个数据结构最重要,它们都在linux/fs.h中定义。这些数据结构和函数通过定义的接口控制一个或多个设备。设备驱动程序位于内核的最底层,直接与硬件进行交互。内核提供统一的系统调用,用户程序通过这些标准系统调用来访问硬件设备。
本设计中需要开发的硬件驱动有:以太网卡控制器,串口,lcd,小键盘等驱动程序。为linux内核编写驱动要做的只是为相应的设备编写几个基本函数并vfs注册即可。一般都是在一个现成的驱动程序的基础上针对特殊的硬件设备作相应的改动。驱动编好以后,就为上层的应用程序提供了接口函数,然后开始编写针对该设备的应用程序。最后重新编译内核,把linux的二进制文件烧进flash存储器,就可以使用这些外部设备了。
● 应用程序设计。本网关的主要功能就是实现串口协议和网络协议的转换。由于移植了linux操作系统,我们只需在linux操作系统上编写串口应用程序和网络应用程序就可以实现网关的设计要求。应用程序设计框图如图3所示。主要包括三个应用程序:linux下的串口编程、socket编程以及进程间通信。
图3 应用程序设计框图
2.3 linux下的串口编程
串口是通信应用中最简单也是最常用的接口。在linux下,串口被当作文件对待,每个串口都被赋予了一个文件描述符。在linux中打开和预置一个串行设备的基本步骤:
(1) 打开串口
在 linux 下串口文件是位于/dev下的,串口一为/dev/ttys0,串口二为/dev/ttys1。打开串口是通过使用标准的文件打开函数open操作。
详细内容请点击http://www.chuandong.com/cdbbs/2008-12/31/0812311186B9A07.html