基于S3C44B0的串口服务器系统的设计

网络协议

14人已加入

描述

为使现有的基于RS232 、RS485 或CAN 总线的串口设备以以太网的方式组网运行,文章介绍了一种基于S3C44B0 的串口服务器系统的设计,详细阐述了系统硬件、软件结构及其工作原理。实际应用表明,该系统实现了以太网与串口的数据交互,使现有的串口设备能快速接入以太网。

  引言

  目前,各自动化监控装置绝大部分仍然采用RS232 、RS485 或CAN 总线组网方式,严重影响了矿井安全监控系统运行的实时性、可靠性、交互性。而工业以太网从10 M、100 M 带宽发展到现在的千兆网,已成为矿井监控系统的主要组网方式。

  因此,如何使现有的基于RS232 、RS485 或CAN 总线的串口设备以以太网的方式组网运行,是目前需要解决的一个问题。本文介绍一种基于S3C44B0的串口服务器系统,该服务器系统可将串口数据转换成TCP/ IP 协议进行数据传输,具有广泛的应用前景。

  1  系统硬件结构

  基于S3C44B0 的串口服务器系统硬件结构如图1 所示。

  

S3C44B0

 

  图1  基于S3C44B0 的串口服务器系统硬件结构图

  该系统主要功能: 从串口设备读取数据,将所得到的数据进行TCP/ IP 协议封装,通过RJ 45 的接口发送到上位机,与上位机的服务器程序进行交互;同时,将上位机发送给串口服务器的数据转发到串口,进而通过网络远程监控现场的串口设备。

  RS232 接口电路如图2 所示。在本系统中,扩展出2 个独立的串行口,该串行口可以三线通信或者与Modem 通信。该接口采用2 片MAX3232C芯片,其中MAX3232C(1) 负责串行口发送接收信号的电平转换,MAX3232C (2) 完成握手信号的电平转换。处理器S3C44B0 的C10~C15 分别作为nRTS1 、nCTS1 、TXD1 、RXD1 、nRTS0 、nCTS0 信号,PE1 和PE2 作为TXD0 和RXD0 信号。

  

S3C44B0

 

  图2  RS232 接口电路图

  以太网控制器采用在嵌入式领域应用广泛且性价比较高的网络控制芯片RTL8019AS ,其接口电路如图3 所示。

  

S3C44B0

 

  图3  以太网控制器接口电路图

  图3 中,RTL8019AS 采用IN T0 中断方式, 连到S3C44B0 的外部中断引脚IN T1 。数据总线宽度为16 位,因此,RTL8019AS 的引脚IOCS16B 上拉。

  RTL8019AS 有3 种工作方式: 跳线方式, 该方式I/ O和中断由跳线决定;即插即用方式( PnP) , 该方式由软件进行自动配置; 免跳线方式,该方式I/ O和中断由外接的EEPROM93C46 中的内容决定。

  使用何种工作方式由RTL8019AS 的引脚J P 决定,图3 中引脚J P 上拉, 即选择跳线方式。

  RTL8019AS 的引脚IOS2 上拉,引脚IOS0 、IOS1 、IOS3 悬空(引脚IOS0~IOS4 在图3 中未画出) ,当引脚IOS0 、IOS1 、IOS3 悬空时,每个引脚里有1 个100 kΩ 的下拉电阻,因此,引脚IOS0 、IOS1 、IOS3为低电平, RTL8019AS 的I/ O 基址为200H。

  RTL8019AS 片选端AEN 接S3C44B0 的nGCS5 也就是Bank6 ,由于数据总线宽度为16 位, S3C44B0的引脚A1 连接RTL8019AS 的引脚SA0 ,因此,对于S3C44B0 来说, RTL8019AS 的I/ O 基址为0X0A000400H。20F001N 为网卡滤波器,其内部包含1 对低通滤波器和1 对隔离变压器,直接与RJ 45相连。

  2  系统软件结构

  系统软件建立在Linux 2. 4 内核的uClinux 操作系统基础上,采用模块化设计,其结构组成模块如图4 所示。系统软件的核心为串口和以太网处理模块,串口服务器通过这2 个模块即可实现串口设备的联网。

  

S3C44B0

 

  图4  系统软件结构组成模块图

  由于uClinux 内核中含有串口、网口的通用驱动程序,因此,不必再写关于串口及网络驱动程序,只需在内核移植时,根据硬件电路对uClinux 进行裁减移植后,便可实现对串口及网络的应用编程功能。

  uClinux 的设备管理和文件系统紧密结合,各种设备都以文件的形式存放在/ dev 目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。所以访问串口,只需要打开相应的设备文件即可。在uClinux 下,串行口COM1 和COM2 对应的设备分别为/ dev/ t tyS0 和dev/ t tyS1 。串口的编程步骤如下:

  (1) 打开串口, 采用open ( ) 函数f d = open(" / dev/ t tyS0" ,O_RDWR| O_NOCTTY) ;(2) 若打开成功, 则对串口进行参数设置:

  tcgetat t r ( f d , &oldtio) ;(3) 清除串口缓冲区,因为串口接收和发送数据是从上一组数据之后的缓冲区开始存放的,为了使先前的数据不会重复出现,故清除缓冲区tcflush( f d , TCIFLUSH) ;(4) 读写串口,读串口采用read ( f d ,sbuf ,B U F_L EN) 函数,写串口采用write ( f d , sbuf , B U F_L EN) ,其中f d 为设备打开返回的值, sbuf 为存放发送或接收数据的数据组, B U F_ L EN 为数据的个数;(5) 读写完成后关闭串口,close ( f d) 。

  网络通信本质就是进程间的通信,网络地址和端口号结合在一起,才可以共同确定整个Internet中的1 个网络进程,网络进程由套接字确定,程序采用Socket 表示。套接字最常用的有2 种:流式套接字( St ream Socket ) 和数据报套接字(DatagramSocket) 。这2 种套接字的区别在于它们使用不同的协议。流式套接字使用TCP 协议,数据报套接字使用UDP 协议。本系统中采用的协议为TCP 协议。具体通信步骤如下:

  (1) 由socket () 函数创建侦听套接字;

  (2) 通过bind ( ) 函数为该套接字分配1 个地址;

  (3) 使用listen () 函数建立和客户机的连接,告诉套接字开始侦听客户机的连接请求;

  (4) 由accept ( ) 函数完成实际的连接,创建连接套接字,原来的侦听套接字将会继续侦听新的连接请求,而新的连接请求可能会通过accept ( ) 函数的再一次调用而获得接受;

  (5) 创建连接套接字成功后,便可完成数据的发送与接收任务,数据接收由recv () 函数完成,发送由send () 函数完成。

  本系统在主程序中创建2 个关键的线程完成数据的传送任务, 分别为Serialt hread 线程和Ethernet t hread 线程。Serialt hread 线程的功能是将串口接收到的数据流通过网口发送出去, 而Ethernet t hread 线程的功能是将网口发送过来的数据流通过串口发送出去。基于S3C44B0 的串口服务器系统主程序流程如图5 所示。

  

S3C44B0

 

  图5  基于S3C44B0 的串口服务器系统主程序流程图

  3  结语

  该系统控制灵活、成本低、具有较大的扩展性,便于实现各种复杂的控制功能。目前该系统已应用到煤矿供电系统馈电开关的以太网监控系统中,大大促进了煤矿的生产和网络化。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
yanqiu3526 2016-04-13
0 回复 举报
翻译的还不错 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分