串行通信波特率的自動識別
發布時間:2008/6/24 0:00:00 訪問次數:838
摘要 對串行通信波特率自動識別的方法進行深入的研究和分析;創新性地提出在碼元寬度捕捉的基礎上,用求最大公約數的方法進行波特率的自動識別,實現了不對待測系統發送的數據進行特殊要求即實現其串行通信數據的有效識別。該方法具有一般性,可廣泛應用于多機通信、通信測試等不同的領域。
關鍵詞 串行通信波特率 自動識別 最大公約數法
對于異步串行通信,只有在通信雙方波特率相同時,才能實現數據的正確傳輸與接收;而一些系統總是希望能實現對各種波特率的兼容。通常的實現方法是,要求對方首先發出規定的字符或數據,系統收到該字符或數據后,計算對方的波特率.以適應對方的波特率進行工作,例如某些無線收發模塊、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計算波特率是可靠的;待測系統通信過程中未出現最窄正脈沖或最窄負脈沖,但系統通信過程中出現的脈沖寬度的最大公約數為最窄脈沖寬度,如待測系統處出現了2t1bit、3t1bit脈沖時間或者待測系統出現了4t1bit
摘要 對串行通信波特率自動識別的方法進行深入的研究和分析;創新性地提出在碼元寬度捕捉的基礎上,用求最大公約數的方法進行波特率的自動識別,實現了不對待測系統發送的數據進行特殊要求即實現其串行通信數據的有效識別。該方法具有一般性,可廣泛應用于多機通信、通信測試等不同的領域。
關鍵詞 串行通信波特率 自動識別 最大公約數法
對于異步串行通信,只有在通信雙方波特率相同時,才能實現數據的正確傳輸與接收;而一些系統總是希望能實現對各種波特率的兼容。通常的實現方法是,要求對方首先發出規定的字符或數據,系統收到該字符或數據后,計算對方的波特率.以適應對方的波特率進行工作,例如某些無線收發模塊、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計算波特率是可靠的;待測系統通信過程中未出現最窄正脈沖或最窄負脈沖,但系統通信過程中出現的脈沖寬度的最大公約數為最窄脈沖寬度,如待測系統處出現了2t1bit、3t1bit脈沖時間或者待測系統出現了4t1bit