摘要 对串行通信波特率自动识别的方法进行深入的研究和分析;创新性地提出在码元宽度捕捉的基础上,用求最大公约数的方法进行波特率的自动识别,实现了不对待测系统发送的数据进行特殊要求即实现其串行通信数据的有效识别。该方法具有一般性,可广泛应用于多机通信、通信测试等不同的领域。
关键词 串行通信波特率 自动识别 最大公约数法
对于异步串行通信,只有在通信双方波特率相同时,才能实现数据的正确传输与接收;而一些系统总希望能实现对各种波特率的兼容。通常的实现方法是,要求对方首先发出规定的字符或数据,系统收到该字符或数据后,计算对方的波特率.以适应对方的波特率进行工作,例如某些无线收发模块、GSM通信模块等。然而对于检测、测试等领域,是不能要求被测系统发送某个固定的字符或数据的,那么对于类通信系统,如何实现波特率的可靠识别呢?本文创新性地提出了在码元宽度捕捉的基础上求最大公约数的方法。该方法不对待测系统发送的数据进行特殊要求即可实现波特率识别,且保证了波特率识别的有效性和可靠性。下面对该方法进行详细说明。
1 波特率自动识别的传统方法及基本原理
串行通信的数据是按位顺序
①标准波特率穷举法。标准波特率穷举法适用于主机侧的波特率必须在有限的几个固定数值之间变化,如300~19200之间的标准值;且从机侧的工作振荡频率已知且稳定。从机启动通信程序后,逐个尝试以不同的波特率接收主机发出的特定字符,直到能正确接收为止,因此,该方法的陨用有一定的局限性。
②码元宽度实时检测法。该方法要求主机按照约定发送某一数据,从机通过单片机的定时器测量RXD引脚上输入数据的码元宽度,而后计算出待测系统通信的波特率。该方法目前应用比较广泛。例如,某GSM模块在设计时为了适应各种通信波特率,要求其通信的系统首先发送08H,之后发送指令,它就是依靠数据08H的码元宽度计算出对方波特率的。
2 最大公约数法的原理及其实现
传统的方法对待测系统发送的数据都有一定的限制或要求才能够实现波特率的识别,但有些时候是无法约束待测系统首先发送特定字符的。这里,根据不同的应用需求,提出更为通用的波特率识别方法--最大公约数法。
为了便于说明问题,设主机的波特率为BPS,位传输时间为t1bit,测试系统测得的波特率为BAUD,位传输时间为txbit。以l位起始位、8位数据位、1位停止位、无奇偶校验位为例,通信数据格式如图l所示。除了起始位始终为0,停止位始终为1外,8位数据位的电平高低是由传输的数据决定的,要测得待测系统的波特率,根据波特率的实际意义BPS=l/t1bit,只要检测出待测系统通信数据的位传输时间t1bit即可。
位传输时间t1bit对应的就是单位码元宽度时间,只要知道单位码元宽度时间,系统波特率就很容易计算出来了。由于不能要求待测系统按照规定发出特定的数据或字符,因此这里使用码元宽度捕捉的方法来查找码元宽度时间,要将单片机挂入待测系统的通信线路,采用对待测系统TXD(或RXD)引脚的高、低电平脉冲持续时间不断采集的方式,来捕捉单位码元宽度时间t1bit,显然单片机直接采集到的单个高、低电平脉冲持续时间可能是nt1bit,其中1≤n≤9。如何从采集到的nt1bit找出t1bit,成为波特率识别的关键。
经过对串行通信数据格式的特点进行分析,本文提出了码元宽度最大公约数法来从捕捉到的码元宽度时间中计算单位码元宽度时间,也就是位传输时间t1bit。具体实现方法如下:在待测系统正常工作后,将测试单片机挂入其通信线路;首先对正、负脉冲宽度都进行计时,分别采集n次,剔除正脉冲溢出的部分后,把所有不相等的有效脉冲宽度时间从小到大排序(△t<5μs就认为两个时间相等,这一点在后面将有说明),假设依次为t1,t2,t3,…,tm(1≤m≤9);由于采集到的时间一定是t1bit的整数倍,计算出t1,t2,t3,…,tm的最大公约数为txbit,那么txbit就可以作为系统的最小脉冲宽度来计算波特率。这里计算得到的txbit可能等于t1bit,也可能不等于t1bit。下面分类讨论其作为位传输时间t1bit来计算波特率的可靠性及依据。
第1种情况,txbit=t1bit:待测系统通信过程中出现最窄正脉冲或最窄负脉冲,得到的txbit等于t1bit,那么使用txbit计算波特率是可靠的;待测系统通信过程中未出现最窄正脉冲或最窄负脉冲,但系统通信过程中出现的脉冲宽度的最大公约数为最窄脉冲宽度,如待测系统处出现了2t1
bit、3t1bit脉冲时间或者待测系统出现了4t1bit,7t1bit、8t1bit脉冲时间,此时最大公约数txbit仍等于t1bit,这种情况下波特率是可以可靠识别的。 第2种情况,txbit≠t1bit,即txbit=N't1bit(2≤N'≤9):若系统通信过程中出现的脉冲宽度时间都是N't1bit的整数倍,以N'=2为例,待测系统通信过程中可能只出现类似图2(a)所示的数据,求得的最大公约数txbit=2t1bit,BAUD=BPS/2,实际测得的波特率是被测系统波特率的1/2。但我们注意到,测得的数据如图2(b)所示,依次为FFH、FEH、FDH、FCH、FBH、FAH、F9H、F8H,尽管测得的波特率并不是被测系统波特率,但是并不会导致信息丢失,所有的数据都可以正确还原,因此这种情况下使用最大公约数法计算波特率也是完全可靠的。
求最大公约数需要注意的问题:
①近似相等。前面提到,检测到的串行通信某两个脉冲宽度时间差△t<5μs就认为两个时间近似相等,这是由串行通信的特点决定的。假设采集系统设计指标要求系统能够识别波特率在300~38 400
②近似等于0。位传输时间t1bit为26μs≤t1bit≤3400μs,所以检测到的脉冲宽度一定≥26μs。如果检测到待测系统的脉冲宽度小于5μs,就可以认为其近似等于O。实际上经过大量的实验,直接检测到某脉冲宽度时间小于5μs的结果是不会出现的。其意义在于:在计算最大公约数时,要用采集到的有效脉冲时间t1,t2,t3,…,tm分别除以最小时间t1,设余数由小到大依次为A2,A3,…,Am,此时除了与t1近似相等的余数外,还有一部分余数小于5μs,那么此时就认为余数近似等于0,剩下的部分余数既不近似等于t1也不近似等于O。近似相等的余数只保留一个,设这些余数从小到大依次为Ax、Ay、Az(最多有3个),那么就认为Ax、Ay、Az是计算得到的更小的脉冲宽度时间。然后用前面采集到的时间t1,t2,t3,…,tm和Ay、Az,分别除以Ax。假设余数分别为B1,B2,B3,…,Bk,如果不存在余数符合在区间(5,Ax-5),那么Ax可以作为t1bit来计算波特率;如果存在Bx满足条件,那么Bx就可以作为t1bit来计算被测系统波特率(不需要继续求余,其依据不再赘述)。
3 实验结果及结论
由于波特率在±3%的偏移范围内仍然可以正确识别和通信,因此笔者判断不同波特率的位传输时间的考区间如表1所列。经过大量的实验与测试,这里也给出了不同波特率时采集到的位传输时间典型值与波特率的对应关系,采集到的其他样本值与典型值的最大偏差均小于1%,因此该方法实现波特率识别是可行、可靠的。
本文提出的码元宽度最大公约数法实现波特率识别,使用C5l系列单片机及汇编语言即可实现;其算法简单,程序空间需求小,速度快,效率高。在需要实时检测与数据处理的应用设计中,可以使用按键中断的方式启动波特率识别程序,识别完成后检测系统设置自身的波特率与待测系统一致后中断返回,进入主程序进行通信和数据处理。经过大量测试和实验,证明该方法实现波特率识别是可行且可靠的,可以在不同的应用领域推广,尤其在检测和测试领域有着很大的潜力。