基于ebi总线的串口转udp的装置及方法

文档序号:68086 发布日期:2021-10-01 浏览:59次 >En<

阅读说明:本技术 基于ebi总线的串口转udp的装置及方法 (Serial port converter device and method based on ebi bus ) 是由 郑俊强 胡锦丽 王伟生 陈懋 周素青 王洪 张晓敏 陈岩峰 黄政钦 陈友武 李自 于 2021-07-01 设计创作,主要内容包括:本发明提出一种基于ebi总线的串口转udp的装置及方法,其采用epoll模型,监听所有文件描述符以及socket描述符。Epoll是基于事件驱动的模型,因此在进程中,不需要阻塞进程来接受和发送数据,因此可以同时监听多个udp端口。采用基于ebi的总线来驱动串口数据,从而不需要模拟出ttyUSB端口,当需要对具体的串口进行数据收发时,只需配置寄存器,即可对应适配到具体的串口。采用Ebi总线驱动和串口之间的通信,不使用read和write操作,使用内存映射,当需要发送数据的对应的串口的时,只需通过对映射之后的内存进行赋值即可,当需要从串口读取数据时,也只需要读取映射之后的内存。避免频繁的read/write操作,导致系统性能急剧下降,导致数据丢包。(The invention provides a serial port converter device and a serial port converter method based on ebi bus, which monitor all file descriptors and socket descriptors by adopting an epoll model. Epoll is based on an event-driven model, so in progress, there is no need to block the process to accept and send data, so multiple udp ports can be listened to simultaneously. The bus based on ebi is adopted to drive serial port data, so that a ttyUSB port does not need to be simulated, and when data are required to be transmitted and received to a specific serial port, only a register needs to be configured, and the serial port can be correspondingly adapted to the specific serial port. The method adopts the communication between the Ebi bus driver and the serial port, does not use read and write operations, uses memory mapping, and only needs to assign values to the mapped memory when the corresponding serial port of data needs to be sent, and only needs to read the mapped memory when the data needs to be read from the serial port. Frequent read/write operations are avoided, so that the system performance is sharply reduced, and data packet loss is caused.)

基于ebi总线的串口转udp的装置及方法

技术领域

本发明涉及数据传输和数据转换

技术领域

,尤其涉及一种基于ebi总线的串口转udp的装置及方法。

背景技术

现有技术中的USB转串口方案的硬件设计如说明书附图1所示,其硬件串口使用USB转串口芯片,软件设计如说明书附图2所示,并具有以下特点:

1.每个串口和udp的数据转发需要一个进程;

2.每个串口在设备文件上对应 一个 ttyUSB;

3.每次数据交互需要一次read和write操作。

以上现有技术的缺点包括:

1.每个串口和udp的数据转发需要一个进程:

a.扩展性能不足,当需要20个以上的串口时,系统需要20以上的进程,会使得系统资源紧张

b.每个进程都会使用系统的一系列资源,因此,这种方式极大浪费系统资源

2.每个串口在设备文件上对应 一个 ttyUSB:

ttyUSB口和串口的对应关系无法确定下来,当系统存在多个串口的情况下,ttyUSB会有混乱的情况,因为系统在枚举ttyUSB设备的时候,不能保证按照一定的顺序枚举到ttyUSB设备,因此会导致ttyUSB和串口无法一一对应,数据转发混乱。

3.每次数据交互需要一次read和write操作:

当系统需要读取串口数据时,会进行一次read操作,read操作本身会嵌入到系统内核执行,当系统嵌入到内核执行的时候,会保存堆栈信息,导致时间浪费,性能下降。

发明内容

为了解决现有技术存在的缺陷和不足的问题,本发明提出一种基于ebi总线的串口转udp的装置及方法。针对上述现有技术存在的每个主要问题,本发明分别采用如下的解决方案:

1.每个串口和udp的数据转发需要一个进程:

采用epoll模型,监听所有文件描述符以及socket描述符。Epoll是基于事件驱动的模型,因此在进程中,不需要阻塞进程来接受和发送数据,因此可以同时监听多个udp端口。

2.每个串口在设备文件上对应 一个 ttyUSB:

采用基于ebi的总线来驱动串口数据,从而不需要模拟出ttyUSB端口,当需要对具体的串口进行数据收发时,只需配置寄存器,即可对应适配到具体的串口。

3.每次数据交互需要一次read和write操作:

Ebi总线驱动和串口之间的通信,不使用read和write操作,使用内存映射,当需要发送数据的对应的串口的时,只需通过对映射之后的内存进行赋值即可,当需要从串口读取数据时,也只需要读取映射之后的内存。内存映射技术解决了linux应用层和驱动层数据交互的性能问题,避免频繁的read/write操作,导致系统性能急剧下降,导致数据丢包。

本发明具体包括以下内容:

一种基于ebi总线的串口转udp的装置,其特征在于:采用epoll模型,监听所有文件描述符以及socket描述符;采用基于ebi的总线驱动串口数据;Ebi总线驱动和串口之间的通信使用内存映射。

进一步地,使用3片EBI转RS232,通过芯片的片选信号,选择使用哪个芯片;每个EBI转RS232芯片支持8个通道的串口,数据发送和接收通过寄存器设置和查询。

进一步地,当串口有数据要发送到CPU时,产生一个GPIO中断,CPU接收到中断之后,通过查询寄存器,得知是哪个串口的数据,然后通过内存映射读取数据;每个EBI转串口芯片都会发出所述GPIO中断信息。

以及基于ebi总线的串口转udp的装置的工作方法,其特征在于,其初始化过程包括以下步骤:

步骤S1:创建24个udp服务端socket,使用epoll监听客户端连接信息,当接收到连接请求信息之后,创建第二点的socket;第一点的socket用于监听连接信息,不接受数据;第二点的socket为专门用于接收数据的socket,并且使用epoll模型;

步骤S2:客户端连接成功之后,再次创建一个socket,该socket用于监听数据流;

步骤S3:初始化ebi的驱动,创建ebi内存映射空间;并初始化ebi转RS232芯片,配置串口属性信息,并配置该芯片的fifo,当fifo超过某个字节数的时候,触发GPIO中断,通知cpu取串口的数据。

进一步地,在步骤S2中,可以创建多个这种socket,并且能实现单线程、单进程创建多个socket。

进一步地,在步骤S3中,所述串口属性信息包括:串口的波特率。

进一步地,其接收串口数据的过程为:当fifo满足条件,触发中断之后,cpu通过内存映射控制直接读取某个内存区域的值,直到数据为空;并在接收串口事件时,产生中断通告;

进一步地,其发送数据到串口的过程为:当有数据需要发送到串口时,一次最多发送128个字节,然后等待芯片转发到对应的串口,之后通过中断告知CPU,当ebi转RS232的发送缓冲区为空,则可以继续发送数据,一直循环以上过程,直到数据发送完毕。

相比于现有技术,本发明及其优选方案通过内存映射实现数据的高速转发,提高了系统性能、降低了硬件成本;通过epoll通信,实现单进程、单线程监听所有数据转发端口,实现单进程、单线程监听所有端口,提高了系统的扩展性。

附图说明

下面结合附图和

具体实施方式

对本发明进一步详细的说明:

图1为现有技术中的USB转串口方案的硬件设计示意图;

图2为现有技术中的USB转串口方案的软件设计示例图;

图3为本发明实施例基于ebi总线的串口转udp的装置硬件结构示意图;

图4为本发明实施例基于ebi总线的串口转udp的装置软件流程示例图。

具体实施方式

为让本专利的特征和优点能更明显易懂,下文特举实施例,并配合附图,作详细说明如下:

现有技术中的USB转串口方案的硬件设计如图1所示,其硬件串口使用USB转串口芯片,软件设计如图2所示,并具有以下特点:

1.每个串口和udp的数据转发需要一个进程;

2.每个串口在设备文件上对应 一个 ttyUSB;

3.每次数据交互需要一次read和write操作。

以上现有技术的缺点包括:

1、每个串口和udp的数据转发需要一个进程:

a、扩展性能不足,当需要20个以上的串口时,系统需要20以上的进程,会使得系统资源紧张

b、每个进程都会使用系统的一系列资源,因此,这种方式极大浪费系统资源

2、每个串口在设备文件上对应 一个 ttyUSB:

ttyUSB口和串口的对应关系无法确定下来,当系统存在多个串口的情况下,ttyUSB会有混乱的情况,因为系统在枚举ttyUSB设备的时候,不能保证按照一定的顺序枚举到ttyUSB设备,因此会导致ttyUSB和串口无法一一对应,数据转发混乱。

3、每次数据交互需要一次read和write操作:

当系统需要读取串口数据时,会进行一次read操作,read操作本身会嵌入到系统内核执行,当系统嵌入到内核执行的时候,会保存堆栈信息,导致时间浪费,性能下降。

为了解决以上缺陷和不足的问题,本实施例提出一种基于ebi总线的串口转udp的装置及方法。针对上述现有技术存在的每个主要问题,本实施例分别采用如下的解决方案:

1、每个串口和udp的数据转发需要一个进程:

采用epoll模型,监听所有文件描述符以及socket描述符。Epoll是基于事件驱动的模型,因此在进程中,不需要阻塞进程来接受和发送数据,因此可以同时监听多个udp端口。

2、每个串口在设备文件上对应 一个 ttyUSB:

采用基于ebi的总线来驱动串口数据,从而不需要模拟出ttyUSB端口,当需要对具体的串口进行数据收发时,只需配置寄存器,即可对应适配到具体的串口。

3、每次数据交互需要一次read和write操作:

Ebi总线驱动和串口之间的通信,不使用read和write操作,使用内存映射,当需要发送数据的对应的串口的时,只需通过对映射之后的内存进行赋值即可,当需要从串口读取数据时,也只需要读取映射之后的内存。内存映射技术解决了linux应用层和驱动层数据交互的性能问题,避免频繁的read/write操作,导致系统性能急剧下降,导致数据丢包。

具体地,如图3所示,本实施例硬件设计如下:

1、总共使用3片EBI转RS232,通过芯片的片选信号,选择使用哪个芯片

2、每个EBI转RS232芯片支持8个通道的串口,数据发送和接收通过寄存器设置和查询

3、当串口有数据要发送到CPU时,会有一个GPIO中断,CPU接收到中断之后,通过查询寄存器,得知是哪个串口的数据,然后通过内存映射去读取数据。每个EBI转串口芯片都会发出一个GPIO中断通告。

其软件设计方案为如图4所示的流程框架:

1.创建24个udp服务端socket,使用epoll监听客户端连接信息,当接收到连接请求信息之后,创建第二点的socket。

2.客户端连接成功之后,再次创建一个socket,该socket用来监听数据流,第一点的socket只是用来监听连接信息,并不会接受数据,第二点的socket是专门用来接收数据的socket,并且使用epoll模型,不会导致进程阻塞。可以创建多个这种socket,并且能实现单线程、单进程创建多个socket。

3.初始化ebi的驱动,创建ebi内存映射空间。并初始化ebi转RS232芯片,配置串口的波特率等等串口属性信息,并配置该芯片的fifo,当fifo超过某个字节数的时候,触发GPIO中断,通知cpu去取串口的数据。

4.接收串口数据:当fifo满足条件,触发中断之后,cpu通过内存映射控制直接读取某个内存区域的值,直到数据为空。接收串口为异步事件,因此需要一个中断通告。

5.发送数据到串口:当有数据需要发送到串口时,考虑到ebi总线的速率远远超过串口的波特率,因此一次最多只能发送128个字节,然后等待芯片转发到对应的串口,之后通过中断告知CPU,ebi转RS232的发送缓冲区为空,可以继续发送数据,一直循环这个过程,直到数据发送完毕。

本专利不局限于上述最佳实施方式,任何人在本专利的启示下都可以得出其它各种形式的基于ebi总线的串口转udp的装置及方法,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本专利的涵盖范围。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于SSD的总线多路复用器网格的高级CE编码

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!