电子知识大全:串行通信波特率的自动识别
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次,剔除正脉冲溢出的部分后,把所有不相等的有效脉冲宽度时间从小到大排序(△t5μ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计算波特率是可靠的;待测系统通信过程中未出现最窄正脉冲或最窄负脉冲,但系统通信过程中出现的脉冲宽度的最大公约数为最窄脉冲宽度,如待测系统处出现了2t1bit、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,尽管测得的波特率并不是被测系统波特率,但是并不会导致信息丢失,所有的数据都可以正确还原,因此这种情况下使用最大公约数法计算波特率也是完全可靠的。
- 基于Virtex-6 FPGA的三种串行通信协议测试及对比 (二)(12-06)
- 基于VK3366 的DSP 异步串行通信的设计(02-16)
- 基于DSP串行通信在变频调速系统中的应用(12-13)
- 远程电源管理系统设计(04-24)
- 基于串行通信的压电陶瓷驱动器的设计(01-22)
- 基于脉冲变压器的总线式RS485隔离器(12-23)