<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 串行通信波特率的自動(dòng)識別

串行通信波特率的自動(dòng)識別

作者: 時(shí)間:2008-01-23 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要的方法進(jìn)行深入的研究和分析;創(chuàng )新性地提出在碼元寬度捕捉的基礎上,用求最大公約數的方法進(jìn)行率的,實(shí)現了不對待測系統發(fā)送的數據進(jìn)行特殊要求即實(shí)現其數據的有效識別。該方法具有一般性,可廣泛應用于多機、通信測試等不同的領(lǐng)域。
關(guān)鍵詞 通信 最大公約數法


對于異步串行通信,只有在通信雙方波特率相同時(shí),才能實(shí)現數據的正確傳輸與接收;而一些系統總是希望能實(shí)現對各種波特率的兼容。通常的實(shí)現方法是,要求對方首先發(fā)出規定的字符或數據,系統收到該字符或數據后,計算對方的波特率.以適應對方的波特率進(jìn)行工作,例如某些無(wú)線(xiàn)收發(fā)模塊、GSM通信模塊等。然而對于檢測、測試等領(lǐng)域,是不能要求被測系統發(fā)送某個(gè)固定的字符或數據的,那么對于這類(lèi)通信系統,如何實(shí)現波特率的可靠識別呢?本文創(chuàng )新性地提出了在碼元寬度捕捉的基礎上求最大公約數的方法。該方法不對待測系統發(fā)送的數據進(jìn)行特殊要求即可實(shí)現波特率識別,且保證了波特率識別的有效性和可靠性。下面對該方法進(jìn)行詳細說(shuō)明。


1 波特率自動(dòng)識別的傳統方法及基本原理

串行通信的數據是按位順序傳輸的,而異步串行通信由于沒(méi)有位定時(shí)時(shí)鐘,因此各個(gè)數據位之問(wèn)需要嚴格的定時(shí),才能保證正確的通信。也就是說(shuō),只有在通信雙方波特率相同時(shí),才能實(shí)現數據的正確傳輸與接收。傳統的波特率自動(dòng)識別的方法主要有兩種:
①標準波特率窮舉法。標準波特率窮舉法適用于主機側的波特率必須在有限的幾個(gè)固定數值之間變化,如300~19200之間的標準值;且從機側的工作振蕩頻率已知且穩定。從機啟動(dòng)通信程序后,逐個(gè)嘗試以不同的波特率接收主機發(fā)出的特定字符,直到能正確接收為止,因此,該方法的運用有一定的局限性。
②碼元寬度實(shí)時(shí)檢測法。該方法要求主機按照約定發(fā)送某一數據,從機通過(guò)單片機的定時(shí)器測量RXD引腳上輸入數據的碼元寬度,而后計算出待測系統通信的波特率。該方法目前應用比較廣泛。例如,某GSM模塊在設計時(shí)為了適應各種通信波特率,要求其通信的系統首先發(fā)送08H,之后發(fā)送指令,它就是依靠數據08H的碼元寬度計算出對方波特率的。

2 最大公約數法的原理及其實(shí)現
傳統的方法對待測系統發(fā)送的數據都有一定的限制或要求才能夠實(shí)現波特率的識別,但有些時(shí)候是無(wú)法約束待測系統首先發(fā)送特定字符的。這里,根據不同的應用需求,提出更為通用的波特率識別方法――最大公約數法。
為了便于說(shuō)明問(wèn)題,設主機的波特率為BPS,位傳輸時(shí)間為t1bit,測試系統測得的波特率為BAUD,位傳輸時(shí)間為txbit。以l位起始位、8位數據位、1位停止位、無(wú)奇偶校驗位為例,通信數據格式如圖l所示。除了起始位始終為0,停止位始終為1外,8位數據位的電平高低是由傳輸的數據決定的,要測得待測系統的波特率,根據波特率的實(shí)際意義BPS=l/t1bit,只要檢測出待測系統通信數據的位傳輸時(shí)間t1bit即可。

位傳輸時(shí)間t1bit對應的就是單位碼元寬度時(shí)間,只要知道單位碼元寬度時(shí)間,系統波特率就很容易計算出來(lái)了。由于不能要求待測系統按照規定發(fā)出特定的數據或字符,因此這里使用碼元寬度捕捉的方法來(lái)查找碼元寬度時(shí)間,要將單片機掛入待測系統的通信線(xiàn)路,采用對待測系統TXD(或RXD)引腳的高、低電平脈沖持續時(shí)間不斷采集的方式,來(lái)捕捉單位碼元寬度時(shí)間t1bit,顯然單片機直接采集到的單個(gè)高、低電平脈沖持續時(shí)間可能是nt1bit,其中1≤n≤9。如何從采集到的nt1bit找出t1bit,成為波特率識別的關(guān)鍵。
經(jīng)過(guò)對串行通信數據格式的特點(diǎn)進(jìn)行分析,本文提出了碼元寬度最大公約數法來(lái)從捕捉到的碼元寬度時(shí)間中計算單位碼元寬度時(shí)間,也就是位傳輸時(shí)間t1bit。具體實(shí)現方法如下:在待測系統正常工作后,將測試單片機掛入其通信線(xiàn)路;首先對正、負脈沖寬度都進(jìn)行計時(shí),分別采集n次,剔除正脈沖溢出的部分后,把所有不相等的有效脈沖寬度時(shí)間從小到大排序(△t5μs就認為兩個(gè)時(shí)間相等,這一點(diǎn)在后面將有說(shuō)明),假設依次為t1,t2,t3,…,tm(1≤m≤9);由于采集到的時(shí)間一定是t1bit的整數倍,計算出t1,t2,t3,…,tm的最大公約數為txbit,那么txbit就可以作為系統的最小脈沖寬度來(lái)計算波特率。這里計算得到的txbit可能等于t1bit,也可能不等于t1bit。下面分類(lèi)討論其作為位傳輸時(shí)間t1bit來(lái)計算波特率的可靠性及依據。
第1種情況,txbit=t1bit:待測系統通信過(guò)程中出現最窄正脈沖或最窄負脈沖,得到的txbit等于t1bit,那么使用txbit計算波特率是可靠的;待測系統通信過(guò)程中未出現最窄正脈沖或最窄負脈沖,但系統通信過(guò)程中出現的脈沖寬度的最大公約數為最窄脈沖寬度,如待測系統處出現了2t1bit、3t1bit脈沖時(shí)間或者待測系統出現了4t1bit,7t1bit、8t1bit脈沖時(shí)間,此時(shí)最大公約數txbit仍等于t1bit,這種情況下波特率是可以可靠識別的。
第2種情況,txbit≠t1bit,即txbit=N’t1bit(2≤N’≤9):若系統通信過(guò)程中出現的脈沖寬度時(shí)間都是N’t1bit的整數倍,以N’=2為例,待測系統通信過(guò)程中可能只出現類(lèi)似圖2(a)所示的數據,求得的最大公約數txbit=2t1bit,BAUD=BPS/2,實(shí)際測得的波特率是被測系統波特率的1/2。但我們注意到,測得的數據如圖2(b)所示,依次為FFH、FEH、FDH、FCH、FBH、FAH、F9H、F8H,盡管測得的波特率并不是被測系統波特率,但是并不會(huì )導致信息丟失,所有的數據都可以正確還原,因此這種情況下使用最大公約數法計算波特率也是完全可靠的。

求最大公約數需要注意的問(wèn)題:
①近似相等。前面提到,檢測到的串行通信某兩個(gè)脈沖寬度時(shí)間差△t5μs就認為兩個(gè)時(shí)間近似相等,這是由串行通信的特點(diǎn)決定的。假設采集系統設計指標要求系統能夠識別波特率在300~38 400 bps,那么計算可得位傳輸時(shí)間t1bit為26μs≤t1bit≤3400μs;而檢測到的脈沖時(shí)間可以表達為nt1bit,其中n為自然數日1≤n≤9,那么任意兩個(gè)脈沖寬度的時(shí)間差△t=(n-1)t1bit。顯然兩個(gè)脈沖的時(shí)間差△t,要么為t1bit的整數倍,要么為O,而26μs≤t1bit≤3400μs,因此如果檢測到待測系統的某兩個(gè)脈沖寬度時(shí)間差△t小于5μs,那么就可以認為兩個(gè)時(shí)間近似相等(實(shí)驗結果表明,任意兩個(gè)脈沖寬度時(shí)間差都小于等于2μs,之所以有時(shí)不等于0,是由串行通信時(shí)脈沖上升沿和下降沿時(shí)間及單片機啟動(dòng)計時(shí)與結束計時(shí)帶來(lái)的誤差)。
②近似等于0。位傳輸時(shí)間t1bit為26μs≤t1bit≤3400μs,所以檢測到的脈沖寬度一定≥26μs。如果檢測到待測系統的脈沖寬度小于5μs,就可以認為其近似等于O。實(shí)際上經(jīng)過(guò)大量的實(shí)驗,直接檢測到某脈沖寬度時(shí)間小于5μs的結果是不會(huì )出現的。其意義在于:在計算最大公約數時(shí),要用采集到的有效脈沖時(shí)間t1,t2,t3,…,tm分別除以最小時(shí)間t1,設余數由小到大依次為A2,A3,…,Am,此時(shí)除了與t1近似相等的余數外,還有一部分余數小于5μs,那么此時(shí)就認為余數近似等于0,剩下的部分余數既不近似等于t1也不近似等于O。近似相等的余數只保留一個(gè),設這些余數從小到大依次為Ax、Ay、Az(最多有3個(gè)),那么就認為Ax、Ay、Az是計算得到的更小的脈沖寬度時(shí)間。然后用前面采集到的時(shí)間t1,t2,t3,…,tm和Ay、Az,分別除以Ax。假設余數分別為B1,B2,B3,…,Bk,如果不存在余數符合在區間(5,Ax-5),那么Ax可以作為t1bit來(lái)計算波特率;如果存在Bx滿(mǎn)足條件,那么Bx就可以作為t1bit來(lái)計算被測系統波特率(不需要繼續求余,其依據不再贅述)。


3 實(shí)驗結果及結論
由于波特率在3%的偏移范圍內仍然可以正確識別和通信,因此筆者判斷不同波特率的位傳輸時(shí)間的參考區間如表1所列。經(jīng)過(guò)大量的實(shí)驗與測試,這里也給出了不同波特率時(shí)采集到的位傳輸時(shí)間典型值與波特率的對應關(guān)系,采集到的其他樣本值與典型值的最大偏差均小于1%,因此該方法實(shí)現波特率識別是可行、可靠的。

本文提出的碼元寬度最大公約數法實(shí)現波特率識別,使用C5l系列單片機及匯編語(yǔ)言即可實(shí)現;其算法簡(jiǎn)單,程序空間需求小,速度快,效率高。在需要實(shí)時(shí)檢測與數據處理的應用設計中,可以使用按鍵中斷的方式啟動(dòng)波特率識別程序,識別完成后檢測系統設置自身的波特率與待測系統一致后中斷返回,進(jìn)入主程序進(jìn)行通信和數據處理。經(jīng)過(guò)大量測試和實(shí)驗,證明該方法實(shí)現波特率識別是可行且可靠的,可以在不同的應用領(lǐng)域推廣,尤其在檢測和測試領(lǐng)域有著(zhù)很大的潛力。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>