基于ARM9 的嵌入式多串口服务器设计
S3C2440 本身自带三路独立的UART 接口,在设计嵌入式串口服务器系统时,应用了S3C2440 串口模块的两路UART 接口,另外一路UART 接口做开发时的打印控制台用。这两路串行口用三线通信,采用MAX3232 作为电平转换芯片,分别配置处理器的GPH2、CPH3、CPH4 和CPG5,4 个GPIO 口为TXD0、RXD0、TXD1 和RXD1 串口收发信号线。RS-232C 接口电路如图4 所示。

3 系统软件
系统软件的设计目标: 嵌入式串口服务器能够接收来自以太网的数据流,将以太网数据流转换为串行口数据流发送给指定串口; 实现串口数据流到以太网数据流的逆过程。软件平台采用拥有完备TCP /IP 协议栈和丰富源码资源的Linux作为串口服务器的操作系统,在ARM9 上移植并裁剪Linux 系统,同时移植完善根文件系统,为应用层软件开发提供平台。应用程序软件的主要任务如图5 所示,通过Linux 系统调用接口、调用串口函数读取数据,并将数据通过socket 接口发往以太网口; 接收socket 端数据、调用串口设备函数,将数据发往指定串口。

3.1 在Linux 系统中对串口的操作
UART 的操作主要有: 数据发送、数据接收、产生中断、设置波特率、loopback 模式、红外模式和硬/软流控模式7 部分。在Linux 中,所有设备文件一般都位于“/dev”下,其中串口对应的设备为“/dev /ttySx”,在Linux 下对设备的操作方法与对文件的操作方法一样。下面就是设计中串口应用的开发步骤。
串口设置主要设置struct termios 结构体成员,具体的串口操作函数此处略去,串口操作流程如图6 所示。

3.2 Linux 网络套接字编程步骤
在Linux 中的网络编程通过socket 接口进行。socket 是一种特殊的IO 接口,也是一种文件描述符,它是一种常用的进程之间的通信机制,通过它不仅能实现本地机器上进程间的通信,而且通过网络能够在不同机器上的进程间进行通信。
嵌入式串口服务器系统网络套接字编程步骤如图7 所示。

系统上电后,嵌入式服务器进入Linux 系统并自动运行装载在其内的server 程序。作为服务器, server 程序在开始运行时就为每一个打开的串口创建recvpcwritearm 和readarmsendpc 线程,并在网络连接正常以及客户端没有执行关闭串口的操作时,每一个已打开串口对应的两个线程将不会结束,这样在系统满负荷运行时,系统将同时开启4 个线程。嵌入式串口服务器主程序流程如图8 所示,主函数实现套接字的初始化工作,建立两路监听套接字,分别初始化线程recvpcwritearmsocket[3000 + com]套接字和readarmsendpc socket[4000 + com]套接字com 为串行端口号。一旦接收到客户端的连接请求,判断客户端请求的方式后,启用相应的进程函数进行数据处理。

4 试验
4.1 数据上行测试
数据上行测试指串口设备发送信息到嵌入式串口服务器,通过嵌入式串口服务器将数据从以太网口传输出去。考虑实际使用过程中上行数据量较大,为了模拟工业现场接收大量的数据,以“1234567890abcdefghijklmnopqrstuvwsyz”构成的数据包进行模拟。
测试方法为每秒钟连续不断地发送“1234567890abcdefghijklmnopqrstuvwsyz”,使之构成100KByte 的数据包,观察客户端程序能否正常收到这个数据包。试验测试结果如图9 所示,当从“终端串口设备”向上位机发送100KByte 数据时,在客户端一侧正常收到了这些数据,并且没有丢失现象。

4.2 数据下行测试
数据下行测试指通过工控机上的以太网口发送数据给串口服务器,串口服务器接收以太网数据帧并进行格式转换,同时判断发往指定的串口设备。在实际使用过程中,上位机发送到串行终端设备的数据量较小,这些数据一般都是由操作人员输入的数据,因此可以用单个数据流“1234567890abcDefghijklmnopqrstuvwxyz”进行测试。
测试方法是利用运行在PC 机上的客户端程序每秒钟发送连续数据流,观察另一台PC 机上串口调试助手是否正常接收到数据。试验测试结果如图10 所示,当客户端程序发送数据时,在终端串口设备上得到同样的数据流。

5 结束语
笔者利用完全开源的Linux 操作系统,将其移植、裁剪后设计嵌入式串口服务器系统,选用非常适用于通信产品中的ARM9 内核的S3C2440A 微处理器和DM9000AEP 芯片扩展了100MByte 自适应以太网口,完成了硬件平台设计; 然后用多线程网络套接字编写串口服务器程序,完成多串口服务器的软件设计。最后用试验证实了多串口服务器能够很好地完成串口数据与以太网口数据的双向传输,成功地将现有的串行通信设备接入以太网,利用网络实现数据
- linux客户端访问samba服务器的指令(03-25)
- Linux操作系统下中文字体的安装(04-10)
- 如何优化Linux服务器硬盘性能实用技巧(07-10)
- 基于开源软件的嵌入式网络打印服务器(11-05)
- 大型商用服务器的三大系统架构(03-02)
- 嵌入式Web服务器移植与测试(03-03)
