微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 通用可靠的串口/以太网网关设计

通用可靠的串口/以太网网关设计

时间:07-18 来源:互联网 点击:

相比串口帧格式,少了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。
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设置和硬件流控制的开关等都是可配置的,针埘不同的应用可以非常容易地做出合适的裁剪和设置。

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top