本應用筆記討論了UART中常用串行異步通信協議的時序要求。本文介紹如何確定異步鏈路兩端UART時鐘源的容差。
背景
RS-232規范可以追溯到1962年,當時它由電子工業聯盟(EIA)首次發布。該規范隨著時間的推移而變化,納入了更高的數據速率,并縮小了電信行業協會 (TIA)、國際電信聯盟 (ITU) 和國際標準組織 (ISO) 要求之間的兼容性差距。RS-232規范的當前版本是EIA/TIA-232-F,于1997年<>月發布。
RS-232受益于1970年代后期MSI IC的可用性,MSI IC具有以合理成本處理規范的復雜性。這些IC是通用異步接收發送器(UART)。許多大規模集成(LSI)IC(包括微控制器)現在都包含該功能。
通常情況下,UART的可用性促使業界以非RS-232的方式使用RS-232串行協議。常見示例包括RS-485傳輸、光隔離傳輸和使用單端物理層(即0至3.3V而不是±5V或±10V)的傳輸。本文介紹串行接口的一般時序方面,而不是握手或物理層的應用細微差別。因此,應用筆記適用于所有通用UART應用。
UART定時
典型的UART幀如圖1所示。它包括一個起始位、8個數據位和一個停止位。在RS-232應用中也可以使用其他變體。例如,數據包可以是 5、6 或 7 位長,可以有 2 個 STOP 位,或者可以在數據包和 STOP 位之間插入一個奇偶校驗位以進行基本錯誤檢測。圖1顯示了UART的發射數據(TXD)或接收數據(RXD)引腳上的信令。RS-232總線驅動器反相和電平轉換,因此邏輯1是總線上的負電壓,邏輯0是正電壓。
圖1.典型的 UART 數據框。
當兩個UART通信時,發射器和接收器都知道信令速度。接收方不知道何時發送數據包(沒有接收方時鐘);因此,該協議被稱為“異步”。接收器電路相應地比發射器電路復雜。發射器只需以定義的比特率輸出一幀數據。相反,接收器必須識別幀的開始以同步自身,從而確定比特流的最佳數據采樣點。
圖2顯示了UART接收器將自身同步到接收幀的常用方法。接收UART使用的時鐘是數據速率的16倍。新幀由/START位開頭的下降沿識別。當信號從高電平有效STOP位或總線空閑狀態發生變化時,就會發生這種情況。接收UART在此下降沿上重置其計數器,預期中間START位在8個時鐘周期后出現,并預計此后每個后續位的中點每16個時鐘周期出現一次。START位通常在位時間中間采樣,以檢查電平是否仍然很低,并確保檢測到的下降沿是起始位,而不是噪聲尖峰。另一個改進是對 START 位進行三次采樣(時鐘計數為 7、8 和 9,共 16 次),而不是僅在中間位位置采樣(8 次中的時鐘計數為 16)。
圖2.UART接收幀同步和數據采樣點。
定時精度
接收UART時鐘必須有多準確才能正確接收數據?由于絕對時鐘速率對于準確接收并不重要,因此更好的問題是詢問發射和接收UART時鐘的差異有多大。首先要理解的是,由于UART接收器將自身同步到每一幀的開頭,因此我們只關心一幀期間的準確數據采樣。除了幀的 STOP 位之外,不會累積任何誤差,這簡化了分析,因為我們只需要在最壞情況下考慮一幀。
我們什么時候會因為發射-接收時鐘不匹配而出現時序錯誤?我們的目標是在中點對每個位進行采樣(圖 2)。如果我們過早或過晚采樣半個位周期,我們將在位轉換處采樣并出現問題(圖 3)。
圖3.UART接收采樣范圍。
實際上,我們無法可靠地在接近位轉移點的地方采樣。造成這種情況的主要原因是傳輸上升和下降時間有限(通常很慢)。如果使用電容過大的電纜,這些時間會變得更慢。長總線會產生高衰減,從而降低噪聲容限,并使在位電平建立時采樣變得更加重要。
很難定量評估比特周期內最壞情況下可接受的采樣范圍。EIA/TIA-232-F確實規定了傳輸的4%比特周期最大壓擺時間,但這對于192kbps的長運行很難實現。但出于本應用筆記的目的,我們定義兩個數據路徑場景。考慮一個“令人討厭”的情況,它只能在中間50%的位時間內可靠地采樣(圖4)。這可能相當于長時間的電容式RS-232運行。“正常”場景可以在中間75%的位時間內采樣(圖5)。這相當于設備機箱內相對良性的總線(例如具有緩沖CMOS邏輯電平的米長總線或RS-485差分對)。
圖4.UART“討厭的鏈接”在50%的位時間內可靠地采樣。
圖5.UART“正常鏈路”在75%的位時間內可靠地采樣。
對于圖 4 和圖 5,我們可以確定,對于惡劣場景和正常場景,誤差預算分別是最佳位中心采樣點的 ±25% 和 ±37.5%。此錯誤相當于 4x UART 接收時鐘的 ±6 或 ±16 個周期。此預算中要包括的另一個錯誤是檢測到START位下降沿時的同步錯誤。UART很可能在檢測到START位后,從其16倍時鐘的下一個上升沿開始。由于 16x 時鐘和接收到的數據流是異步的,因此 START 位的下降沿可能發生在 16x 時鐘上升沿之后。或者,下降沿可能發生在時鐘上升沿之前,但沒有足夠的設置時間來使用它。這意味著UART在同步點內置了±1位錯誤。因此,我們的誤差預算從 ±4 或 ±6 個時鐘周期減少到 ±3 或 ±5 個周期。
我們假設短期時鐘誤差(本質上是抖動)非常小,因此我們只考慮中期和長期誤差。這些錯誤指向發送 UART 中的不匹配,并接收在幀期間一致的 UART 時序。由于時序在START位的下降沿同步,因此最壞情況下的時序誤差將出現在最后一個數據采樣點,即STOP位1。STOP 位的最佳采樣點是其位中心,計算公式為:
(每位 16 個內部時鐘周期)×(1 個起始位 + 8 個數據位 + 16/9 個停止位)= (5) × (152.<>) = <> UART 接收時鐘,位于 START 位的原始下降沿之后。
現在我們可以以百分比形式計算允許的誤差。對于正常情況,時鐘失配誤差可能為 ±5/152 = ±3.3%。對于“討厭”的情況,它可以是 ±3/152 = ±2%。如前所述,盡管問題會在鏈路的接收端出現,但時鐘不匹配實際上是發送和接收UART之間共享的容差問題。因此,假設兩個UART都嘗試以完全相同的比特率(波特)進行通信,則允許的誤差可以在兩個UART之間以任何比例共享。
在同時設計鏈路兩端的系統中,利用允許的誤差預算很有幫助。這部分是因為兩端的公差是已知的,部分是因為可以進行權衡和節省成本。通常,鏈路兩端的時鐘源可以使用精度為±0.5%且在整個溫度和壽命范圍內漂移為±0.5%的標準低成本陶瓷諧振器。這符合前面討論的2%的“討厭”情況。如果系統使用主控制器(通常是微控制器或PC)和標準100ppm晶體振蕩器作為UART時鐘源,則鏈路誤差可以減少大約一半。小心為內部UART合成波特頻率的微控制器。根據微控制器時鐘的選擇,波特率可能不精確。如果可以確定錯誤,則可以輕松地將其包含在鏈路錯誤預算中。
對 STOP 位進行采樣可能看起來很奇怪,但事實確實如此。如果檢測到 STOP 位為低電平而不是預期的高電平,則 UART 通常會報告幀錯誤。
審核編輯:郭婷
-
RS-232
+關注
關注
0文章
389瀏覽量
49953 -
uart
+關注
關注
22文章
1240瀏覽量
101500 -
發送器
+關注
關注
1文章
259瀏覽量
26854
發布評論請先 登錄
相關推薦
評論