一种基于UART的主从多机通讯系统及方法与流程

文档序号:12278739阅读:1674来源:国知局
一种基于UART的主从多机通讯系统及方法与流程

本发明属于通讯领域,尤其涉及一种基于UART的主从多机通讯系统及方法。



背景技术:

在物联网的潮流下,设备与设备之间的信息交互必不可少。设备间数据的实时交互能提高用户的体验感,更有利于产品的安全可靠性。目前行业内短距离点对点通信普遍使用UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器),主流的MCU((Microcontroller Unit,微控制单元)一般自带一个UART口,可与RS232线连接。标准UART采用简单的一对一通讯方式,无法满足目前家电控制行业、自动化设备控制领域一对多的通讯需求。其他的通信方式,如RS485、CAN总线虽然可以实现一对多的通讯方式,但是主流的MCU甚少自带RS485或CAN通信功能,用户需要外接相应的通信IC或通信转换IC,成本相对较高。此外,RS485或CAN都是三线以上通信,接口多、连线复杂。



技术实现要素:

本发明提供一种基于UART的主从多机通讯系统及方法,旨在解决现有技术中标准UART通讯不能支持主从多机通讯,而采用其他通信方式实现主从多机通讯存在成本高、连线复杂、信号容易相互干扰的问题。

本发明实施例是这样实现的,一种基于UART的主从多级通讯系统,包括:一主机、n个从机和一通信总线,n为大于等于1的正整数,所述主机的TX口、RX口和一IO口分别通过电路连接到所述通信总线上,各从机的TX口、RX口和一IO口也分别通过电路连接到所述通信总线上

本发明实施例还提供一种基于UART的主从多级通讯方法,主机的TX口、RX口和一IO口分别通过电路连接到一通信总线,各从机的TX口、RX口和一IO口也分别通过电路连接到所述通信总线,方法包括:

从机连接到通信总线后,通过自身的TX口发送握手信号到通信总线,所述握手信号包括所述从机的设备ID;

主机的RX口通过通信总线接收到所述握手信号后,对所述握手信号进行解析,并通过自身的TX口发送握手成功信号到通信总线,所述握手成功信号包括解析出的从机设备ID;

所述从机的RX口通过通信总线接收到所述握手成功信号后,对所述握手成功信号进行解析,若解析出的从机设备ID与自身设备ID相同,则等待主机发送命令数据;

主机通过自身的TX口发送命令数据到通信总线,所述命令数据中包括主机欲呼叫的从机设备ID;

所述从机的RX口通过通信总线接收到所述命令数据后,对所述命令数据进行解析,若解析出的从机设备ID与自身设备ID相同,则根据解析出的命令数据进行处理,并通过自身的TX口发送回码到通信总线,所述回码包括所述从机的设备ID。

本发明的有益效果是:通过将主机的RX口、TX口和从机的RX口、TX口连接到同一通信总线,减少了设备与设备之间的连线以及信号的相互干扰。为了保证不会出现两个设备同时发送数据的情况,每个设备增设一个IO口对通信总线进行检测,只有当通信总线空闲时才能发送数据。此外,本发明不需要增加额外的器件,成本低廉,设计周期短,可以广泛应用于短距离多个设备之间的通信。

附图说明

图1是本发明实施例一提供的一种基于UART主从多机的通讯系统的原理框图;

图2是本发明实施例二提供的一种基于UART主从多机的通讯系统的电路示意图;

图3是本发明实施例三提供的一种基于UART主从多机的通讯方法的流程图;

图4是本发明实施例提供一种通信帧格式示意图;

图5是本发明实施例四提供的一种基于UART主从多机通讯的时序图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例一

UART通信正常为三根线,分别为RX、TX、GND,属于全双工的通信,所以收发数据是分开的。为了使设备间的连线减少,同时不影响相互之间的通信,本发明将RX和TX通过电路合并连接到一根通信总线上。如图1所示为本发明实施例一提供的一种基于UART主从多机的通讯系统的原理框图。该基于UART主从多机的通讯系统包括一主机、n个从机和一通信总线,n为大于等于1的正整数。其中,主机和从机通过该条通信总线相互连通,具体的,主机的TX口、RX口和一IO口分别通过电路连接到该通信总线上,各从机的TX口、RX口和一IO口也分别通过电路连接到该通信总线上。

本发明实施例通过将主机的RX口、TX口和从机的RX口、TX口连接到同一通信总线,减少了设备与设备之间的连线以及信号的相互干扰。此外,本发明不需要增加额外的器件,成本低廉,设计周期短,可以广泛应用于短距离多个设备之间的通信。

实施例二

如图2是本发明实施例二提供的一种基于UART主从多机的通讯系统的电路示意图。该通信系统包括主机U1、从机U2、从机U3……从机Un,主机U1主机的TX口(8号脚)外接第一电阻R1连接到通信总线上,主机U1的RX口(7号脚)外接第二电阻R2连接到通信总线上,主机的IO口(9号脚)外接第三电阻R3连接到通信总线上。从机U2主机的TX口(8号脚)外接第四电阻R4连接到通信总线上,从机U1的RX口(7号脚)外接第五电阻R5连接到通信总线上,从机的IO口(9号脚)外接第六电阻R6连接到通信总线上。此外,为了让通信总线在没有通信数据时一直处于高电平,一电源通过串联第七电阻R7连接到通信总线,给通信总线一个上拉。

需要说明的是,本发明中电阻是用来隔离电信号和分压,可以根据实际需要进行设置,并非必要设置项。MCU的TX口、RX口通过外接一个电阻然后连接到通信总线上,实现单总线收发功能。为了保证不会出现两个设备同时发送数据的情况,每个设备增设一个IO口对通信总线进行检测,只有当通信总线空闲时才能发送数据。本发明实施例中采用9号IO口来检测通信总线,实际应用中,也可以采用其他IO口对通信总线进行检测。本发明实施例中各MCU的6号脚用来接地,实际应用中,可以根据MCU的对接地引脚的设置来接地。

本发明实施例通过将主机的RX口、TX口和从机的RX口、TX口连接到同一通信总线,减少了设备与设备之间的连线以及信号的相互干扰。此外,本发明不需要增加额外的器件,成本低廉,设计周期短,可以广泛应用于短距离多个设备之间的通信。

实施例三

如图3所示为本发明实施例三提供的一种基于UART主从多机的通讯方法的流程图,包括如下步骤:

S301,从机连接到通信总线后,通过自身的TX口发送握手信号到通信总线,所述握手信号包括该从机的设备ID。

当一台从机挂接到通信总线上后,需要与主机进行握手后方可正常使用。由于设备的TX口、RX口合并连接到同一通信总线上,为了保证不会出现两个设备同时发送数据的情况,每个设备增设一个IO口对通信总线进行检测,只有当通信总线空闲时才能发送数据。因此,从机在发送握手信号之前,需要通过自身的IO口检测通信总线是否空闲,如果空闲,则发送握手信号至主机。具体的,当IO口检测到持续高电平时,表示通信总线为空闲,检测到电平变化时,表示通信总线为非空闲。

进一步地,在从机连接到通信总线后,通过自身的TX口发送握手信号到通信总线后还包括:启动一定时器,若在预设的时间内未接收到主机返回的握手成功信号,则从机将再次发送握手信号至主机。

S302,主机的RX口通过通信总线接收到握手信号后,对握手信号进行解析,并通过自身的TX口发送握手成功信号到通信总线,握手成功信号包括解析出的从机设备ID。

由于所有从机和主机都挂接在一条通信总线上,则当其中一台设备发送数据到通信总线时,挂接在通信总线上的其他所有设备都能接收到该数据。对于从机来说,接收到数据后,对数据进行解析,如果解析出的设备ID不是自身的设备ID,则丢弃。

此步骤中,主机接收到握手信号之后,对握手信号进行解析,可以获知是哪个从机设备挂接到通信总线上了,从而使得主机可以发送相应的握手成功信号到该从机。

S303,从机的RX口通过通信总线接收到握手成功信号后,对握手成功信号进行解析,若解析出的从机设备ID与自身设备ID相同,则等待主机发送命令数据。

挂接在该通信总线上的所有从机都能接收到主机发送的握手成功信号,经过解析,发现解析出从机设备ID与自身设备ID不同,则认为此帧数据不是发给自己的,就丢弃;若相同,则人为此帧数据是发给自己的,表示握手成功,等待主机发送命令数据即可。

S304,主机通过自身的TX口发送命令数据到通信总线,命令数据中包括待接收命令的从机设备ID。

进一步地,主机发送完命令数据后,启动一定时器,若在预设的时间内未收到该从机的回码,则会重新发送,发送三次或预设次数仍未收到回码,则认为该从机设备离线或异常,进行报错处理。

S305,从机的RX口通过通信总线接收到命令数据后,对命令数据进行解析,若解析出的从机设备ID与自身设备ID相同,则根据解析出的命令数据进行处理,并通过自身的TX口发送回码到通信总线,所述回码包括该从机的设备ID。

主机接收到该从机的回码后,根据回码发送下一帧数据。

为了保障数据的正确传输,本发明实施例还定义了一个专门的通信数据格式,如图4所示。通信帧格式包括头命令、从机设备ID、帧长度、数据、校验码和结束码,其中,通信帧格式至少包括从机设备ID、数据和校验码。通信帧中的头命令用来识别通信总线上的数据是主机发出还是从机发出,可以仅设置1个byte,如,主机发出设置为A0,从机发出设置为A1。这样,对于某一从机发出的数据,其他从机仅需解析头命令即可分辨,而不需要进行设备ID的比对,简化了程序,提高了效率。

各设备的TX口、RX口合并连接到同一通信总线后,基于UART的通信就由原来的双工通信变为半双工通信了,所以在软件设计上需要对各MCU重新配置定义数据的收发时序,防止收发冲突。当MCU处于接收数据状态时,需要将MCU自带的接收寄存器设置为接收使能,同时将TX口设置为输入口,即TX口为高阻状态,不会影响到RX口的接收;当接收数据完成后进入发送数据状态时,启动发送寄存器的发送使能,并将TX口设置为输出,并输出高低电平,同时禁止RX口的接收使能,防止RX口接收到自己发送出去的数据。当数据发送完成后,再打开RX口的接收使能以及关闭寄存器的发送使能。

本发明实施例通过将主机的RX口、TX口和从机的RX口、TX口连接到同一通信总线,减少了设备与设备之间的连线以及信号的相互干扰。此外,本发明不需要增加额外的器件,成本低廉,设计周期短,可以广泛应用于短距离多个设备之间的通信。

实施例四

如图5所示为本发明实施例四提供的一种基于UART主从多机通讯的时序图,包括一个主机和两个从机。假设,从机001已与主机完成握手,可以与主机正常通信,从机002为刚挂载到通信总线上的设备。

需要说明的是,本实施例中握手信号、握手成功信号、命令数据以及回码均采用如图4所示的通信帧格式。不论是主机还是从机,在发送通信帧之前,均需要检测通信总线是否空闲,如果空闲,则发送,如果非空闲,表示有其他从机或主机在传输数据,则等待一段时间后继续检测;在发送通信帧之后,会启动一定时器,若在预设的时间内未收到对方的回应,则会再次发送;在接收通信帧之后,会根据通信帧中携带的校验码对数据进行校验,如果数据校验出错,则丢弃此帧数据并发送回码要求重新发送。连续5次校验码出错,则停止预期通信,并报错。从机除了发送握手信号,不会主动给主机发送数据,主机给从机发送数据后,必须要接到正确回码才会给另一个从机发送数据。

以下介绍从机002挂载到通信总线上后,该主从多机通信系统的大致工作流程:

步骤S502,从机002发送握手信号到主机。

该握手信号通过从机002的TX口发送到通信总线,其头命令为1(表示该信号由从机发出),从机设备ID为002。

从机001通过其的RX口接收到握手信号,通过对握手信号头命令解析可知该信号由从机发出,直接丢弃该通信帧。

主机通过其RX口接收到握手信号,对握手信号进行解析,解析出等待握手的从机设备ID为002。

步骤S504,主机返回握手成功信号。

该握手成功信号的头命令为0(表示该信号由主机发出),从机设备ID为002。

从机002通过自身的RX口接收到主机发来的握手成功信号,对握手成功信号进行解析,先解析出头命令为0,则继续解析出从机设备ID为002,经过匹配,该从机设备ID与自身设备ID相同,则确认这是主机发送给自己的信号。进一步,根据帧长度对数据进行解析,确认主机已成功接收到自己发送的握手信号,与主机握手成功。随后从机002进入等待状态,等待主机发送命令数据。

从机001接收到握手成功信号后,通过对头命令的解析可知,该信号由从机发出,直接丢弃该通信帧。

步骤S506,主机发送命令数据到从机002。该命令数据的头命令为0,从机设备ID为002。

从机001接收到命令数据经解析发现不是发给自己的,将通信帧丢弃。

步骤S508,从机002对命令数据进行解析,确认是主机发送给自己的命令数据,根据解析出的命令执行处理。

步骤S510,从机002发送回码给主机。

从机002执行完命令后,根据执行的结果发送回码给主机。回码的头命令为1,从机设备ID为002。

步骤S512,主机发送下一条命令数据给从机001。

主机接收到从机002返回的回码,确认回码正确后,发送下一条命令数据给从机001。需要说明的是,如果主机在预定时间内未收到相应的回码,则会再次发送上一条命令数据至相应从机,直到主机收到相应从机的正确回码才会发送下一条命令数据。

步骤S514,从机001对命令数据进行解析,确认是主机发送给自己的命令数据,根据解析出的命令执行处理。

从机002接收到命令数据经解析发现不是发给自己的,将通信帧丢弃。

步骤S516,从机001发送回码给主机。

本发明实施例通过将主机的RX口、TX口和从机的RX口、TX口连接到同一通信总线,减少了设备与设备之间的连线以及信号的相互干扰。此外,本发明不需要增加额外的器件,成本低廉,设计周期短,可以广泛应用于短距离多个设备之间的通信。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1