历史上的今天
返回首页

历史上的今天

今天是:2026年01月30日(星期五)

正在发生

2023年01月30日 | 基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

2023-01-30 来源:elecfans

以ARM920T为内核的S3C2440A作为主控制器和以太网控制芯片DM9000AEP设计硬件平台; 构建并移植适合嵌入式串口服务器系统的嵌入式Linux 操作系统,利用Linux完善的TCP/IP协议设计ARM端的多线程网络服务器程序。设计实现RS-232C串口与以太网口数据的双向传输,使现有的智能仪器设备成功接入以太网。


随着计算机网络的发展和物联网的兴起,将智能仪器接入网络已成为一种趋势,以实现数据的共享与远程管理。但是目前大多智能仪器使用的是异步串行通信接口RS-232C /485 /422,因此迫切需要一种能将异步串行通信协议转换为以太网TCP /IP协议的协议转换器,使现有的串行通信设备方便地接入以太网,而不需要改变原有仪器设备的硬件。为此,笔者研究设计了基于ARM9微处理器和Linux 操作系统的嵌入式多串口服务器。


1 系统总体思路

采用以ARM920T为内核的S3C2440A微处理器运行Linux操作系统,使用100MBase-T网络在串行设备与远端主机之间有效地进行传输数据,这样通过串口服务器使串行设备快速接入以太网,利用以太网的TCP /IP 协议进行串口数据包的传输。嵌入式串口服务器作为以太网数据与串口数据之间交互的中间桥梁,负责数据的双向透明传送。服务器端的主要任务是在ARM 处理器中实现RS-232C /485 /422 转TCP /IP 协议网关,完成对各端口的监听和数据的双向传输,当端口有数据产生或客户端有数据请求时启动独立线程,保证实时而又不丢失地进行数据传输。基于上述要求系统必须具备: 一套对网络支持良好的嵌入式操作系统,并且可根据专用的硬件平台进行裁剪; 微处理器的运行速度与处理数据的能力优秀,外围芯片接口友好。


笔者选用Linux作为实时操作系统,并进行移植与配置使其可以运行在以ARM9为核心的硬件平台上。S3C2440A自带三路串行通信口,完全能够满足多串口服务器的设计要求,但考虑到网络数据传输与串口数据传输速率不匹配,需要在硬件板卡上扩展SDRAM 和NORFLASH,另外系统还需扩展以太网控制器芯片。系统的总体设计框架如图1 所示。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

2 硬件电路

系统可同时独立地与两路串行端口通信,当数据由以太网传送给串口服务器时完成数据的存储与数据格式的转换与处理,为数据传向指定的串行口做准备。当系统解包处理完成后,根据TCP /IP 协议的数据帧的帧头信息就能获得该数据包的发送目标串口,这样就完成了从以太网到串行口数据的传输; 当数据由串口设备传送到串口服务器时完成数据的分析、处理与格式转换,为数据传向以太网口做准备,当数据打包结束后将其从以太网口发送出去,这样就完成了串行口到以太网数据的传输。


2.1 S3C2440A 扩展以太网模块电路

DM9000AEP 是一款高集成度且成本较低的单片快速以太网媒体介质访问层MAC 控制器,上有通用处理器接口,10M/100M 物理层和16KbyteSRAM,低功耗、高性能IO 管脚兼容3. 3 /5. 0V 电压。DM9000AEP 合成了以太网MAC、物理层PHY 和MMU,内置AUTOMDI2X 功能10 /100MPHY,芯片可以根据处理器提供8 /16 /32bit 3 种连接方式实现以太网MAC 层和PHY 层) 的功能。


在如图2 所示的电路中, IOR#管脚接处理器的LnOE 读信号端, IOW#接处理器的LnWE 写信号端,CS#片选信号端接处理器的nGCS4 片选信号,SD0 ~ SD15 分别接处理器的数据总线,中断信号INT 接处理器的EINT18 管脚,RX +、RX -、TX + 和TX – 分别是两对差分收发信号线接带有隔离变压器的HR911105A 的RJ45 座连接,如图3 所示。访问网卡以总线形式实现,网卡的IO 基址为300H,片选信号接在了NGCS4 上,所以网卡IO 的基址为0x20000300H.由“DM9000 地址端口= 高位片选地址+ 300H + 0; DM9000 数据端口= 高位片选地址+ 300H + 4”可知,DM9000 端口的端口地址为0×20000300,DM9000 数据的端口地址为0×20000304.S3C2440 通过数据端口与地址端口并结合读/写信号线就可以对DM9000 进行读、写操作了。图2 中只用了一根地址线LADDR2,这是由DM9000AEP 的特性决定的,DM9000AEP 的地址信号和数据信号复用,使用CMD 引脚来区分它们( CMD 为低时数据总线上传输的是地址信号,CMD 为高电平时传输的是数据信号) .访问DM9000AEP 内部寄存器时,需要将CMD 置为低电平,发出地址信号; 然后将CMD置为高电平,读/写数据。另外,总数位宽16 位,两对差分接收与发送信号线,特别要注意的是:

在PCB 布线时这两对线必须走差分线,否则接收和发送数据将不稳定,模拟地与数字地也要处理好。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

图2 网卡接口电路

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

2.2 S3C2440 串口模块电路

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

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

3 系统软件

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

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

3.1 在Linux 系统中对串口的操作

UART 的操作主要有: 数据发送、数据接收、产生中断、设置波特率、loopback 模式、红外模式和硬/软流控模式7 部分。在Linux 中,所有设备文件一般都位于“/dev”下,其中串口对应的设备为“/dev /ttySx”,在Linux 下对设备的操作方法与对文件的操作方法一样。下面就是设计中串口应用的开发步骤。


串口设置主要设置struct termios 结构体成员,具体的串口操作函数此处略去,串口操作流程如图6 所示。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

3.2 Linux 网络套接字编程步骤

在Linux 中的网络编程通过socket 接口进行。socket 是一种特殊的IO 接口,也是一种文件描述符,它是一种常用的进程之间的通信机制,通过它不仅能实现本地机器上进程间的通信,而且通过网络能够在不同机器上的进程间进行通信。

嵌入式串口服务器系统网络套接字编程步骤如图7 所示。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

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

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

4 试验

4.1 数据上行测试

数据上行测试指串口设备发送信息到嵌入式串口服务器,通过嵌入式串口服务器将数据从以太网口传输出去。考虑实际使用过程中上行数据量较大,为了模拟工业现场接收大量的数据,以“1234567890abcdefghijklmnopqrstuvwsyz”构成的数据包进行模拟。


测试方法为每秒钟连续不断地发送“1234567890abcdefghijklmnopqrstuvwsyz”,使之构成100KByte 的数据包,观察客户端程序能否正常收到这个数据包。试验测试结果如图9 所示,当从“终端串口设备”向上位机发送100KByte 数据时,在客户端一侧正常收到了这些数据,并且没有丢失现象。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

4.2 数据下行测试

数据下行测试指通过工控机上的以太网口发送数据给串口服务器,串口服务器接收以太网数据帧并进行格式转换,同时判断发往指定的串口设备。在实际使用过程中,上位机发送到串行终端设备的数据量较小,这些数据一般都是由操作人员输入的数据,因此可以用单个数据流“1234567890abcDefghijklmnopqrstuvwxyz”进行测试。


测试方法是利用运行在PC 机上的客户端程序每秒钟发送连续数据流,观察另一台PC 机上串口调试助手是否正常接收到数据。试验测试结果如图10 所示,当客户端程序发送数据时,在终端串口设备上得到同样的数据流。

基于ARM920T处理器实现RS-232C串口与以太网口数据双向传输的设计

5 结束语

笔者利用完全开源的Linux 操作系统,将其移植、裁剪后设计嵌入式串口服务器系统,选用非常适用于通信产品中的ARM9 内核的S3C2440A 微处理器和DM9000AEP 芯片扩展了100MByte 自适应以太网口,完成了硬件平台设计; 然后用多线程网络套接字编写串口服务器程序,完成多串口服务器的软件设计。最后用试验证实了多串口服务器能够很好地完成串口数据与以太网口数据的双向传输,成功地将现有的串行通信设备接入以太网,利用网络实现数据的远程传输与远程监控功能,实时监控设备的运行状态。降低了设备的维修费用,缩短了开发周期。该产品基于开放标准设计,易于升级与维护,具有广阔的应用前景。

推荐阅读

史海拾趣

Cables To Go公司的发展小趣事

在电子行业的激烈竞争中,Cables To Go公司以其卓越的产品品质和创新精神脱颖而出。公司从成立之初就注重产品研发,不断推出符合市场需求的高品质线缆产品。通过严格把控原材料采购和制造工艺,Cables To Go确保了每一根线缆都具备出色的性能和稳定性。同时,公司还积极投入研发,推出了一系列具有创新性的线缆解决方案,满足了客户多样化的需求。

Hama公司的发展小趣事

H&D Wireless公司成立于2009年,总部位于瑞典斯德哥尔摩。成立初期,公司专注于物联网技术的研发,致力于提供智能家居Wi-Fi组件和无线多媒体解决方案。2016年,H&D Wireless宣布获得了一笔300万美元的风险投资,投资方包括Blasieholmen Investment Group及旗下网络内的40名瑞典和欧洲企业家与私人投资家。这笔资金为公司后续的全球业务扩张和物联网云服务平台的发布奠定了坚实基础。

Delus Corp公司的发展小趣事

Delus Corp公司深知持续创新对于公司发展的重要性。因此,公司投入大量资源进行研发,并不断探索新技术和新材料。同时,公司也高度重视产品质量,建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些努力使得公司的产品线不断丰富,产品质量得到了广大客户的认可。

DIALIGHT公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

EMS GmbH公司的发展小趣事

作为欧洲最领先的生产商之一,EMS GmbH公司与各大国际整车厂建立了长期稳定的合作关系。这些合作不仅为公司带来了稳定的订单和收入来源,还使EMS GmbH能够深入了解市场需求和技术趋势,从而不断优化产品和服务。通过与国际整车厂的紧密合作,EMS GmbH公司在汽车转换器注塑件领域赢得了良好的口碑和声誉。

聚辰(Giantec)公司的发展小趣事

港源公司在国内外市场的拓展上取得了显著成就。公司在全国设有多个销售公司和分支机构,并在国外如日本、韩国、马来西亚、巴西等地设立了分公司和销售总代理,形成了完善的销售网络。这种全球化布局不仅使港源公司能够更好地服务全球客户,还为公司带来了更多的国际合作机会和市场资源。通过参加国际展览会等方式,港源公司全方位地展示了自身的研发、制造、销售和服务实力,进一步提升了品牌知名度和市场影响力。

问答坊 | AI 解惑

IIC絮语:简单实用是永远的主题

在今年的iic北京站,给我留下最深刻影响的当属以“USB-made-easy”为口号的飞特帝亚(FTDI)。据家号称自己是全球USB桥接器芯片领导厂商的英商介绍采用自己的芯片让你不懂USB,也能在嵌入式设计中轻松导入USB功能。 说起USB,这种数据传输接口在 ...…

查看全部问答>

刚浏览新闻看到一个信息,给大家看看——Windows 7电源管理方面9个重要的改进

微软近期对外公布了Windows 7的电源管理技术是如何降低电能消耗。如果你想了解Windows 7究竟是如何省电的,以下内容会告诉你Windows 7节能的主要途径。   1.Windows7典型应用的优化方案   除了上述列出的改进外,微软还把目光转向一些特定的 ...…

查看全部问答>

我的eboot没有成功引导系统,卡在Kernelfindmemory()函数里,如何解决

   如题,使用PXA270+WCE5.0平台,系统刚进入NK不久就卡住了,停在kernelfindmemory()函数里了,如法继续添加打印语句进行跟踪,如何是好,Private目录可以编译码?有谁知道是怎么回事吗?…

查看全部问答>

开启MMU后程序就跑飞???

如题,我用MMU把地址都是一一对应的映射了 但一开启MMU之后,程序就跑飞 调了好久,还是不得要领,我在MMU不开的情况下运行都很正常。 这MMU真是调的我心里窝火啊,文档也都看了很多,有很多例子都是把地址映射的比较复杂可能会出一些问题, 但 ...…

查看全部问答>

linux内核 设置ip问题

我得linux内核下载到开发板2410中 ifconfig出来得ip是192。168。10。220 我想让它改成0。220 可我该完了每次重启它又回复以前得设置,请问在那里才能彻底改掉啊!!!…

查看全部问答>

急!GR64可以作为服务器吗?点对点通信的。

如果能的话,怎么设。 还有,我几个GR64把数据发给网络上的一个IP地址,然后我再用一个模块去那个IP上取数。这个方法可以实现吗? 还有哪位老大有GR64的资料可以发给我。邮箱是cuilg_0519@163.com。谢谢!!! …

查看全部问答>

推荐:ARM/Linux/WinCE讲座(上海)

7月21日,在上海城市管理学院1号楼6楼多功能会议厅(进门直走50米即到)举办。 三个专题:         最新ARM技术和嵌入式技术发展动态(ARM中国技术营销经理费浙平主讲)        &nbs ...…

查看全部问答>

应用程序随系统自启动后键盘不能使用问题

程序需要使用到键盘。 应用程序随系统自启动前,是通过USB放在系统里,此时板子上的键盘正常。 重新编译内核,将程序集成到内核,以随系统自启动。这样程序启动后,键盘却不能正常使用了。键盘是由六个按键组成。 请教,这是什么原因造成的? p ...…

查看全部问答>

用什么代码可以设置wince的系统时间?

用vs2005来开发wince程序,如何设置wince的系统时间?…

查看全部问答>

版主---STM32的中断嵌套问题

版主,咨询个问题。STM32如何关闭中断嵌套,操作哪一寄存器,谢谢! 因为目前TIM中使用PWM捕获的时候,很有可能受外界干扰,导致当进入捕获中断的时候,还未完成所有寄存器的读,未出中断时,来了一个干扰脉冲,让TIM再次进入中断。…

查看全部问答>