一种串行数据传输的波特率校正硬件装置及设计方法
技术领域
本发明涉及通信技术领域,具体为一种串行数据传输的波特率校正硬件装置及设计方法。
背景技术
波特率是一种衡量通信速度的参数,它表示每秒钟传送的bit的个数,连接到串口上的设备以约定的波特率进行通信,即串口两端的设备只有保持相同速率的条件下才能够实现正常通信,否则会出现调试指令无效、显示乱码。在正常情况下,串口芯片内部的数字电路通常有一个使用高频时钟的计数器,在收到起始位后计数器开始循环计数工作,在计数器计数到n/2的时候,接收端保存采样发送端发送过来的数据;而在实际应用中,由于串口两端的设备可能由于时钟精度不一致或其他设计因素导致波特率出现偏差,当发送端和接收端波特率偏差达到一定值时,接收端端就可能会收到错误数据,进而降低了通信的稳定性。
异步通信方法是靠信号本身进行控制的,以使得各种设备都能在一条数据总线上运行,并不依赖于发射和接受端所采用的具体时钟频率。所以对于异步通信信号而言,信号本身的精度是有要求的!通常情况下,在单片机做异步串行通信时,都会需要使用一个合适的晶体振荡器,对于较高波特率的异步通信则必须使用一个较高的晶体振荡器,甚至是一个特别规格的高速晶体振荡器。
在有计时功能的电子产品种,考虑到频率的精确性与低频率的省电特性,都会选择低频率振荡器作为计时时钟源头,例如32768hz晶体振荡器,但是如果相同的项目中需要进行较高波特率的异步串行通信,这时就需要另外增加一颗高频率的晶体震荡,通常情况会选择11.0592MHz或5.5296MHz等,这种常规做法的缺点一个是增加成本,另一方面也会由于采用较高的振荡频率而使得对产品的工作最低电压有不良的影响。
针对上述情况,我们需要一种串行数据传输的波特率校正硬件装置及设计方法,通过采用计时产品已有的低频晶体率振荡器,结合绝大多数单片机产品本身存在的内部振荡器,使用创新的波特率校正硬件设计,从而实现稳定的高波特率异步串行通信的功能。
发明内容
本发明的目的在于提供一种串行数据传输的波特率校正硬件装置及设计方法,以解决上述背景技术中提出的问题。
为了解决上述技术问题,本发明提供如下技术方案:一种串行数据传输的波特率校正硬件装置,包括:数据总线、高速晶体振荡器、波特率信号产生器、发射接收控制线路、RC频率测试调整线路、波特率校准线路及波特率信号与校准信号混合器,
所述高速晶体振荡器用于为串行通信提供振荡频率;
所述波特率信号产生器通过使用高速晶体振荡器,分频产生串行通信的基础时钟,为波特率的16倍频率;
所述发射接收控制线路作为串行数据通信控制线路,包括TxD和RxD两部分,所述TxD用于串行通信中发送数据,所述RxD用于串行通信中接收输入数据;
所述波特率校准线路通过高速晶体振荡器的振荡频率与波特率信号产生器输出以及相关参数的计算结果,设定波特率调整周期,所述波特率校准线路类似一个特别的定时器;
所述波特率信号与校准信号混合器用于在每一个设定的周期数内,延长波特率基础信号一个周期,实现波特率频率的校正功能;
所述RC频率测试调整线路获取高速晶体振荡器的振荡频率;
所述数据总线用于整合该装置中波特率信号产生器、波特率校准线路和发射接收控制线路的数据,
所述数据总线向波特率信号产生器传递波特率控制数据,所述数据总线与发射接收控制线路进行数据交换,所述数据交换的内容为串行通信需要发送的数据及已经接收的数据,所述数据总线向波特率校准线路传递波特率校准数据。
本发明相较于普通的异步串行通信,添加波特率校准线路及波特率信号与校准信号混合器对异步串行通信进行校准,由于普通的串行通信中采用高速晶体振荡器会因温度、电压等外部条件的不同,精确性会发生变化,同时由于误差累计的问题,一段时间后,即使高速晶体振荡器比较精确,还是会因误差累计的原因存在通信失败的情况,而本发明中波特率校准线路通过高速晶体振荡器的振荡频率与波特率信号产生器获取的波特率的16倍频率计算出异步串行通信中的误差周期和波特率与振荡频率的实际分频,进而通过在误差周期结束时,将波特率的时钟延长一个振荡周期的方式实现对异步串行通信的校准。
进一步的,所述波特率信号产生器分别与高速晶体振荡器、波特率信号与校准信号混合器及数据总线相连,所述RC频率测试调整线路分别与高速晶体振荡器及波特率校准线路相连,所述波特率信号与校准信号混合器分别与波特率校准线路及发射接收控制线路相连,所述数据总线分别与波特率校准线路及发射接收控制线路相连。
进一步的,所述高速晶体振荡器可以由高速晶体振荡组件代替,所述高速晶体振荡组件包括:高速RC振荡器、低速晶体振荡器与RC频率测试调整线路,
所述高速RC振荡器为串行通信提供原始频率,
所述低速晶体振荡器,为串行通信提供基准时钟,
所述RC频率测试调整线路包括定时器和计数器,定时器的时钟源来自低速晶体振荡器,做精准的定时,用来控制计数器的开启与停止,计数器的时钟源为高速RC振荡器,相当于高速RC时钟,计数器会被精准的定时器控制开始、停止计数,若定时器的定时时间是T,而计数器在T的定时期间计数值是C,则T/C为高速RC时钟的具体频率;
所述高速RC振荡器与波特率信号产生器相连,所述RC频率测试调整线路分别与高速RC振荡器、低速晶体振荡器及波特率校准线路相连,所述RC频率测试调整线路与数据总线进行数据交换,交换RC频率测试与校准数据。
由于高速晶体振荡器的成本较高,且对电路工作最低电压的负担较大,本发明中由高速RC振荡器、低速晶体振荡器与RC频率测试调整线路代替高速晶体振荡器能够很好的解决上述问题,且合理运用了高速RC振荡器频率快但精度低、低速晶体振荡器频率低但精度高的特点,通过RC频率测试调整线路将两者的优点有效结合起来,不仅实现了高速晶体振荡器频率高且精度高的效果,还节约了成本,且降低了电路工作时的最低电压。
进一步的,所述高速RC振荡器及低速晶体振荡器的个数可以为多个。
本发明中高速RC振荡器及低速晶体振荡器的个数可以为多个,通过多个低速晶体振荡器分别计算高速RC振荡器的具体振荡频率,然后在求取平均值,或者通过计算多组高速RC振荡器及低速晶体振荡器中高速RC振荡器的具体振荡频率,然后在求取所有高速RC振荡器的平均值,这样操作,得到的高速RC振荡器的具体振荡频率数值更加精确。
一种串行数据传输的波特率校正硬件设计方法,其特征在于,具体步骤如下:
S1、RC频率测试调整线路获取高速晶体振荡器的振荡频率;
S2、数据总线向波特率信号产生器传递波特率控制数据,波特率校准线路根据波特率信号产生器输出的数据与RC频率测试调整线路获取的高速晶体振荡器的振荡频率,进一步计算出串行通信的误差周期及波特率与振荡频率的实际分频;
S3、数据总线将波特率校准数据传递给波特率校准线路,同时与波特率校准线路相连的波特率信号与校准信号混合器在每一个误差周期结束后,延长波特率基础信号一个周期,实现波特率频率的校正功能。
进一步的,所述步骤S1中的高速晶体振荡器可由高速RC振荡器、低速晶体振荡器与RC频率测试调整线路代替,RC频率测试调整线路将低速晶体振荡器作为定时器,做精准的定时,将高速RC振荡器作为计数器,相当于高速RC时钟,低速晶体振荡器用来控制计数器的开启与停止,高速RC振荡器会被精准的定时器控制开始、停止计数,
若定时器的定时时间是T,而计数器在T的定时期间计数值是C,则T/C为高速RC时钟的具体频率;
所述RC频率测试调整线路用于测试高速RC振荡器的频率;同时可以通过调整线路参数的方式微调高速RC振荡器的频率值。
本发明对高速RC振荡器、低速晶体振荡器合理运用,通过RC频率测试调整线路将高速RC振荡器、低速晶体振荡器有效结合起来,将低速晶体振荡器当成定时器,将高速RC振荡器当成计数器,进而得到高速RC振荡器的具体振荡频率,该方法不仅节省了成本,还降低了串行通信中的最小工作电压。
进一步的,所述波特率校准线路计算串行通信的误差周期及波特率与振荡频率的实际分频的具体方法如下:
分别获取A、B两个参量,所述A为高速晶体振荡器的频率或高速RC振荡器的振荡频率,当每个BIT通信数据有16个单位周期信号组成时,所述B通过波特率信号产生器直接获取,为波特率的16倍频率,
计算A/B的商的整数部分为Q,A/B的小数部分为R,即:A/B=Q+R;
那么
当R的值等于0时,则该串行通信不需要进行误差调整,
当R的值不等于0时,则串行通信中的误差周期C=Q/R,波特率与振荡频率的实际分频D=A/D,
由A/B=Q+R,
可得到B=A/(Q+R)=A/(Q(1+R/Q))=(A/Q)/(1+1/C)=D*C/(C+1),
故需要在每个C代表的误差周期结束时,将波特率的时钟延长一个振荡周期,只是单次延长1个振荡周期,后续还是原设定时钟源的实际频率,要等下一次C代表的误差周期来到时,才会再次延长一个振荡周期,这样调节才能够使得波特率最接近B的频率。
在串行通信过程中,只有当发送端和接收端波特率偏差达到一定值时,接收端才可能会收到错误数据,进而导致通信失败,本发明通过计算出具体的误差周期数,并在误差周期数结束时,将波特率的时钟延长一个振荡周期,使误差范围时钟保持在一定范围内,且该误差范围能够满足串行通信的正常进行,进而实现对串行通信的校准。
与现有技术相比,本发明所达到的有益效果是:本发明允许RC时钟存在一定的误差,最主要的解决方法是可以准确的测量到具体每个产品的某个具体工作条件下的误差值,并根据测试结果而动态的调整参数设定完成相关的异步通信,不仅将IC个体差异带来的误差,还有将温度,电压等环境变量引入的误差一并测量并进行处理,使得项目本身的适应性增强,
同时还提供了一种选用普通规格的晶体时钟(高速)来完成高波特率的异步串行通信,对UART通信而言,这样的晶体振荡器并不适合一些高波特率设定的通信,尤其是信号连续的长时间通信,但是本发明的硬件调整线路可以将这样的晶体振荡器对应的普通频率通过对波特率误差的校正,从而完成相应的高速通信,进而实现更加容易的器件选型,
另外,本发明可以做到最高时钟频率为基准单位的高精度的调整,从而使得高波特率的异步串行通信得以实现。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明一种串行数据传输的波特率校正硬件装置及设计方法的组成示意图;
图2是本发明一种串行数据传输的波特率校正硬件装置及设计方法对应普通串行通信的组成结构示意图;
图3是本发明一种串行数据传输的波特率校正硬件装置及设计方法替换高速晶体振荡器后的组成结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-3,本发明提供技术方案:一种串行数据传输的波特率校正硬件装置,包括:数据总线、高速晶体振荡器、波特率信号产生器、发射接收控制线路、RC频率测试调整线路、波特率校准线路及波特率信号与校准信号混合器,
所述高速晶体振荡器用于为串行通信提供振荡频率;
所述波特率信号产生器通过使用高速晶体振荡器,分频产生串行通信的基础时钟,为波特率的16倍频率;
所述发射接收控制线路作为串行数据通信控制线路,包括TxD和RxD两部分,所述TxD用于串行通信中发送数据,所述RxD用于串行通信中接收输入数据;
所述波特率校准线路通过高速晶体振荡器的振荡频率与波特率信号产生器输出以及相关参数的计算结果,设定波特率调整周期,所述波特率校准线路类似一个特别的定时器;
所述波特率信号与校准信号混合器用于在每一个设定的周期数内,延长波特率基础信号一个周期,实现波特率频率的校正功能;
所述RC频率测试调整线路获取高速晶体振荡器的振荡频率;
所述数据总线用于整合该装置中波特率信号产生器、波特率校准线路和发射接收控制线路的数据,
所述数据总线向波特率信号产生器传递波特率控制数据,所述数据总线与发射接收控制线路进行数据交换,所述数据交换的内容为串行通信需要发送的数据及已经接收的数据,所述数据总线向波特率校准线路传递波特率校准数据。
本发明相较于普通的异步串行通信,添加波特率校准线路及波特率信号与校准信号混合器对异步串行通信进行校准,由于普通的串行通信中采用高速晶体振荡器会因温度、电压等外部条件的不同,精确性会发生变化,同时由于误差累计的问题,一段时间后,即使高速晶体振荡器比较精确,还是会因误差累计的原因存在通信失败的情况,而本发明中波特率校准线路通过高速晶体振荡器的振荡频率与波特率信号产生器获取的波特率的16倍频率计算出异步串行通信中的误差周期和波特率与振荡频率的实际分频,进而通过在误差周期结束时,将波特率的时钟延长一个振荡周期的方式实现对异步串行通信的校准。
本实施例中波特率校准线路通过获取的高速晶体振荡器的振荡频率和波特率信号产生器输出的数据,对数据进行计算处理,计算出该串行通信的误差周期,然后通过波特率信号与校准信号混合器在每一个误差周期结束后,延长波特率基础信号一个周期,实现波特率频率的校正功能。
所述波特率信号产生器分别与高速晶体振荡器、波特率信号与校准信号混合器及数据总线相连,所述RC频率测试调整线路分别与高速晶体振荡器及波特率校准线路相连,所述波特率信号与校准信号混合器分别与波特率校准线路及发射接收控制线路相连,所述数据总线分别与波特率校准线路及发射接收控制线路相连。
所述高速晶体振荡器可以由高速晶体振荡组件代替,所述高速晶体振荡组件包括:高速RC振荡器、低速晶体振荡器与RC频率测试调整线路,
所述高速RC振荡器为串行通信提供原始频率,
所述低速晶体振荡器,为串行通信提供基准时钟,
所述RC频率测试调整线路包括定时器和计数器,定时器的时钟源来自低速晶体振荡器,做精准的定时,用来控制计数器的开启与停止,计数器的时钟源为高速RC振荡器,相当于高速RC时钟,计数器会被精准的定时器控制开始、停止计数,若定时器的定时时间是T,而计数器在T的定时期间计数值是C,则T/C为高速RC时钟的具体频率;
所述高速RC振荡器与波特率信号产生器相连,所述RC频率测试调整线路分别与高速RC振荡器、低速晶体振荡器及波特率校准线路相连,所述RC频率测试调整线路与数据总线进行数据交换,交换RC频率测试与校准数据。
由于高速晶体振荡器的成本较高,且对电路工作最低电压的负担较大,本发明中由高速RC振荡器、低速晶体振荡器与RC频率测试调整线路代替高速晶体振荡器能够很好的解决上述问题,且合理运用了高速RC振荡器频率快但精度低、低速晶体振荡器频率低但精度高的特点,通过RC频率测试调整线路将两者的优点有效结合起来,不仅实现了高速晶体振荡器频率高且精度高的效果,还节约了成本,且降低了电路工作时的最低电压。
本实施例中低速晶体振荡器虽然频率精准但是速度过低而无法进行高波特率的串行异步数据通信,而高速RC振荡器速度够高但是准确度较低而无法进行高波特率的串行异步数据通信,为此通过增加使用低速晶振频率测试并调整RC频率线路,将低速晶体振荡器作为一个定时器,做精准的定时,用来控制计数器的开启与停止,而计数器为高速RC振荡器,通过低速晶体振荡器的精准定时,计算出高速RC振荡器的具体频率,达到高速晶体振荡器的作用,即可以完成准确的高波特率的串行异步通信。唯一的区别在于RC时钟的振荡频率的具体数值需要使用精准的低频率晶体震荡通过测试而得到,其它校正过程则完全同使用固定的已知的晶体震荡频率时一致。
所述高速RC振荡器及低速晶体振荡器的个数可以为多个。
本发明中高速RC振荡器及低速晶体振荡器的个数可以为多个,通过多个低速晶体振荡器分别计算高速RC振荡器的具体振荡频率,然后在求取平均值,或者通过计算多组高速RC振荡器及低速晶体振荡器中高速RC振荡器的具体振荡频率,然后在求取所有高速RC振荡器的平均值,这样操作,得到的高速RC振荡器的具体振荡频率数值更加精确。
一种串行数据传输的波特率校正硬件设计方法,其特征在于,具体步骤如下:
S1、RC频率测试调整线路获取高速晶体振荡器的振荡频率;
S2、数据总线向波特率信号产生器传递波特率控制数据,波特率校准线路根据波特率信号产生器输出的数据与RC频率测试调整线路获取的高速晶体振荡器的振荡频率,进一步计算出串行通信的误差周期及波特率与振荡频率的实际分频;
S3、数据总线将波特率校准数据传递给波特率校准线路,同时与波特率校准线路相连的波特率信号与校准信号混合器在每一个误差周期结束后,延长波特率基础信号一个周期,实现波特率频率的校正功能。
所述步骤S1中的高速晶体振荡器可由高速RC振荡器、低速晶体振荡器与RC频率测试调整线路代替,RC频率测试调整线路将低速晶体振荡器作为定时器,做精准的定时,将高速RC振荡器作为计数器,相当于高速RC时钟,低速晶体振荡器用来控制计数器的开启与停止,高速RC振荡器会被精准的定时器控制开始、停止计数,
若定时器的定时时间是T,而计数器在T的定时期间计数值是C,则T/C为高速RC时钟的具体频率;
所述RC频率测试调整线路用于测试高速RC振荡器的频率;同时可以通过调整线路参数的方式微调高速RC振荡器的频率值。
本发明对高速RC振荡器、低速晶体振荡器合理运用,通过RC频率测试调整线路将高速RC振荡器、低速晶体振荡器有效结合起来,将低速晶体振荡器当成定时器,将高速RC振荡器当成计数器,进而得到高速RC振荡器的具体振荡频率,该方法不仅节省了成本,还降低了串行通信中的最小工作电压。
所述波特率校准线路计算串行通信的误差周期及波特率与振荡频率的实际分频的具体方法如下:
分别获取A、B两个参量,所述A为高速晶体振荡器的频率或高速RC振荡器的振荡频率,当每个BIT通信数据有16个单位周期信号组成时,所述B通过波特率信号产生器直接获取,为波特率的16倍频率,
计算A/B的商的整数部分为Q,A/B的小数部分为R,即:A/B=Q+R;
那么
当R的值等于0时,则该串行通信不需要进行误差调整,
当R的值不等于0时,则串行通信中的误差周期C=Q/R,波特率与振荡频率的实际分频D=A/D,
由A/B=Q+R,
可得到B=A/(Q+R)=A/(Q(1+R/Q))=(A/Q)/(1+1/C)=D*C/(C+1),
故需要在每个C代表的误差周期结束时,将波特率的时钟延长一个振荡周期,只是单次延长1个振荡周期,后续还是原设定时钟源的实际频率,要等下一次C代表的误差周期来到时,才会再次延长一个振荡周期,这样调节才能够使得波特率最接近B的频率。
在串行通信过程中,只有当发送端和接收端波特率偏差达到一定值时,接收端才可能会收到错误数据,进而导致通信失败,本发明通过计算出具体的误差周期数,并在误差周期数结束时,将波特率的时钟延长一个振荡周期,使误差范围时钟保持在一定范围内,且该误差范围能够满足串行通信的正常进行,进而实现对串行通信的校准。
本实施例中,若振荡频率A=4000KHz,波特率为9.6KHz,那么波特率信号产生器直接获取的值B=153.6KHz,
故A/B=4000KHz/153.6KHz=26.0416666~,即Q=26,R=0.0416666~,
由D=A/Q,可得D=4000KHz/26=153.846~KHz,
由C=Q/R,可得C=26/0.0416666~=624,
且B=D*C/(C+1),即153.846~KHz*624/625=153.6KHz
故只需要在每624振荡周期后,当前波特率时钟延长一个振荡周期即0.25us就可以将此设定条件下的波特率误差消除,并在每624个周期后再次重复以上动作即可以维持一个精准的串行通信频率。
本实施例中,若振荡频率A=5529.6KHz,波特率为9.6KHz,那么波特率信号产生器直接获取的值B=153.6KHz,
故A/B=5529.6KHz/153.6KHz=36,即Q=36,R=0,
故C=Q/R中的R=0,就是说此种特殊规格的晶体振荡器计算所得波特率误差为0,不需要进行误差调整。
本发明的工作原理:本发明进行串行通信时,
当使用的是高速晶体振荡器时,数据总线向波特率信号产生器传递波特率控制数据,BIT通信数据有16个单位周期信号组成时,波特率信号产生器输出的数据则是波特率的16倍,波特率校准线路根据波特率信号产生器输出的数据与高速晶体振荡器的振荡频率计算串行通信的误差周期及波特率与振荡频率的实际分频,然后数据总线将波特率校准数据传递给波特率校准线路,同时与波特率校准线路相连的波特率信号与校准信号混合器在每一个误差周期结束后,延长波特率基础信号一个周期,实现波特率频率的校正功能,发射接收控制线路实现对数据的发送与接收,在发送端和接收端波特率偏差保持在一定范围内时,接收端就能成功收到数据,
当使用高速RC振荡器、低速晶体振荡器与RC频率测试调整线路代替高速晶体振荡器时,所述高速RC振荡器与波特率信号产生器相连,所述RC频率测试调整线路分别与高速RC振荡器、低速晶体振荡器及波特率校准线路相连,所述RC频率测试调整线路将低速晶体振荡器作为一个定时器,做精准的定时,用来控制计数器的开启与停止,而计数器为高速RC振荡器,通过低速晶体振荡器的精准定时,计算出高速RC振荡器的具体频率,三者有效结合在一起,能够达到高速晶体振荡器的作用,波特率校准线路根据波特率信号产生器输出的数据与测得的高速RC振荡器的具体振荡频率计算串行通信的误差周期及波特率与振荡频率的实际分频,然后数据总线将波特率校准数据传递给波特率校准线路,同时与波特率校准线路相连的波特率信号与校准信号混合器在每一个误差周期结束后,延长波特率基础信号一个周期,实现波特率频率的校正功能,发射接收控制线路实现对数据的发送与接收,在发送端和接收端波特率偏差保持在一定范围内时,接收端就能成功收到数据。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。