随着因特网和通信产业的迅猛发展, 人们的生活、工作、思维方式都发生了巨大变化。 嵌入式系统给信息社会带来了新的生机, 而嵌入式Internet 技术的出现和发展无疑给这种趋势起到了推波助澜的作用。
目前, 随着互联网技术应用的日益广泛, 网络传输已经成为一种最为经济有效的数据传输方式,越来越多的设备需要配置网络接入功能, 以实现对系统的远程监测和数据集中处理。
本文提出了一种嵌入式Web 系统方案, 利用基于TCP/IP 协议的串口/以太网数据转换技术实现串口设备数据的网络化传输, 监测数据存储在非易失性存储器中, 并及时发布到互联网上更新监测网页。 用户可以通过Internet 访问系统Web 服务器远程获取所需信息, 实现有效的远程监控和信息处理。
1 串口以太网数据的转换
近年来, 互联网以其高速便捷传输数据的特点越来越受到人们的青睐。 而在工控和通信设备中, 更多的却是符合RS-232/485 标准的串行口设备。 与基于RS-232/485 标准的串行通信相比, TCP/IP 网络具有带宽、高速、远距离及通信业务广泛的优点, 而且连网通信距离可以无限延长, 并且相对RS 标准的通信抗干扰能力差, 信息传输容易出错, 网络是基于复杂环境设计的, 具有自动纠错功能, 通信质量稳定不易受外界干扰。 因此, 将串口数据通过网络传输成为串口设备网络化进程的研发热点。
图1 串口以太网转换器
串口以太网转换器(如图1 所示)的出现使得基于TCP/IP 的串口数据流传输成为可能, 它可以连接多个串口设备并将串口数据流进行选择和处理, 把现有的RS 标准接口数据转化成IP 端口数据, 然后IP 化管理, IP 化存取, 这样就能将传统的串行数据送上流行的网络通道, 无需过早淘汰现有串口设备, 提高设备利用率。 各种转换器完成的是一个面向RS 标准的链接和无连接的以太网通信数据存储控制器, 对各种来自串口设备的数据流进行格式转换使之成为可以在以太网中传播的数据帧并对来至以太网的数据帧进行判断转换成串行数据送达相应的串口设备。 这包括三个关键技术:
① TCP / IP 协议的工作模式: 串行转以太网, 不是简单的物理层和数据链路层的转换, 而是串口的数据作为TCP/IP 的应用层数据, 用TCP/IP 封装传输的方式。 如用户通过socket的recv()和send()函数接收和发送的实际是应用层数据。 但是TCP/IP 并不只是recv()和send()这么简单, 根据工作模式的不同, 它关系到连接、监听、关闭等, 这是串口转网口后需要增加处理的部分。 TCP/IP 的工作模式可以分为: TCP 服务端模式(TCP Server)、TCP 客户端模式(TCP Client)、UDP 模式。 UDP 模式: UDP 模式是基于非连接的模式,只要有数据发送即可发送, 不需要事先连接。 TCP 模式: TCP 模式采用数据可靠传输机制, 所以可以保证数据基本不误码、不丢失。
② 串口分帧技术: 串口数据是可以连续不断发送的, 而以太网数据则是以数据包为单位发送的。 这样就关系到将多长的串口数据打包后作为一个以太网数据包发送的问题。 目前主要采用数据包长度或数据包间隔两种方式。
③ 9 位技术: 以太网数据是以字节Byte 计算的每个字节都是8 位, 但是串口数据则有可能出现9 位, 第9 位常常用于区分是地址帧还是数据帧, 1 表示地址帧0 表示数据帧。 那么在当串口转化为以太网之后, 如何将第9 位也传送出去就成了一个关键技术。 在众多的串口转网口方案中都是将第9 位直接舍弃的, 目前据了解上海卓岚信息科技的方案具有快速地适应9 位的功能, 其实现方法中采用了称之为RealCom 的协议。
由于增加了第9 位, 所以串口数据不能够直接透明地转化为TCP/IP 应用层数据, realcom 协议将串口数据打包之后整个作为TCP/IP 的应用数据传输。 这样可以在realcom协议的协议头部加入该数据包的第9 位是1还是0 的信息, 从而实现了9 位传输技术。
2 嵌入式Web系统设计
2.1 系统基本工作原理
要将嵌入式接入以太网达到通过网络进行数据传输的要求, 首先要正确设置RTL8019AS 的工作方式和状态, 通过对相应地址和数据端口的读写操作完成以太网帧的接受和发送。 RTL8019AS 内部具有远程DMA 接口、本地DMA 接口、MAC 逻辑、数据编码解码逻辑和其他端口。 远程DMA 接口是MCU 对网卡内部RAM 进行读写操作的总线, 本地DMA 接口是RTL8019AS 与网线的连接通道, 完成控制器与网线的数据交换。
MAC 主要完成下面两功能: (1)当MCU 向网上发送数据时, 先将一帧通过远程DMA 通道送到网卡的发送缓冲区, 然后发送传送命令, 待网卡发送完上一帧数据后, 在开始发送当前帧。 (2)网卡接收到的数据通过MAC 比较和CRC 校验后, 由FIFO 存到接收缓冲区。 收满一帧后, 以中断方式通知主处理器。 当RTL8019AS 相关参数设置完毕后, 系统进入正常工作状态, 执行与Internet 连接相关功能。
2.2 硬件设计
系统有两部分构成: 嵌入式Web 服务器和串口终端设备, 如图2 所示。
图2 系统结构
嵌入式Web 是系统的核心, 采用B/S 机制。 对外直接连接Internet, 对内连接串口终端, 并提供Web服务和用户交互。 用户可通过网页形式向服务器发送指令。 系统接收到信息后进行协议分析转换, 并向相应的串口终端发送控制命令。 串口终端执行完相关操作后, 将执行结果通过Web 服务器以网页形式反馈给用户。
嵌入式Web 服务器主要构成有: 微控制芯片(S3C44B0X), 以太网控制芯片(RTL8019AS), 多串口协议处理器, 外扩FlashROM芯片等。 外扩ROM用于存放IP 地址, 网卡物理地址和其他相关参数, 同时还可以保存程序和网页数据。
2.2.1微控制器(MCU)
微控制器采用Samsung公司的16/32 位的RISC结构的s3c44b0x 芯片。 该芯片是一款高性能低成本的微处理器, 内部集成了丰富的片内外设, 包括: 8K 的cache, 可选的SRAM 控制器, 带有握手信号的双通道UART 和RTL时钟。 S3C44B0X极低的功耗和简单的全静态设计使其非常适合低成本和对功耗敏感的项目。
2.2.2 网络连接
网络控制器采用Realtek 公司的网络接口芯片RTL8019AS 进行网络连接, 通过RJ45 接入局域网, 在经局域网联入Internet. 44B0X 具有高达66MHZ 的主频处理能力, 利用一个8 位I/O 作为系统数据总线直接连接RTL8019AS, 实现对网络数据的快速封装、编码与发送。 RTL8019AS 通信以单字节方式, 采用8 位数据总线与MCU 进行数据交换。
2.2.3 串口控制模块
44B0X 本身带有2 个UART 串行接口可以模拟多串口之间的通信, 但与传统单级数据采集系统不同,本系统串口模块可接较多串口设备, 实现多种协议串口设备的挂接, 同时要求各设备同时工作, 但移植的uClinux 是一个桌面系统, 其串口I/O 适应能力较弱,多串口I/O 通信会占据系统很大开销, 为使主控制器从繁重的I/O 事务中解脱出来, 同时使串口设备能够灵活的与主控制器进行通信, 引入了嵌入式串口协议处理器的本串口模块, 如图3 所示。 其主要负责多个串口设备的数据采集和控制, 完成对串口数据流的电平转换和数据格式处理, 判断串行数据的起始位及停止位, 完成对数据和校验位的提取, 在电路设计上采用MAX232/485 芯片实现对相应电平的转换。
图3 MCU 与串口模块的连接。
主处理器S3C44B0X 的两路UART 接口, 通过MAX232 扩展为两路串行口, 分别为COMA 和COMB.
图4 多串口扩展硬件结构图
多串口通信电路采用1 片带有收发各64 Byte 的FIFO 的扩展通用异步收发器ST16C654 扩展出4 路RS232 和RS485 通信串口COMC, COMD, COME 和COMF, 其中COMD 和COME 未在图中表示, 其结构与COMC 和COMF 相同。 ST16C654 与S3C44B0X 之间接口如图4 所示, 地址线选择要进行读写的寄存器;数据线进行数据、命令和状态的读写; 中断信号线为4路UART 的中断信号, 直接与MCU 的中断引脚相连,作为接收和发送的中断信号。 扩展的4 路串口通道,每个通道有15 个或16 个内部寄存器, 用来存放收发数据以及配置该串口的工作模式, 需要在初始化时对各寄存器进行配置, 工作模式有中断模式和定时查询模式, 中断模式实时性能好, 适于紧急情况, 定时查询方式具备一般实时性, 数据不丢失。 本文采用中断和并行方式通信, 提高通信速度; 发送、接收和控制信号通过光耦器和5V DC/DC 隔离电源模块完全隔离,防止外部信号对CPU 等核心电路的干扰, 4 路串口分别通过短路块实现RS232 和RS485 通信方式的切换。
2.3 软件设计
2.3.1 系统流程
为了实现用户通过Internet 远程访问Web, 本系统在TCP/IP 协议基础上采用B/S 通信模式进行网络通信编程。整个服务器主程序框图如图5 所示。
图5 Web 服务器的主程序框图。
系统初始化后首先设置MCU 内部定时器工作方式, 轮询查找串口模块是否有数据需要接受, 再设置RTL8019AS 芯片参数连接Internet 网, 初始化成功后系统会获得一个IP 地址, 用户可以通过该地址实现远端控制。 同时为了保证网络正常工作, 系统需要监听网络状态, 对从RTL8019AS 接受的数据帧进行解包分析, 根据分析结果分别进入ARP, ICMP, TCP, UDP 和HTTP 处理子程序, 将串口数据发往以太网, 使采用TCP/IP 协议的以太网内所有计算机都能收到此数据。
2.3.2 uClinux 和boa 服务器的移植
uClinux 是基于linux 内核的一种开源操作系统,不同的是它可以满足没有内存管理单元(MMU)的微处理器的需要, 并且具有良好的可移植性, 由于采用模块化内核设计, 许多功能可以独立加上或卸下, 以达到节省资源实现所需的目的。 对于不同的处理器和开发板, uClinux 的移植[5]可分为3 个层次:
架构级: 目前uClinux 能支持较多的体系结构,但如果要移植的处理器不在uClinux 支持的处理器体系之内, 则需要添加或修改linux/arch 目录下相关处理器架构的文件, 包括中断处理、内存映射的维护、任务上下文切换和初始化过程等。
平台级: 对于uClinux 已支持体系的分支处理器,则需要在相关体系结构目录下建立相应目录并参照同一架构其他系列的处理器编写相应代码。
板级: 对于uClinux 支持的处理器, 只需要板级移植了。 针对不同的开发板硬件资源完成驱动程序编写和环境变量设置等内容。
本文采用的 uClinux2.4.x 版本并不支持S3C44B0X 处理器, 参照其对同一ARM 架构下S3C4510 处理器的支持, 对内核进行改写使其支持S3C44B0X 处理器, 移植过程中通过配置相应模块和修改源代码[6]实现了对串口和网络的支持。 另外, 本文还同时移植了引导加载程序(uboot1.1.4)和uClinux的根文件系统ROMFS.
Boa 是基于GNU/Linux 平台的嵌入式Web 服务器[7], 速度和安全是它的最大特点。 Boa 源码开放、性能优秀、支持CGI, 特别适合应用在嵌入式系统中。
Boa 的移植有两种方式:
① 针对ARM9 平台网上下载BOA 源码, 编译成bin 文件后, 把二进制代码放进根文件系统里, 再配置boa.conf 既可。
② 针对uClinux 在编译内核时, 定制用户程序, 选中BOA, 然后编译内核下到开发板中, ARM7 一般采用此方法。
为了便于Boa 服务器的调试修改二次编译, 本文直接将uClinux 源代码下的boa 文件夹拷贝出来, 采用类似ARM9 的编译方式。 然后通过移植CGI205 库以实现应用程序与Web 服务器的交互, 从而实现客户端对服务器端的操作。 简单来说, CGI 程序的工作过程[8]
包含以下步骤(如图6 所示):
① 客户端通过浏览器把请求发送到web 服务器;② Web 服务器接收请求后, 将请求信息发送给指定的CGI 程序;③ CGI 程序对客户端的请求进行处理, 并把处理结果传送给web 服务器;④ Web 服务器把CGI 程序的处理结果返回给客户端浏览器。
图6 CGI 技术工作流程
2.3.3 串口模块
串口终端的运行需要对44B0X 微处理器编程, 主要完成串口模块的数据交换, 处理系统发来的指令,返回操作结果等功能。
3 结语
当今时代, 在计算机进行网络互连的同时, 各种家电设备, 通信设备以及工业生产中的数据采集控制设备也在逐步网络化。 本文结合当前串口设备网络化的热潮, 提出了一种嵌入式Web 系统方案, 实现了嵌入式系统网络接入、信息处理、web 服务等功能。 系统具有以下特点:
① 运用web 机制, 用户可以通过Internet 浏览访问控制页面, 不在需要专门的软件, 使系统的访问和操作更加便捷。 采用MCU 片内可编程技术, 使系统功能可调, 具有良好的可扩展性, 可应用于不同场合。
② 将串口设备实现网络化的传输, 避免在网络化趋势下串口设备过早被淘汰, 实现了产品升级, 节约成本。
嵌入式Web 系统实现互联网接入, 可以方便的将终端设备所采集的各种数据通过网络快速传递给上位机, 控制终端用户可以随时访问Web 服务器提供的最新网页, 实现快速便捷的信息交互, 以浏览器为载体的Web 技术与嵌入式终端的结合, 必将推动嵌入式终端系统的广泛应用。 本系统的设计可以适用于远程工业监控, 环境温湿度自动监测, 大坝水位的实时观测等, 为远程监控和数据集中处理提供了一种新的选择。