調試利器——串口

硬十 發佈 2024-04-28T23:42:02.282155+00:00

首先,串口對每一個做硬體和嵌入式軟體的人來說,就是一個必備的工具,調試一個帶MCU或者CPU的系統。

一、串口的歷史

首先,串口對每一個做硬體和嵌入式軟體的人來說,就是一個必備的工具,調試一個帶MCU或者CPU的系統。我們在調試的過程中,一般第一件事情:GPIO點燈,第二件事就是打通串口。

串口是一種非常通用的設備接口,是儀器儀表設備常用的通信接口,常用於遠程採集設備數據或者實現遠程控制。串口的開發也比較簡單,是很多工程師最喜歡的接口之一。

在完成GPIO點燈之後,一般我們就希望能夠實現串口列印的功能,便於我們將一些寄存器信息列印出來便於調試。

由於我個人的特殊經歷,對於我來說,串口這東西,仔細寫起來,可以寫一本書!應該不少於200頁。

2008年我剛進華為工作時,碰到了一個特殊的歷史時期,嵌入式領域群雄逐鹿。

1、Intel、AMD高調宣稱X86系統進入嵌入式領域,要占領PowerPC的市場。(後來Intel也做到了,通用伺服器占領了幾乎所有電信核心側的設備——刀片伺服器、機架伺服器)。

2、當時,MIPS、ARM、PowerPC還難分伯仲,不過多核ARM不成熟,無法在電信領域廣泛應用。MIPS由於其優異的性價比和高性能展露頭角,慢慢由於其較差的質量表現而偃旗息鼓。

3、PowerPC,隨著來著其他處理器的壓力,也開始推出多核處理器。

我當時的工作是參與X86處理器作為嵌入式的電路開發。當時碰到一個問題:傳統X86作為PC機已經演進得非常成熟的架構。PC的硬體結構與嵌入式SoC有很大的區別。

CPU下面是北橋負責高速外設、北橋的南面(下面)是南橋負責低速接口外設、然後還有一個SIO負責更低速的外設。

SIO全稱叫Super I/O。

超級輸入輸出晶片(SIO)一般位於主板左下方或者左上方。主要使用的晶片有Winbond、ITE,它為主板上的標準I/O接口提供控制處理功能。這裡所說的「超級」是指它集成了PS/2鍵盤、PS/2滑鼠、串口COM、並口LPT接口等處理功能,而這些接口都是計算機中的慢速I/O設備。它們全部位於主板後部右邊。它的主要功能包括負責處理從鍵盤、滑鼠、串行接口等設備傳輸來的串行數據,將它們轉換成為並行數據,同時也負責並行接口、軟碟機接口數據的傳輸與處理。SuperIO是通過一個類似於精簡的PCI總線,叫做LPC總線與南橋進行連接的。

如此複雜的硬體結構,也是因為Intel強大的發貨量,形成自有體系和標準。

所以在傳統的PC機的主板上帶一個RS232串口的,都是通過SuperIO實現的。X86上也是通過固定的地址去訪問

而我們熟悉的ARM、不管是Cortex-M、還是Cortex-A都是一顆MCU、CPU都帶了串口——UART;

從iBox選擇的STM32F103的MCU的結構框圖上面,我們可以看到有一堆UART、USART。

然而,在我當時面對的嵌入式X86的系統的設計需求,不需要並口、PS2、硬體監控、FDC、

H/W Monitor:一個應用程式讀出所有計算機訪問硬體傳感器的測量值。

FDC:提供了一個主處理器和軟碟機之間的接口(軟碟機——看懂的人暴露年齡了)

Parallel port:並行埠(SPP),雙向並行埠(BPP),增強型並行埠(EPP),擴展功能並行埠(ECP)四種模式。通過DIR可以控制它的輸入/輸出模式

認識上圖的人再次暴露年齡

KBC:電路提供的功能包括一個鍵盤和一個PS2滑鼠。控制器從鍵盤和滑鼠接受串行數據,檢查校驗後將這些數據輸出到其輸出緩衝區。從它的讀寫命令中可以了解一些基本設置。

UART:終於說到我們的本文的主角UART、即串口了。在老式的桌上型電腦或者筆記本上,其實都會有RS232電平標準的UART:

關於串口的各種電平標準,我們前期有發布過相關的內容:

UART、RS-232、RS-422、RS-485

SuperIO的UART輸出的一般也是TTL電平,還需要接到RS232晶片,再接到DB9接口

X86系統的地址的尋址空間還有點複雜:除了內存空間(Memory)、還有IO空間。詳細內容點擊:

處理器系列(7)——尋址空間

IO空間是

在X86開發時,串口這些低速的外設是用IO空間進行訪問和讀寫的:

由UARTDevice Configuration Registers可知,UART1~UART4的基址分別是03F8H,02F8H,03E8H,02E8H。

GPIO:通用管腳

ACPI:ACPI是控制電腦電源的系統

這些對於傳統的由PowerPC實現的電信嵌入式系統來說,除了串口,其他功能不是需要的;同時,原來的一些NorFlash、寄存器、傳感器 數據,需要通過MPI接口進行訪問,而這些都是SuperIO晶片不能實現的。

另外由於SuperIO的功能多,所以尺寸大,管腳也多。

所以在當時的設計需求裡面,使用一個SuperIO並不合適。所以選擇一個CPLD實現LPC接口控制UART接口。

由於我是從事過這麼一個工作,所以對UART的工作過程特別熟悉。而且,我們一開始按照自己的想法,自定義了很多寄存器,並且地址是按照自己想法去設計的,結果:商業軟體windows、商用linux無法直接識別到串口。後來又改回基址:03F8H,02F8H,03E8H,02E8H這幾個地址。

二、串口的工作原理

1、我們用打電話為例,來說明串口的工作原理:

首先打電話,說話是串行,即:一個字一個字說。

發送方對接收方發送信息,是串行的:

因為對方是一個字發音、一個字發音聽到的,所以每個字是按照時間先後順序發給對方的。

如果我們用GPIO去傳遞信號,則我們只能傳遞「高低電平」,信號要麼為「高電平」、要麼為「低電平」。那麼這個管腳傳遞信息,只有兩個狀態,跟烽火台一樣,要麼「有」、要麼「沒」。

所以當我們用GPIO進行點燈的時候,表示狀態的時候,一般就是兩個狀態,「亮」、「滅」。

但是兩個狀態、根本沒法滿足我們傳遞信息的需求。於是我們希望傳遞,一串「亮」、「滅」,來傳遞更複雜的信息,跟電報、或者海軍信號燈的原理是一樣的。

2、串行的數據,如何轉並行?

如同打電話一樣,我們要聽完一句話,接收所有的字、然後組詞、組成句子,接收完整的一句話,之後人腦去理解他的語意。

學過《數字電路》的朋友,應該還記得「移位寄存器」吧?

細節,我估計你們早忘光了,甚至當時完全就沒學會。。。。後來工作,好像也沒用得到。(現在做硬體好像就是原理圖PCB畫對了就好了,都不用管電路原理。)

大致的意思是:

初始狀態: 設A3A2A1A0= 1011

然後Q3的輸出,是在每個時鐘節拍,按照這個先後順序,把A3A2A1A0串行的輸出出去。

其實利用的就是D觸發器的特性。

如果我們使用8位的移位寄存器,就可以利用8個clk的時間,發一組8bit的數據通過一跟導線,傳輸出去。

接收也是一樣的,不過過程相反:

3、喂!XXXX 拜拜

打電話的時候,我們一般會先說:「喂!」。

這是一個信號,通知對方:「我要開始說話了」。

因為打電話的時候,我們彼此看不到對方,不知道對方的表情、眼神、動作、是否聽你說話。所以我們通過一個信息,通知對方,啟動通信。

在串口的通信過程中,一樣的,我們需要通知對方:我要開始通信了。

其實很多接口原理都一樣:首先要有個常態,然後再發一個不同的狀態,告訴對方,開始了!

對於UART來說,首先要有個常態——高電平(至於為什麼是高電平、各種說法,個人覺得應該沒什麼理由,反過來也不影響)

那麼,我們就需要用一個信息告訴接收方,我要傳數據了。最簡單的方法就是,突然讓電平拉低,這樣,能夠檢測一個下降沿,或者能夠檢測到一個低電平,則,我們就可以認為,要開始了。

UART就選擇了這麼一個簡單粗暴的方法:

上圖,中Start,那個低電平,實際就是一個表示開始的信號。我們稱之為:起始位。

同樣,打電話的時候,我們都需要說:「再見」。

我跟我爸打電話的時候,我爸一般不說再見、拜拜之類的結束語,經常導致:我話還沒說完,他就掛電話了。導致我要重新撥號過去。

這個「再見」,與平時,我們離開時說的「再見」,還多一層意思,表達:「通信可以停止了!」

所以,UART也需要這麼一個信息,通知對方,我說完了,你可以處理了。

這個就是「停止位」,方式也很簡單:「高電平」!

如上圖中的STOP。

4、波特率——語速

因為,UART中的A表示的是異步:

(Universal Asynchronous Receiver/Transmitter)

所謂異步,也就是說,我給你發信號的時候,我不給你發時鐘;

接收方,需要:

1、時鐘與發送方時鐘誤差不能太大。

2、雙方的分析數據的時鐘需要保持基本一致。

例如:

發送方發出9600波特率信號,但是接收方的波特率設置為19200。起始位沒有問題,因為能夠接收到那個下降沿,低電平。所以,會去解析數據,但是會出現誤碼。我們在信號上分析一下就知道了:

白色的數字是9600波特率發出來的本意:01000001

結果,接收方波特率19200,是9600的兩倍,採樣的速率也是2倍,解析出來的數據:00011000

這樣就造成「錯誤」。

這也是為什麼,我們串口對接時,收發雙方需要統一「波特率」的原因。

三、串口的電平標準

1、TTL

一般板內或者是,現在調試用的串口工具,直接使用TTL電平標準的UART,簡單易用,成本低。缺點的是不能遠距離傳輸。

2、RS-232標準

RS-232是美國電子工業協會EIA(Electronic Industry Association)制定的一種串行物理接口標準。RS是英文「推薦標準」的縮寫,232為標識號。RS-232是對電氣特性以及物理特性的規定,只作用於數據的傳輸通路上,它並不內含對數據的處理方式。需要說明一下,很多人經常把RS-232、RS-422、RS-485 誤稱為通訊協議,這是很不應該的,其實它們僅是關於UART通訊的一個機械和電氣接口標準(頂多是網絡協議中的物理層面)。

該標準規定採用一個25 個腳的DB-25 連接器,對連接器的每個引腳的信號內容加以規定,還對各種信號的電平加以規定。後來IBM的PC 機將RS-232 簡化成了DB-9 連接器,從而成為今天的事實標準。而工業控制的RS-232 口一般只使用RXD(2)、TXD(3)、GND(5) 三條線。

早期由於PC都帶有RS-232接口,所以我們需要使用UART時,都選擇RS-232。但是現在個人電腦,不光是筆記本,包括台式機都不再帶有RS-232的接口,大家看到電腦主板上面沒有DB9的接口。所以現在開發板都選擇TTL的UART,或者直接UART轉USB做在開發板上。

嵌入式裡面說的串口,一般是指UART口, 但是我們經常搞不清楚它和COM口的區別, 以及RS232, TTL等關係, 實際上UART,COM指的物理接口形式(硬體), 而TTL、RS-232是指的電平標準(電信號).

UART有4個pin(VCC, GND, RX, TX), 用的TTL電平, 低電平為0(0V),高電平為1(3.3V或以上)。

3、RS-485/ RS-422標準

RS-232接口可以實現點對點的通信方式,但這種方式不能實現聯網功能。於是,為了解決這個問題,一個新的標準RS-485產生了。RS-485的數據信號採用差分傳輸方式,也稱作平衡傳輸,它使用一對雙絞線,將其中一線定義為A,另一線定義為B。

通常情況下,發送驅動器A、B之間的正電平在+2~+6V,是一個邏輯狀態,負電平在-2~6V,是另一個邏輯狀態。另有一個信號地C,在RS-485中還有一「使能」端,而在RS-422中這是可用可不用的。

RS-422 的電氣性能與RS-485完全一樣。主要的區別在於:RS-422 有4 根信號線:兩根發送、兩根接收。由於RS-422 的收與發是分開的所以可以同時收和發(全雙工),也正因為全雙工要求收發要有單獨的信道,所以RS-422適用於兩個站之間通信,星型網、環網,不可用於總線網;RS-485 只有2 根信號線,所以只能工作在半雙工模式,常用於總線網。

1. RS-485的電氣特性:邏輯「1」以兩線間的電壓差為+(2~6)V表示;邏輯「0」以兩線間的電壓差為-(2~6)V表示。接口信號電平比RS-232-C降低了,就不易損壞接口電路的晶片,且該電平與TTL電平兼容,可方便與TTL 電路連接。

2. RS-485的數據最高傳輸速率為10Mbps 。

3. RS-485接口是採用平衡驅動器和差分接收器的組合,抗共模干擾能力增強,即抗噪聲干擾性好。

4. RS-485最大的通信距離約為1219M,最大傳輸速率為10Mb/S,傳輸速率與傳輸距離成反比,在100Kb/S的傳輸速率下,才可以達到最大的通信距離,如果需傳輸更長的距離,需要加485中繼器。RS-485總線一般最大支持32個節點,如果使用特製的485晶片,可以達到128個或者256個節點,最大的可以支持到400個節點。

RS-423 非平衡串行通信接口

結構、信號電平、傳輸距離、傳輸速率、接口晶片

RS-422 平衡型串行通信接口

結構、信號電平、接口晶片,MC3486、MC3487、SN75154,SN75155

傳輸速率、傳輸距離

RS-485 串行通信總線

結構、信號電平、接口晶片 MAX485

傳輸速率、傳輸距離,應用實例

由於RS-232 接口標準出現較早,難免有不足之處,主要有以下四點:

(1) 接口的信號電平值較高,易損壞接口電路晶片,又因為232電平與TTL電平不兼容故需使用電平轉換電路方能與TTL電路連接;

(2) 傳輸速率較低,在異步傳輸時,波特率為20Kbps。現在由於採用了新的UART晶片,波特率達到115.2Kbps(1.832M/16);

(3) 接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾,所以抗噪聲干擾性弱;

(4) 傳輸距離有限,最大傳輸距離標準值為50 米,實際上也只能用在15 米左右;

(5) RS-232 只容許一對一的通信,沒有考慮構成串行總線。(這點很重要,在很多控制場景,是一控多,如果主設備都需要跟從設備點對點通信,那現場布線成蜘蛛網了)

非平衡型串行通信接口RS-423,RS-449

平衡型串行通信接口RS-422

RS-422(EIA RS-422-A Standard)是Apple的Macintosh計算機的串口連接標準。RS-422使用差分信號,RS-232使用非平衡參考地的信號。差分傳輸使用兩根線發送和接收信號,對比RS-232,它能更好的抗噪聲和有更遠的傳輸距離。在工業環境中更好的抗噪性和更遠的傳輸距離是一個很大的優點。

4、RS-232與RS-485對比

1、抗干擾性:RS485 接口是採用平衡驅動器和差分接收器的組合,抗噪聲干擾性好。RS232 接口使用一根信號線和一根信號返回線而構成共地的傳輸形式,這種共地傳輸容易產生共模干擾。

2、傳輸距離:RS485 接口的最大傳輸距離標準值為 1200 米(9600bps 時),實際上可達 3000 米。RS232 傳輸距離有限,最大傳輸距離標準值為 50 米,實際上也只能用在 15 米左右。

3、通信能力:RS-485 接口在總線上是允許連接多達128個收發器,用戶可以利用單一的 RS-485 接口方便地建立起設備網絡。RS-232隻允許一對一通信。

4、傳輸速率:RS-232傳輸速率較低,在異步傳輸時,波特率為 20Kbps。RS-485 的數據最高傳輸速率為 10Mbps 。

5、信號線:RS485 接口組成的半雙工網絡,一般只需二根信號線。RS-232 口一般只使用 RXD、TXD、GND 三條線 。

6、電氣電平值:RS-485的邏輯"1"以兩線間的電壓差為+(2-6) V 表示;邏輯"0"以兩線間的電壓差為-(2-6)V 表 示 。在 RS-232-C 中任何一條信號線的電壓均為負邏輯關係。即:邏輯"1",-5- -15V;邏輯"0 " +5- +15V 。

5、RS-422與RS-485對比

RS-485的電氣性能與RS-422完全一樣。主要的區別在於:

1、RS-422 有4 根信號線:兩根發送(Y、Z)、兩根接收(A、B)。由於RS-422 的收與發是分開的所以可以同時收和發(全雙工)。

2、RS-485 只有兩根數據線:發送和接收都是A 和B。由於RS-485 的收與發是共用兩根線,所以不能同時收和發(半雙工)。

RS-485標準採用平衡式發送,差分式接收的數據收發器來驅動總線,具體規格要求:

接收器的輸入電阻RIN≥12kΩ

驅動器能輸出±7V的共模電壓

輸入端的電容≤50pF

在節點數為32個,配置了120Ω的終端電阻的情況下,驅動器至少還能輸出電壓1.5V(終端電阻的大小與所用雙絞線的參數有關)

接收器的輸入靈敏度為200mV(即(V+)-(V-)≥0.2V,表示信號「0」;(V+)-(V-)≤-0.2V,表示信號「1」)

因為RS-485的遠距離、多節點(32個)以及傳輸線成本低的特性,使得EIA RS-485成為工業應用中數據傳輸的首選標準。

(1) RS-485 的電氣特性:發送端:邏輯「0」以兩線間的電壓差+(2 ~6)V 表示;邏輯「1」以兩線間的電壓差-(2 ~6)V 表示。接收端:A 比B 高200mV 以上即認為是邏輯「0」,A 比B 低200mV 以上即認為是邏輯「1」;

(2) RS-485 的數據最高傳輸速率為10Mbps。但是由於RS-485 常常要與PC 機的RS-232 口通信,所以實際上一般最高115.2Kbps。又由於太高的速率會使RS-485 傳輸距離減小,所以往往為9600bps 左右或以下;

(3) RS-485 接口是採用平衡驅動器和差分接收器的組合,抗噪聲干擾性好;

(4) RS-485 接口的最大傳輸距離標準為1200 米(9600bps 時),實際上可達3000米,RS-485 接口在總線上是容許連接多達128 個收發器、即RS-485 具有多機通信功能,這樣用戶可以利用單一的RS-485 接口方便的建立起網絡。因為RS-485 接口組成的半雙工網絡,一般只需二根信號線,所以RS-485 接口均採用雙絞線傳輸。RS-485 的國際標準並沒有規定RS-485 的接口連接器標準、所以採用接線端子或者DB-9、DB-25 等連接器都可以。

在使用RS-485 接口時,對於特定的傳輸線徑,從發生器到負載其數據信號傳輸所容許的最大電纜長度是數據信號速率的函數,這個長度數據主要是受信號失真及噪聲等影響所限制。最大電纜長度與信號速率的關係曲線是使用24AWG 銅芯雙絞電話電纜(線徑為0.51mm),線間旁路電容為52.5PF/M,終端負載電阻為100 歐時所得出的。(引自GB11014-89 附錄A)。當數據信號速率降低到90Kbit/S 以下時,假定最大容許的信號損失為6dBV 時,則電纜長度被限制在1200m。實際上,在使用時是完全可以取得比它大的電纜長度。當使用不同線徑的電纜,則取得的最大電纜長度是不相同的。例如:當數據信號速率為600Kbit/S 時,採用24AWG 電纜,最大電纜長度是200m,若採用19AWG電纜(線徑為0.91mm)則電纜長度將可以大於200m;若採用28AWG 電纜(線徑為0.32mm),則電纜長度只能小於200m。

RS-485的遠距離通信建議採用屏蔽電纜,並且將屏蔽層作為地線。

6、影響RS-485總線通訊速度和通信可靠性的三個因素

在通信電纜中的信號反射

在通信過程中,有兩種信號因素導致信號反射:阻抗不連續和阻抗不匹配。

阻抗不連續,信號在傳輸線末端突然遇到電纜阻抗很小甚至沒有,信號在這個地方就會引起反射,如圖所示。這種信號反射的原理,與光從一種媒質進入另一種媒質要引起反射是相似的。消除這種反射的方法,就必須在電纜的末端跨接一個與電纜的特性阻抗同樣大小的終端電阻,使電纜的阻抗連續。由於信號在電纜上的傳輸是雙向的,因此,在通訊電纜的另一端可跨接一個同樣大小的終端電阻。

從理論上分析,在傳輸電纜的末端只要跨接了與電纜特性阻抗相匹配的終端電阻,就再也不會出現信號反射現象。但是,在實現應用中,由於傳輸電纜的特性阻抗與通訊波特率等應用環境有關,特性阻抗不可能與終端電阻完全相等,因此或多或少的信號反射還會存在。

引起信號反射的另一個原因是數據收發器與傳輸電纜之間的阻抗不匹配。這種原因引起的反射,主要表現在通訊線路處在空閒方式時,整個網絡數據混亂。

信號反射對數據傳輸的影響,歸根結底是因為反射信號觸發了接收器輸入端的比較器,使接收器收到了錯誤的信號,導致CRC校驗錯誤或整個數據幀錯誤。

在信號分析,衡量反射信號強度的參數是RAF(Refection AttenuationFactor反射衰減因子)。它的計算公式如式(1)。

RAF=20lg(Vref/Vinc) (1)

式中:Vref—反射信號的電壓大小;Vinc—在電纜與收發器或終端電阻連接點的入射信號的電壓大小。

具體的測量方法如圖3所示。例如,由實驗測得2.5MHz的入射信號正弦波的峰-峰值為+5V,反射信號的峰-峰值為+0.297V,則該通訊電纜在2.5MHz的通訊速率時,它的反射衰減因子為:

RAF=20lg(0.297/2.5)=-24.52dB

要減弱反射信號對通訊線路的影響,通常採用噪聲抑制和加偏置電阻的方法。在實際應用中,對於比較小的反射信號,為簡單方便,經常採用加偏置電阻的方法。在通訊線路中,如何通過加偏置電阻提高通訊可靠性的原理。

在通訊電纜中的信號衰減

第二個影響信號傳輸的因素是信號在電纜的傳輸過程中衰減。一條傳輸電纜可以把它看成由分布電容、分布電感和電阻聯合組成的等效電路,如圖所示。

電纜的分布電容C主要是由雙絞線的兩條平行導線產生。導線的電阻在這裡對信號的影響很小,可以忽略不計。信號的損失主要是由於電纜的分布電容和分布電感組成的LC低通濾波器。PROFIBUS用的LAN標準型二芯電纜(西門子為DP總線選用的標準電纜),在不同波特率時的衰減係數如表1所示。

電纜的衰減係數

在通訊電纜中的純阻負載

影響通訊性能的第三個因素是純阻性負載(也叫直流負載)的大小。這裡指的純阻性負載主要由終端電阻、偏置電阻和RS-485收發器三者構成。

在敘述EIA RS-485規範時曾提到過RS-485驅動器在帶了32個節點,配置了150Ω終端電阻的情況下,至少能輸出1.5V的差分電壓。一個接收器的輸入電阻為12kΩ,整個網絡的等效電路如圖5所示。按這樣計算,RS-485驅動器的負載能力為:

RL=32個輸入電阻並聯2個終端電阻=((12000/32)×(150/2))/(12000/32)+(150/2))≈51.7Ω

現在比較常用的RS-485驅動器有MAX485、DS3695、MAX1488/1489以及和利時公司使用的SN75176A/D等,其中有的RS-485驅動器負載能力可以達到20Ω。在不考慮其它諸多因素的情況下,按照驅動能力和負載的關係計算,一個驅動器可帶節點的最大數量將遠遠大於32個。

在通訊波特率比較高的時候,在線路上偏置電阻是很有必要的。偏置電阻的連接方法如圖6。它的作用是在線路進入空閒狀態後,把總線上沒有數據時(空閒方式)的電平拉離0電平,如圖7。這樣一來,即使線路中出現了比較小的反射信號或干擾,掛接在總線上的數據接收器也不會由於這些信號的到來而產生誤動作。

通過下面後例子了,可以計算出偏置電阻的大小:

終端電阻Rt1=Rr2=120Ω;

假設反射信號最大的峰-峰值Vref≤0.3Vp-p,則負半周的電壓Vref≤0.15V;終端的電阻上由反射信號引起的反射電流Iref≤0.15/(120||120)=2.5mA。一般RS-485收發器(包括SN75176)的滯後電壓值(hysteresis value)為50mV,即:

(Ibias-Iref)×(Rt1||Rt2)≥50mV

於是可以計算出偏置電阻產生的偏置電流Ibias≥3.33mA

+5V=Ibias(R上拉+R下拉+(Rt1||Rt2)) (2)

通過式2可以計算出R上拉=R下拉=720Ω

在實際應用中,RS-485總線加偏置電阻有兩種方法:

(1)把偏置電阻平衡分配給總線上的每一個收發器。這種方法給掛接在RS-485總線上的每一個收發器加了偏置電阻,給每一個收發器都加了一個偏置電壓。

(2)在一段總線上只用一對偏置電阻。這種方法對總線上存在大的反射信號或干擾信號比較有效。值得注意的是偏置電阻的加入,增加了總線的負載。

7、RS-485總線的負載能力和通訊電纜長度之間的關係

在設計RS-485總線組成的網絡配置(總線長度和帶負載個數)時,應該考慮到三個參數:純阻性負載、信號衰減和噪聲容限。純阻性負載、信號衰減這兩個參數,在前面已經討論過,現在要討論的是噪聲容限(Noise Margin)。RS-485總線接收器的噪聲容限至少應該大於200mV。前面的論述者是在假設噪聲容限為0的情況下進行的。在實際應用中,為了提高總線的抗干擾能力,總希望系統的噪聲容限比EIA RS-485標準中規定的好一些。從下面的公式能看出總線帶負載的多少和通訊電纜長度之間的關係:

Vend=0.8(Vdriver-Vloss-Vnoise-Vbias)(3)

其中:Vend為總線末端的信號電壓,在標準測定時規定為0.2V;Vdriver為驅動器的輸出電壓(與負載數有關。負載數在5~35個之間,Vdriver=2.4V;當負載數小於5,Vdriver=2.5V;當負載數大於35,Vdriver≤2.3V);Vloss為信號在總線中的傳輸過程中的損耗(與通訊電纜的規格和長度有關),由表1提供的標準電纜的衰減係數,根據公式衰減係數b=20lg(Vout/Vin)可以計算出Vloss=Vin-Vout=0.6V(註:通訊波特率為9.6kbps,電纜長度1km,如果特率增加,Vloss會相應增大);Vnoise為噪聲容限,在標準測定時規定為0.1V;Vbias是由偏置電阻提供的偏置電壓(典型值為0.4V)。

式(3)中乘以0.8是為了使通信電纜不進入滿載狀態。從式(3)可以看出,Vdriver的大小和總線上帶負載數的多少成反比,Vloss的大小和總線長度成反比,其他幾個參數只和用的驅動器類型有關。因此,在選定了驅動器的RS-495總線上,在通信波特率一定的情況下,帶負載數的多少,與信號能傳輸的最大距離是直接相關的。具體關係是:在總線允許的範圍內,帶負載數越多,信號能傳輸的距離就越小;帶負載數據少,信號能傳輸的距離就越遠。

8、分布電容對RS-485總線傳輸性能的影響

電纜的分布電容主是由雙絞線的兩條平行導線產生。另外,導線和地之間也存在分布電容,雖然很小,但在分析時也不能忽視。分布電容對總線傳輸性能的影響,主要是因為總線上傳輸的是基波信號,信號的表達方式只有「1」和「0」。在特殊的字節中,例如0x01,信號「0」使得分布電容有足夠的充電時間,而信號「1」到來時,由於分布電容中的電荷,來不及放電,(Vin+)—(Vin-)-還大於200mV,結果使接收誤認為是「0」,而最終導致CRC校驗錯誤,整個數據幀傳輸錯誤。具體過程如圖所示。

由於總線上分布影響,導致數據傳輸錯誤,從而使整個網絡性能降低。解決這個問題有兩種方法:

(1)降低數據傳輸的波特率;

(2)使用分布電容小的電纜,提高傳輸線的質量。

僅僅用一對雙絞線將各個接口的A、B端連接起來,而不對RS-485通信鏈路的信號接地,在某些情況下也可以工作,但給系統埋下了隱患。RS-485接口採用差分方式傳輸信號並不需要對於某個參照點來檢測信號系統,只需檢測兩線之間的電位差就可以了。但應該注意的是收發器只有在共模電壓不超出一定範圍(-7V至+12V)的條件下才能正常工作。當共模電壓超出此範圍,就會影響通信的可靠直至損壞接口。如圖1所示,當發送器A向接收器B發送數據時,發送器A的輸出共模電壓為VOS,由於兩個系統具有各自獨立的接地系統存在著地電位差VGPD,那麼接收器輸入端的共模電壓就會達到VCM=VOS+VGPD。RS-485標準規定VOS≤3V,但VGPD可能會有很大幅度(十幾伏甚至數十伏),並可能伴有強幹擾信號致使接收器共模輸入VCM超出正常圍,在信號線上產生干擾電流影響正常通信,或損壞設備。

四、串口線的傳輸距離

串行接口 (Serial Interface) 是指數據一位一位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用於遠距離通信,但傳送速度較慢。一條信息的各位數據被逐位按順序傳送的通訊方式稱為串行通訊。串行通訊的特點是:數據位的傳送,按位順序進行,最少只需一根傳輸線即可完成;成本低但傳送速度慢。串行通訊的距離可以從幾米到幾千米;根據信息的傳送方向,串行通訊可以進一步分為單工、半雙工和全雙工三種。

總述:

串口通信的兩種最基本的方式:同步串行通信方式和異步串行通信方式。

同步串行是指SPI(Serial Peripheral interface)的縮寫,顧名思義就是串行外圍設備接口。SPI總線系統是一種同步串行外設接口,它可以使MCU與各種外圍設備以串行方式進行通信以交換信息,TRM450是SPI接口。

異步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用異步接收/發送。UART是一個並行輸入成為串行輸出的晶片,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。TTL電平是3.3V的,而RS232是負邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。

串行接口按電氣標準及協議來分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422與RS-485標準只對接口的電氣特性做出規定,不涉及接插件、電纜或協議。

RS-232:

也稱標準串口,最常用的一種串行通訊接口。它是在1970年由美國電子工業協會(EIA)聯合貝爾系統、數據機廠家及計算機終端生產廠家共同制定的用於串行通訊的標準。它的全名是「數據終端設備(DTE)和數據通訊設備(DCE)之間串行二進位數據交換接口技術標準」。傳統的RS-232-C接口標準有22根線,採用標準25芯D型插頭座(DB25),後來使用簡化為9芯D型插座(DB9),現在應用中25芯插頭座已很少採用。

RS-232採取不平衡傳輸方式,即所謂單端通訊。由於其發送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點對點(即只用一對收、發設備)通訊而設計的,其驅動器負載為3~7kΩ。所以RS-232適合本地設備之間的通信。

pt; background:rgb(255,255,255); mso-shading:rgb(255,255,255); " >、RS485等。RS-232-C、RS-422與RS-485標準只對接口的電氣特性做出規定,不涉及接插件、電纜或協議。

RS-422

標準全稱是「平衡電壓數字接口電路的電氣特性」,它定義了接口電路的特性。典型的RS-422是四線接口。實際上還有一根信號地線,共5根線。其DB9連接器引腳定義。由於接收器採用高輸入阻抗和發送驅動器比RS232更強的驅動能力,故允許在相同傳輸線上連接多個接收節點,最多可接10個節點。即一個主設備(Master),其餘為從設備(Slave),從設備之間不能通信,所以RS-422支持點對多的雙向通信。接收器輸入阻抗為4k,故發端最大負載能力是10×4k+100Ω(終接電阻)。RS-422四線接口由於採用單獨的發送和接收通道,因此不必控制數據方向,各裝置之間任何必須的信號交換均可以按軟體方式(XON/XOFF握手)或硬體方式(一對單獨的雙絞線)實現。

RS-422的最大傳輸距離為1219米,最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。

RS-485

是從RS-422基礎上發展而來的,所以RS-485許多電氣規定與RS-422相仿。如都採用平衡傳輸方式、都需要在傳輸線上接終接電阻等。RS-485可以採用二線與四線方式,二線制可實現真正的多點雙向通信,而採用四線連接時,與RS-422一樣只能實現點對多的通信,即只能有一個主(Master)設備,其餘為從設備,但它比RS-422有改進,無論四線還是二線連接方式總線上可多接到32個設備。

RS-485與RS-422的不同還在於其共模輸出電壓是不同的,RS-485是-7V至+12V之間,而RS-422在-7V至+7V之間,RS-485接收器最小輸入阻抗為12kΩ、RS-422是4kΩ;由於RS-485滿足所有RS-422的規範,所以RS-485的驅動器可以在RS-422網絡中應用。

RS-485與RS-422一樣,其最大傳輸距離約為1219米,最大傳輸速率為10Mb/s。平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能使用規定最長的電纜長度。只有在很短的距離下才能獲得最高速率傳輸。一般100米長雙絞線最大傳輸速率僅為1Mb/s。

nt face="Arial" >1219米,最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。

關鍵字: