UART串口主从通信的时钟频率校准和频率测量方法与流程

文档序号:23349169发布日期:2020-12-18 16:52阅读:926来源:国知局
UART串口主从通信的时钟频率校准和频率测量方法与流程

本发明涉及电子技术领域的一种时钟频率校准和频率测量方法,具体是涉及了一种具有时钟频率校准和频率测量功能的uart从机芯片和用于uart串口主从通信的时钟频率校准和频率测量方法。



背景技术:

uart(串口)、spi和iic通讯是最常用的几种mcu与外部设备(外设)间的通讯接口电路。uart串口通讯仅需tx/rx两根信号线,在不需隔离的半双工通讯里,两根信号线可以合并为一根。在隔离通讯领域里,也仅需两个隔离器件,并且协议简单可靠,因此在不需要特别高速通讯的应用领域里获得了大量的应用。

串口通讯包含主机和从机,可以一对一,也可以一对多。主机一般为主机mcu,从机为外部设备,例如adc芯片、计量芯片、传感器芯片等。

串口通讯要求主机和从机的频率偏差系数在一定范围之内,一般要求是+/-5%之内,更可靠些的要求是+/-3%之内。主机mcu一般会采用具有精确频率的晶体时钟,而从机芯片出于成本考虑,则可能仅使用芯片内部的rc时钟。

从机芯片内的rc时钟离散度偏差可能会超过5%,超过的芯片会导致串口通讯失败,从而影响良率。



技术实现要素:

为解决串口通讯时从机芯片内部rc时钟偏差过大、导致通讯失败的问题,本发明提出一种串口通讯流程和技术实现方式,具体是一种uart串口主从通信的时钟频率校准和频率测量方法。

本发明所采用的技术方案是:

首先,通过主机mcu向从机芯片发送脉宽预先设置的复位信号rx,从机芯片接收复位信号rx,进而通过对复位信号rx中的脉宽检测,计算出自身内部时钟的第一频率偏差系数,然后根据第一频率偏差系数进行第一次调整时钟频率到更小的偏差范围之内,同时将第一频率偏差系数保存;

然后,在主机mcu和从机芯片后续的正常通讯过程中,从机芯片实时检测从主机mcu接收的每一帧通讯的数据变化情况,检测出时钟频率的第二偏差系数,将同时将第二频率偏差系数保存到寄存器里并发送到主机mcu读取,由主机mcu根据第二频率偏差系数对从机芯片检测接收到的测量量进行调整修正。

第二偏差系数保存在寄存器里供主机mcu读取,再由主机mcu进行第二次修正,第二偏差系数不对rc时钟频率做进一步精细化调整,这样解决了rc时钟频率的调节精度有限的问题。

第一次检测能将rc时钟频率实际调节到百分之一精度,第二次检测能提供时钟频率千分之一精度的系数,供mcu读取以便对频率敏感的数据进行系数修正。

所述的方法用于带有晶体时钟的主机mcu和带有rc时钟的从机芯片之间的通讯。

设置复位信号rx包括一个时长为trst的’0’低电平(复位电平),从机芯片接收复位信号rx开始,当初始接收到rx信号中的’0’低电平后,用内部rc时钟对’0’低电平进行计数,等到复位信号rx变高成’1’高电平后停止计数,获得实际计数值nact,进而计算nact/nideal作为第一频率偏差系数,其中nideal表示从机芯片内部rc时钟的理想频率fideal下的理想计数值。

所述复位信号rx中的’0’低电平的时长大于串口最低串口通讯波特率时发送全’0’低电平信号的时间长度。

本发明中的低电平和高电平是相对的,可以认为低电平是较低电平,高电平是较高电平。

复位信号rx中,在’0’低电平后增加固定脉宽的若干bit的验证数据,通过增加验证数据避免rx复位时的’0’低电平信号受干扰导致计数错误。

所述的主机mcu具有不同串口通讯波特率,根据不同的通讯波特率设定不同的’0’低电平复位信号rx脉宽,每种波特率对应一个理想计数值nideal;此时与从机芯片实际计数值nact最接近的那个理想计数值nideal所对应的通讯波特率,即为当前所用的波特率,根据当前实际计数值nact和理想计数值nideal获知从机芯片的rc时钟频率偏差。

在主机mcu和从机芯片之间正常的uart串口通讯过程中,从机芯片的寄存器内初始设置计数值为0,从机芯片在刚接收到主机mcu发过来的信号的起始位’0’后,除正常的uart串口接收操作之外,立刻用自身内部rc时钟开始计数,在检测到复位信号rx出现’1’高电平的上升沿之后,将一次计数更新到从机芯片的寄存器里,更新寄存器中的计数值ntact;同时继续计数,在下一次又出现’0’低电平到’1’高电平的信号变化时,再将变化时刻的计数值更新到从机芯片的寄存器,更新寄存器中的计数值ntact;不断计数,从机芯片接收到停止位并且检验到数据正确时,停止计数;

然后以最后寄存器中的计数值ntact计算ntact/(x×ntideal)作为第二频率偏差系数,其中x表示理想计数值序数,x=[ntact/ntideal],[]表示取整数函数,ntideal表示串口通讯波特率周期对应的理想计数值。

根据第一频率偏差系数或者第二频率偏差系数进行调整具体均是在从机芯片所检测获得测量量基础上乘以或者除以偏差系数进行处理。

所述的测量量为测量的频率和电压等,但不限于与此。

本发明的有益效果是:

本发明能解决uart串口主从通信间的时钟频率不同步的问题,以及该问题带来的测量数据不准确的问题,在不改变串口通讯的帧结构、不用增加额外的帧结构的情况下能进行校正频率,提升了串口通讯的效率。

附图说明

图1为复位信号获得计数值为nact的示意图;

图2为复位信号后额外增加了验证数据的示意图;

图3为典型的uart通讯帧格式示意图;

图4为一个串口通讯波形例子的数据结构示意图;

图5为另一个串口通讯波形例子的数据结构示意图。

具体实现方式

下面结合附图和具体实施对本发明作进一步说明。

本发明的具体实施例如下:

s1、

本发明具体实施中,从机芯片除没有精确的晶体时钟外,也没有复位引脚,本发明里利用串口通讯的复位信号rx线给从机芯片发送复位信号。复位信号设置为一个持续较长时间的’0’低电平,满足大于串口最低串口通讯波特率时发送全0信号的长度即可,将复位信号’0’低电平具体的持续时间设置为trst,以进行脉宽预先设置。从机芯片的内部rc时钟实际频率为fact,rc时钟对应的理想频率为fideal。

从机芯片在复位信号rx上接收到低电平(’0’低电平)后,即开始用内部rc时钟对’0’低电平进行计数,等到复位信号rx变高(即’1’高电平)后停止计数,如图1所示,此时获得实际计数值为nact。

在从机芯片内部rc时钟的理想频率fideal下的理想计数值是nideal,则根据nact与nideal的比值得到内部rc时钟实际频率fact=(nact/nideal)×fideal,提取频率偏差系数nact/nideal,能用于调节从机芯片内部的rc时钟频率,使其从超过+/-5%的初始频率偏差系数降至+/-1%之内,从而保证可靠的串口通讯。同时将精细的频率偏差系数nact/nideal的数值保存在从机芯片的寄存器里,以便主机mcu读取。

然后mcu与从机芯片进行串口通讯,如果通讯不成功,说明rx复位信号期间受干扰导致失败,需要重新发起rx复位操作。此时,主机mcu在发送完’0’信号后,紧接着以固定脉宽再发送几个bit的验证数据,从机芯片在实际计数值nact的计数结束之后也马上接收后面的验证数据,吻合之后认为复位信号rx复位成功且计数可靠,再通过tx信号给主机mcu进行回复,这样能显著避免rx复位时的’0’信号受干扰导致计数错误。

如图2所示,图中在’0’复位电平后额外增加了3个bit的验证数据。验证数据的bit数可多可少,值也可以任选。

进一步的,对于主机mcu具有不同的串口通讯波特率,通过定义复位信号rx的复位时间的长度来识别,这样在复位芯片之后,主机mcu能用不同的波特率直接与从机芯片进行通讯,这样不同的应用下会采用不同的通讯波特率,波特率越高,传送的数据量越大,进而提高传送的数据量。例如,具有4种串口通讯波特率(假设为1200/2400/4800/9600)对应的复位’0’低电平时间t1rst~t4rst,这4种串口通讯波特率的从机芯片理想计数值对应为n1ideal~n4ideal,实际计数值为nact。判断实际计数值nact更接近于哪个理想计数值,那么就以哪个理想计数值对应的串口通讯波特率作为主机mcu所要选择的波特率,然后根据该实际计数值nact与该理想计数值的比值调整rc时钟的频率。

s2、

完成rx复位信号对从机芯片的频率校正之后,开始正常的串口通讯。

从机芯片rc时钟除了初始误差偏大之外,具体实施中随温度的改变,时钟频率也会有所变化。在-40~125度范围之内,rc时钟的频率改变在1%~3%不等,取决于rc时钟设计的指标。考虑到有些应用领域的从机芯片需要有更高的时钟频率精度,因此在后续的串口通讯时,需要不时的计算rc时钟的偏差,根据情况调节rc时钟频率并保存频率偏差系数。芯片的温度是缓慢变化的,rc时钟频率偏差系数的计算不需太频繁。

典型的uart通讯帧格式如图3所示。平时从机芯片处于待命状态,开始通讯时以’0’低电平作为起始位,时间长度等于1/fbaud(fbaud为串口通讯波特率)。然后紧接着是8bit数据位,数据位的值可能是0也可能是1。数据位之后是奇偶校验位,最后是停止位,一般是’1’高电平。

在uart串口通讯的时候,从机芯片在接收到起始位’0’之后,除正常的uart接收操作之外,也立刻用内部rc时钟开始计数,在检测到复位信号rx出现’1’上升沿之后,将此时的计数值保存到一个寄存器里,假设值为ntact,同时计数值继续计数。在下一次又出现’0’信号到’1’信号变化时,再将变化时刻的计数值更新到ntact里。等到uart接收到停止位完成这一帧的传输并检验到数据正确时,停止计数。此时寄存器中的计数值ntact代表从起始位’0’的下降沿,到最后一个’0’上升沿(可能是数据位,也可能是奇偶校验位)之间的时间长度。如果奇偶校验位为’0’,则ntact=10/fbaud。如果奇偶校验位为’1’,根据数据位的值,ntact可能是1/fbaud~9/fbaud。

一个串口通讯波特率周期对应的理想计数值为ntideal,那么一帧通讯下来,可能的理想计数值是1到10个ntideal。

此时对比实际ntact更接近于这10个理想计数值中的哪一个,则选取该理想计数值。若理想计数值是第x个,然后可计算出fact=(ntact×tideal)/(x×ntideal),计算出频率偏差系数ntact/(x×ntideal)后,就根据这个频率偏差系数进行修正了。

经历过rx复位校正rc时钟,这一步骤得到的频率偏差系数不会太大,如果太大(例如偏差超过+/-3%),则重新发起s1的复位信号rx的复位流程。完成上述计算后,频率监测模块恢复到待命状态,等待下一帧数据通讯。

如果接收到的串口通讯数据检验错误,则不用做频率偏差系数计算,直接恢复到待命状态,等待下一帧数据通讯。

以图4中具体的一个串口通讯波形为例,起始位的’0’下降沿时开始计数,在第一个数据’1’的上升沿时保存一次计数值,在第四个数据’1’的上升沿时保存一次计数值,在第七个数据’1’的上升沿时保存一次计数值,在奇偶校验位后的上升沿时保存一次计数值,然后串口检测到数据接收完毕且验证接收正确,则以最后一次保存的计数值来计算频率偏差系数。

具体实施中,为了保证频率测量的精确度,还采取以下措施:

如果串口通讯数据的奇偶校验错误,则不计算频率偏差系数。

如果x的数据太小,例如小于4个,可以选择不计算频率偏差系数。作为一种简化的例子,限定只有ntact接近于10*ntideal时,才选择计算频率偏差系数。

其他实施例

另一种实现方式是,有些主机mcu的uart通讯可以选择停止位为’0’低电平。如图5所示。按图5中的这种情况,寄存器中的计数值ntact必定等于11*ntideal,因此能方便地计算出rc时钟的频率偏差系数。

由此上述实施可见,通过本发明的方式,不改变串口通讯的帧结构,不用增加额外的帧结构来进行校正频率,提升了串口通讯的效率。

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