当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]通用可靠的串口/以太网网关设计

摘要:介绍了一种串口以太网嵌入式网关的设计方案,详细讨论了串口可靠通信的实现方法,并在开源操作系统RTThread和微处理器S3C2 440开发板的软硬件平台上实现。网关实际应用于一个无线传感器网络项目,实验表明该网关能实现可靠的数据通信。
关键词:串口/以太网网关;可靠串口通信;RT-Thread;S3C2440

引言
    随着物联网的蓬勃发展,越来越多的传统本地设备或网络有接入计算机网络的需求,而这些传统没备一般都是不具备网络接口的非IP设备。最常用的通信接口是串口,不能直接接入计算机网络,在不改变这些原有设备的基础上,使用串口/以太网网关来接入计算机网络的方式不失为一种比较好的解决方案。


    基于此需求,设计和实现了串口/以太网网关,网络结构如图1所示。实现了非IP设备与IP设备间的数据通信,并特别考虑了串口通信的可靠性,从软件和硬件两方面详细讨论了保证串口通信可靠性的方法。IP端通信的可靠性由TCP/IP协议保证,这样就保证了串口设备与IP设备间通信的可靠性。

1 网关工作原理
1.1 概 述
    网关实现串口设备和以太网之间的协议转换,具体表现为帧格式的转换,可表示为:
    Socket帧←→净荷数据←→串口帧
    其中Socket(套接字)帧和串口帧郜是为实现网关可靠通信而自定义格式的帧,净荷数据为真正需要传送的应用数据。
    网关的数据通信可分为两部分:网络端和串口端,要保证整个网关通信的可靠性,那么就要分别保证网络端和串口端通信的可靠性。
    在网络端,网关使用了流式套接字。流式套接字使用TCP协议,而TCP协议是面向连接的,保证了数据传输的正确性和顺序性。所以,流式的套接字可以提供可靠的、面向连接的通信流。但是,流式数据对应用来说不易使用,所以Socket数据传送都是基于帧格式的。
    在串口端,串口数据传送本质上也是字节流式的,在硬件层次是不可靠的,而且不能保证数据的完整性,需要在软件上有一些其他机制来保证可靠性。所以,网关串口的数据传送同样基于帧格式,并且使用了接收确认、超时重发、差错校验等机制来保证可靠性。


    图2为网关工作时的数据流示意图。图中3个带箭头的椭圆表示3个线程,图中未画出建立Socket连接、串口初始化和线程启动等过程。[!--empirenews.page--]
1.2 串口数据传送
    串口数据传送的帧格式如下:


    其中各个字段的意义如下:
    ◆SFD:帧首定界符;
    ◆EFD:帧尾定界符,SFD和EFD为确定的特定值;
    ◆Seq:帧序号;
    ◆Type:帧类型,其值见表1;
    ◆LEN:Data字段的字节数;
    ◆Data:实际要传送的数据;
    ◆FCS:帧校验,是一个简单校验,为Seq.至Data字段中所有字节按位异或运算的结果。


1.2.1 串口发送
    串口发送队列示意图如图3所示。网关使用FIFO(先入先出)队列缓冲发送帧,包括待发送队列和待确认队列两个队列,每个队列为一个双向循环链表,节点从尾部插入,头部读出。


    当有数据需要从串口发送时,首先将要发送的数据按帧格式加上一些附加的字段组成一个完整的帧,然后插入待发送队列尾。插入待发送队列的帧并不一定会被立即发送,但只要待发送队列中缓冲有需要发送的帧,串口就会从队列头逐个的读取待发送帧以中断的方式发送,直到待发送队列为空。
    每一帧发送完毕后,如果是确认帧,便会被立即从待发送队列中删除并释放掉内存,该帧的发送过程结束;如果是非确认帧,即数据帧或命令帧,那么该帧不会被立即释放,而是从待发送队列删除而插入待确认队列尾,等待串口另一端的设备发送对应的确认帧。
    若在超时时间内收到对应的确认帧,则将该帧从待确认队列删除释放,该帧的发送过程结束;若等待超时,则将该帧从待确认删除并重新插入待发送队列尾,以重发此帧。当然有重发次数限制,若达到了最大重发次数仍然未收到对应的确认帧,则丢弃该帧,该帧的发送过程结束。[!--empirenews.page--]
1.2.2 串口接收
    串口接收使用中断方式,从串口接收到的字节数据并不直接处理,而是先存入一个环形缓冲,环形缓冲示意图如图4所示。从头偏移处写入,从尾偏移处读出,每写入或读出一字节头或尾都将模递增,且头偏移处为空,尾偏移处为满。


    只要串口接收到数据,就将其从头偏移处写入串口的环形缓冲。如果缓冲满了,则用新数据覆盖未处理的旧数据。
    在将一个字节数据写入缓冲的同时,判断其是否等于帧结束定界符EFD,如果等于,则表示缓冲中可能存在一个完整的帧(只是可能,并不能完全确定,因为一个普通的字节数据完全有可能正好等于EFD),此时便可从环形缓冲中按帧格式解析数据。若解析到完整的帧,则做相应的处理:首先,根据帧中FCS字段做差错校验,如果校验正确,则从串口回送一个同序号的确认帧;然后从帧中取出净荷数据从Socket发送。
    从缓冲中解析数据的过程简述如下:从环形缓冲的尾偏移处开始读字节数据,查验是否等于帧开始定界符SFD,若不等于则丢弃并继续读下一字节,若等于则向后偏移读取长度域LEN,根据长度值,便能确定帧结束定界符EFD的位置。查验此位置的字节数据,若不等于EFD,则认为之前等于SFD的字节只是个普通数据,并不是帧开始定界符,将其丢弃并继续读取查验下一字节;若等于EFD,则认为SFD到FFD之间为一个完整的帧。
1.3 Socket数据传送
    Socket数据传送的帧格式如下:


    相比串口帧格式,少了Seq.、Type和FCS字段。这三个字段在串口数据传送中是用来保证可靠性的,而网关使用TCP Socket,下层的TCP协议会保证通信的可靠性,应用层只需要保证数据的完整性,所以不需要这些字段。其他字段相同,意义也分别相同。
1 3.1 Socket发送
    Socket接收过程同串口接收类似,接收的数据并不直接处理,而是先存入环形缓冲。然后,按Socket帧格式,解析环形缓冲中的数据。解析到的数据帧插入串口发送队列,从串口转发。
1.3.2 Socket接收
    Socket发送相比串口发送操作更简单,因为下层的TCP协议会保证通信的可靠性,所以不需要再另外实现确认、重发等机制,发送队列中只需要一个待发送队列即可,不需要待确认队列。而且在具体实现中,并没有真的构造一个Socket发送队列,而是利用了操作系统提供的线程间通信机制中的邮箱通信方式,需要从Socket发送数据时,只需将数据的首地址以邮件的方式发送到Socket发送线程指定的邮箱中。

2 网关实现
2.1 软硬件平台
    网关软硬件平台包括操作系统RT-Thread和ARM9开发板Mini2440。[!--empirenews.page--]
2. 1. 1 RT-Thread实时操作系统
    为实现网关,选用了实时操作系统RT-Thread。RT-Thread是一款国内的开源实时操作系统,并且商业许可证非常宽松,由国内一些专业开发人员开发、维护。RT-Thrcad不仅是一款高效、稳定的实时核心,也是一套面向嵌入式系统的软件平台,覆盖了全抢占的实时操作系统内核小巧的文件系统、轻型的TCP/IP协议栈以及轻型的图形用户界面。


    图5是RT-Thread及外围组件的基本框架图。RT-Thread的使用范围极为灵活,可以从资源极度紧张的小型系统到带内存管理单元、网络功能的基本计算单元。RT-Thread有着高度可配置、易裁减、可扩展性好和可靠性高等特点,适用于嵌入式实时系统。
2. 1.2 Mini2440开发板
    硬件平台使用了Mini2440开发板,Mini2440是一款ARM9开发板,微处理器采用三星公司的S3C2440芯片,具有64 MB SDRAM、128 MB/256 MB/1 GB大小可选的NAND F1ash和2 MB NOR Flash,外设包括1个100M以太网RJ-45口(采用DM9000网卡)和3个串口等。
2.2 网关实现
2. 2.1 软件相关
    如图2所示,系统使用了3个线程:串口接收线程、Socket发送线程和Socket接收线程,下面对这3个线程作具体介绍:
    ①串口接收线程。以阻塞的方式接收“UART_RX_IRQ_EVENT”事件,接收到此事件后,从串口环形接收缓冲中解析串口帧,当有数据帧需要向以太网发送时,便将该数据帧的首地址以邮件的方式给Socket发送线程。而在RT_Thread中,邮件的存储方式本质是双向循环队列。
    ②Socket发送线程。以阻塞的方式接收来自串口接收线程的指针邮件,接收到此类邮件后,Socket发送线程将指针指向的数据封装成Socket帧发送。
    ③Socket接收线程。用于从以太网接收数据,并缓存解析数据帧,调用串口发送接口函数,将收到的数据帧封装成串口帧并插入串口发送队列。
    串口收/发工作于中断方式,可以连续发送串口发送队列中缓存的待发送帧和从串口接收字节数据并写入串口的环形接收缓存。在接收到等于EFD的字节时,向串口接收线程发送一个“UART_RX_IRQ_EVENT”事件,通知串口接收线程环形缓存中可能存在一个完整的帧。
    串口帧发送完毕后等待确认帧的时间计时使用了RT-Thrcad提供的定时器,并且在定时器的超时函数中处理帧重发问题。
    在软件实现过程中遇到了一个问题:在RT-Thread操作系统的中断程序中不能申请和释放动态内存,而串口中断发送程序往发送完一个帧后,如果该帧是确认帧或非确认帧但达到了最大发送次数,那么需要从待发送队列删除该帧并释放对应的动态内存。这就存在矛盾,系统小能提供中断程序释放内存的功能,但实际应用又需要此功能。
    为此,程序中专门设置了一个删除队列,当中断程序需要释放发送帧时,将对应帧插入删除队列,并向串口接收线程发送一个删除事件“UART_TX_DEL_EVENT”,在串口接收线程中接收到此事件后再来释放队列中的帧,这就避免了在串口发送中断程序中直接释放动态内存。
2.2.2 硬件相关
    在硬件方面,为提高串口通信的可靠性,也做了相应处理。
    S3C2440微处理器的串口具有两种工作模式:非FIFO模式和FIFO模式。在FIFO模式中,串口发送和接收分别具有64字节的硬件FIFO缓冲,使用硬件缓冲,能显著地减少串口发送和接收中断产生的次数,进而减小止常程序被中断的频率,提高系统性能。并且使用接收FIFO后,在处理器不能及时跳转到串口接收中断程序的情况下,由于硬件FIFO的存在,使得串口数据丢失的可能性减小。所以,网关中S3C2440微处理器的串口使用了FIFO模式。
    另外,S3C2440微处理器的串口还具有硬件自动流控制功能,当与网关相连的串口设备也具有硬件自动流控制功能时,开启此功能。在开启此功能的情况下,当通信的某一端不能及时读取接收缓冲中的数据时,硬件自动流控制能自动暂停另一端串口的数据发送,以防止数据的丢失。
    在网关的软件实现中,确认机制的开关、确认超时时间、重发次数、队列容量、缓冲的大小、串口的FIFO设置和硬件流控制的开关等都是可配置的,针埘不同的应用可以非常容易地做出合适的裁剪和设置。

结语
    目前该网关被用于一个无线体温监测项目,以连接本地无线传感网络和远程数据库服务器,实现本地设备对远程数据库服务器的访问,通过实际运行实验,网关能很好地实现本文讲述的功能。当然,网关仍然有不尽完善之处,比如对有些公共资源的访问没有提供竞争保护机制,可能会影响网关运行的稳定性和可靠性,有待今后进一步完善。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭