一种UART数据传输方法
技术领域
本发明涉及数据通信技术领域,尤其是涉及一种UART数据传输方法。
背景技术
随着现代科技的快速发展,人们对大数据的重视也越来越重要,人们对数据传输效率及存储更加敏感,要求更快更安全的传输方法,但在实际应用的过程中,往往会出现因软硬件环境及外界环境等不可抗拒的因素出现数据掉包、数据重发等问题,导致平均传输效率比较不理想,对于大数据传输并且数据要求实时性较高的软硬件来说,这不是一件好事。
现有技术中,当UART串口在传输过程中出现数据掉包时,数据接收方需要再通知发送方重发数据,而重发掉包数据以及硬件本身因素导致传输的平均效率不是很高,所以现有的UART数据传输的吞吐量十分有限,导致用户难以获得较好的用户体验。
现有的方案在UART串口传输过程中,主要是通过发送方对数据生成CRC校验码,并添加到数据最后2个字节中,然后通过UART发送给接收方,接收方在接受到数据之后,再根据数据生成CRC校验码,并与传输过来的校验码进行对比,如果校验码一致,则通知发送方发送下一帧数据,如果校验码不一致,则通知发送方重发该数据帧。在传输的过程中表现为数据一问一答的形式,如果出现数据丢包的情况,整个通道需要等待数据重发,所以在数据传输过程中的平均传输效率十分不理想。
发明内容
本发明实施例提供了一种UART数据传输方法,以解决现有的串口大数据传输中数据传输平均效率低下的问题,从而增加串口的数据传输吞吐量,以提高数据传输的平均效率。
为了解决上述技术问题,本发明实施例提供了一种UART数据传输方法,包括:
发送端判断发送通道的传输性能,并根据判断结果将所述发送通道标记为正常发送通道或异常发送通道;
所述正常发送通道按预设的数据获取规则获取发送数据缓冲区的数据,并将获取到的数据写入发送缓冲区,以使所述发送缓冲区将所述数据发送至接收端;其中,所述发送数据缓冲区包括优先缓冲区和正常缓冲区;
所述接收端根据预设的数据校验方式对接收到的数据进行完整性判断,根据判断结果生成反馈信息返回至所述发送端,并对接收到的数据进行处理;
当所述发送端根据所述反馈信息判断数据传输未成功时,判断所述发送缓冲区中的待发送数据是否超出预设的最大重发次数;若是,则将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输;若否,则利用当前的发送通道重发该待发送数据;
当所述发送端根据所述反馈信息判断数据传输成功时,释放所述发送缓冲区的待发送数据,并开始下一帧数据的传输。
进一步地,所述正常发送通道按预设的数据获取规则获取发送数据缓冲区的数据,并将获取到的数据写入发送缓冲区,具体为:
所述正常发送通道判断所述优先缓冲区是否存储有待发送数据;
若是,则获取所述优先缓冲区中的数据,并将获取到的数据写入发送缓冲区;
若否,则获取所述正常缓冲区中的数据,并将获取到的数据写入发送缓冲区。
进一步地,所述发送端判断发送通道的传输性能,并根据判断结果将所述发送通道标记为正常发送通道或异常发送通道,具体为:
所述发送端将自身组织的测试数据通过所述发送通道发送至接收端,并根据所述接收端返回的反馈信息判断所述测试数据是否发送成功;
若是,则将该发送通道标记为正常发送通道;
若否,则将该发送通道标记为异常发送通道,并重新组织测试数据以对所述异常发送通道的发送性能进行测试,直至数据发送成功后将该异常发送通道标记为正常发送通道为止。
进一步地,所述接收端根据预设的数据校验方式对接收到的数据进行完整性判断,根据判断结果生成反馈信息返回至所述发送端,并对接收到的数据进行处理,具体包括:
所述接收端根据预设的数据校验方式对接收到的数据进行完整性判断,并根据判断结果生成反馈信息返回至所述发送端;
判断接收到的数据是否为测试数据;若是,则将该测试数据丢弃;若否,则将接收到的数据写入接收数据缓冲区。
进一步地,所述将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输,具体包括:
将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输,同时,将所述当前的发送通道标记为异常发送通道。
进一步地,所述发送通道的数量为至少3个。
进一步地,所述优先缓冲区的存储空间小于所述正常缓冲区的存储空间。
进一步地,所述接收端为根据CRC校验码对接收到的数据进行完整性判断。
相比于现有技术,本发明具有如下有益效果:
发明实施例采用多路UART串口进行数据传输,当其中一路数据传输出现掉包或者传输速度比较慢的情况下,其他通道自动调度优先发送数据,以提高整个传输过程的平均效率,有效解决了现有的大数据传输中数据传输平均效率低下的问题,从而增加串口的数据传输吞吐量,进而有效提高了数据传输的平均效率。
附图说明
图1是本发明一实施例提供的UART数据传输方法的流程示意图;
图2是本发明一实施例提供的UART数据传输方法的应用示意图;
图3是本发明一实施例提供的发送端的流程示意图;
图4是本发明一实施例提供的接收端的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,本发明实施例提供了一种UART数据传输方法,包括:
步骤S1、发送端判断发送通道的传输性能,并根据判断结果将所述发送通道标记为正常发送通道或异常发送通道;可选地,所述发送通道的数量为多个,更优选地,所述发送通道的数量为至少3个;可以理解的是,在其他实施例中,发送通道的数量也可以是2个、5个或者更多,不影响本发明取得的有益效果。
进一步地,步骤S1具体为:
所述发送端将自身组织的测试数据通过所述发送通道发送至接收端,并根据所述接收端返回的反馈信息判断所述测试数据是否发送成功;
若是,则将该发送通道标记为正常发送通道;
若否,则将该发送通道标记为异常发送通道,并重新组织测试数据以对所述异常发送通道的发送性能进行测试,直至数据发送成功后将该异常发送通道标记为正常发送通道为止。
步骤S2、所述正常发送通道按预设的数据获取规则获取发送数据缓冲区的数据,并将获取到的数据写入发送缓冲区,以使所述发送缓冲区将所述数据发送至接收端;其中,所述发送数据缓冲区包括优先缓冲区和正常缓冲区;进一步地,所述优先缓冲区的存储空间小于所述正常缓冲区的存储空间。
进一步地,所述正常发送通道按预设的数据获取规则获取发送数据缓冲区的数据,并将获取到的数据写入发送缓冲区,具体为:
所述正常发送通道判断所述优先缓冲区是否存储有待发送数据;
若是,则获取所述优先缓冲区中的数据,并将获取到的数据写入发送缓冲区;
若否,则获取所述正常缓冲区中的数据,并将获取到的数据写入发送缓冲区。
步骤S3、所述接收端根据预设的数据校验方式对接收到的数据进行完整性判断,根据判断结果生成反馈信息返回至所述发送端,并对接收到的数据进行处理;
进一步地,步骤S3具体包括:
所述接收端根据预设的数据校验方式对接收到的数据进行完整性判断,并根据判断结果生成反馈信息返回至所述发送端;
判断接收到的数据是否为测试数据;若是,则将该测试数据丢弃;若否,则将接收到的数据写入接收数据缓冲区。
进一步地,所述接收端为根据CRC校验码对接收到的数据进行完整性判断。
步骤S4、当所述发送端根据所述反馈信息判断数据传输未成功时,判断所述发送缓冲区中的待发送数据是否超出预设的最大重发次数;若是,则将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输;若否,则利用当前的发送通道重发该待发送数据;
进一步地,所述将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输,具体包括:
将该待发送数据转存到所述优先缓冲区,并停止当前的发送通道对该待发送数据实施传输,同时,将所述当前的发送通道标记为异常发送通道。
步骤S5、当所述发送端根据所述反馈信息判断数据传输成功时,释放所述发送缓冲区的待发送数据,并开始下一帧数据的传输。
作为举例,本发明通过3路UART串口传输数据,增加数据传输的吞吐量,并提高传输的平均效率,其方案结构图如图2所示。
本方案的基本原理为:采用多路串口并发发送数据,通过自我调节实现每条通道发送压力跟通道的发送能力成正比,如果有一路出现掉包的现象较多,则其他两路会自动分担出现问题的那一路降低数据发送的压力。这样能够最大化使用到串口资源,使能每条通道都能发挥自己的发送能力,并且能够有效的提高发送的平均效率,实现增加UART发送数据的吞吐量。不会出现因数据丢包出现数据区的数据在长时间等待发送的情况,数据区的数据根据当时的UART的发送能力选择发送的通道。实现通道根据发送能力自我调节发送数据量,从而实现发送平均效率的提高。
请参见图3,作为举例,以下为发送端的方案描述:
发送方首先会创建2个缓冲区,一个为较大的缓冲区为正常缓冲区,用来存放需要发送的数据。一个为较小的缓冲区作为优先发送数据的缓冲区,主要是存放通道在发送过程中重发次数超过最大重发次数的数据,需要优先利用其它的通道把优先缓冲区的数据优先发送出去。
每一个发送通道作为一个独立线程来发送数据,首先需要判断这个通道是否能正常发送数据(组织测试数据去测试通道是否能正常发送),如果不能则不能去缓冲区取数据(标记为异常发送通道),需要不断组织测试数据去测试异常发送通道是否能正常发送,直至发送成功;当发送通道能正常发送数据才能去数据缓冲区取数据。取数据的规则要先取优先缓冲区的数据,当优先缓冲区没有数据时才到正常缓冲区取数据,取到数据之后把数据写入发送缓冲区,等待数据发送完成。
数据发送到接收端后,等待接收端反馈是否接收到完整数据,如果是完整的数据则准备发送下一帧数据;如果数据接收不完整,则需要重发数据。需要重发数据时,首先要判断当前的数据是否达到最大的重发次数,如果没有达到最大重发次数,则重发数据并等待接收方反馈;如果已经达到最大重发次数,则需要把当前的数据写入优先缓冲区,不再由当前的通道重发该数据(同时,把当前发送通道标记为异常),而是改由其他通道优先把数据发送过去。然后本通道(已标记为异常的发送通道)组织测试数据包进行数据发送测试,直至发送数据正常,把发送的标志设置为正常,然后再开始到数据缓冲区取数据进行发送。通过这样的自身调度,使得每个通道都能最大的发挥自身的发送能力。
请参见图4,作为举例,以下为接收端的方案描述:
首先接收方创建数据缓冲区并启动接收数据线程,接收到数据之后,根据数据的校验方式(例如采用CRC校验码进行校验)校验数据是否完整。如果数据不完整则反馈给发送端需要重发数据。如果数据完整,则需要判断数据是否为测试数据,如果为测试数据则丢弃数据并反馈数据接收成功,如果不是测试数据则把数据写入接收端数据缓冲区,并反馈给发送方接收数据成功,以使发送端发送下一帧数据。
可以理解的是,通过实施本发明实施例,解决了UART串口在传输过程中传输效率低下的问题,采用多路UART对数据分发传输,相互减压,平均传输数据的压力,从而有效提高了数据传输的平均效率。
需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。