一、串口的歷史
首先,串口對每一個(gè)做硬件和嵌入式軟件的人來說,就是一個(gè)必備的工具,調(diào)試一個(gè)帶MCU或者CPU的系統(tǒng)。我們在調(diào)試的過程中,一般第一件事情:GPIO點(diǎn)燈,第二件事就是打通串口。
串口是一種非常通用的設(shè)備接口,是儀器儀表設(shè)備常用的通信接口,常用于遠(yuǎn)程采集設(shè)備數(shù)據(jù)或者實(shí)現(xiàn)遠(yuǎn)程控制。串口的開發(fā)也比較簡單,是很多工程師最喜歡的接口之一。
在完成GPIO點(diǎn)燈之后,一般我們就希望能夠?qū)崿F(xiàn)串口打印的功能,便于我們將一些寄存器信息打印出來便于調(diào)試。
由于我個(gè)人的特殊經(jīng)歷,對于我來說,串口這東西,仔細(xì)寫起來,可以寫一本書!應(yīng)該不少于200頁。
2008年我剛進(jìn)華為工作時(shí),碰到了一個(gè)特殊的歷史時(shí)期,嵌入式領(lǐng)域群雄逐鹿。
1、Intel、AMD高調(diào)宣稱X86系統(tǒng)進(jìn)入嵌入式領(lǐng)域,要占領(lǐng)PowerPC的市場。(后來Intel也做到了,通用服務(wù)器占領(lǐng)了幾乎所有電信核心側(cè)的設(shè)備——刀片服務(wù)器、機(jī)架服務(wù)器)。
2、當(dāng)時(shí),MIPS、ARM、PowerPC還難分伯仲,不過多核ARM不成熟,無法在電信領(lǐng)域廣泛應(yīng)用。MIPS由于其優(yōu)異的性價(jià)比和高性能展露頭角,慢慢由于其較差的質(zhì)量表現(xiàn)而偃旗息鼓。
3、PowerPC,隨著來著其他處理器的壓力,也開始推出多核處理器。
我當(dāng)時(shí)的工作是參與X86處理器作為嵌入式的電路開發(fā)。當(dāng)時(shí)碰到一個(gè)問題:傳統(tǒng)X86作為PC機(jī)已經(jīng)演進(jìn)得非常成熟的架構(gòu)。PC的硬件結(jié)構(gòu)與嵌入式SoC有很大的區(qū)別。
CPU下面是北橋負(fù)責(zé)高速外設(shè)、北橋的南面(下面)是南橋負(fù)責(zé)低速接口外設(shè)、然后還有一個(gè)SIO負(fù)責(zé)更低速的外設(shè)。
SIO全稱叫Super ?I/O。
超級輸入輸出芯片(SIO)一般位于主板左下方或者左上方。主要使用的芯片有Winbond、ITE,它為主板上的標(biāo)準(zhǔn)I/O接口提供控制處理功能。這里所說的“超級”是指它集成了PS/2鍵盤、PS/2鼠標(biāo)、串口COM、并口LPT接口等處理功能,而這些接口都是計(jì)算機(jī)中的慢速I/O設(shè)備。它們?nèi)课挥谥靼搴蟛坑疫?。它的主要功能包括?fù)責(zé)處理從鍵盤、鼠標(biāo)、串行接口等設(shè)備傳輸來的串行數(shù)據(jù),將它們轉(zhuǎn)換成為并行數(shù)據(jù),同時(shí)也負(fù)責(zé)并行接口、軟驅(qū)接口數(shù)據(jù)的傳輸與處理。SuperIO是通過一個(gè)類似于精簡的PCI總線,叫做LPC總線與南橋進(jìn)行連接的。
如此復(fù)雜的硬件結(jié)構(gòu),也是因?yàn)镮ntel強(qiáng)大的發(fā)貨量,形成自有體系和標(biāo)準(zhǔn)。
所以在傳統(tǒng)的PC機(jī)的主板上帶一個(gè)RS232串口的,都是通過SuperIO實(shí)現(xiàn)的。X86上也是通過固定的地址去訪問
而我們熟悉的ARM、不管是Cortex-M、還是Cortex-A都是一顆MCU、CPU都帶了串口——UART;
從iBox選擇的STM32F103的MCU的結(jié)構(gòu)框圖上面,我們可以看到有一堆UART、USART。
然而,在我當(dāng)時(shí)面對的嵌入式X86的系統(tǒng)的設(shè)計(jì)需求,不需要并口、PS2、硬件監(jiān)控、FDC、
H/W Monitor:一個(gè)應(yīng)用程序讀出所有計(jì)算機(jī)訪問硬件傳感器的測量值。
FDC:提供了一個(gè)主處理器和軟驅(qū)之間的接口(軟驅(qū)——看懂的人暴露年齡了)
?
Parallel port:并行端口(SPP),雙向并行端口(BPP),增強(qiáng)型并行端口(EPP),擴(kuò)展功能并行端口(ECP)四種模式。通過DIR可以控制它的輸入/輸出模式
?
認(rèn)識上圖的人再次暴露年齡
KBC:電路提供的功能包括一個(gè)鍵盤和一個(gè)PS2鼠標(biāo)。控制器從鍵盤和鼠標(biāo)接受串行數(shù)據(jù),檢查校驗(yàn)后將這些數(shù)據(jù)輸出到其輸出緩沖區(qū)。從它的讀寫命令中可以了解一些基本設(shè)置。
?
UART:終于說到我們的本文的主角UART、即串口了。在老式的臺式電腦或者筆記本上,其實(shí)都會有RS232電平標(biāo)準(zhǔn)的UART:
關(guān)于串口的各種電平標(biāo)準(zhǔn),我們前期有發(fā)布過相關(guān)的內(nèi)容:
UART、RS-232、RS-422、RS-485
SuperIO的UART輸出的一般也是TTL電平,還需要接到RS232芯片,再接到DB9接口
X86系統(tǒng)的地址的尋址空間還有點(diǎn)復(fù)雜:除了內(nèi)存空間(Memory)、還有IO空間。詳細(xì)內(nèi)容點(diǎn)擊:
處理器系列(7)——尋址空間
IO空間是
在X86開發(fā)時(shí),串口這些低速的外設(shè)是用IO空間進(jìn)行訪問和讀寫的:
由UARTDevice Configuration Registers可知,UART1~UART4的基址分別是03F8H,02F8H,03E8H,02E8H。
?
GPIO:通用管腳
這些對于傳統(tǒng)的由PowerPC實(shí)現(xiàn)的電信嵌入式系統(tǒng)來說,除了串口,其他功能不是需要的;同時(shí),原來的一些NorFlash、寄存器、傳感器 數(shù)據(jù),需要通過MPI接口進(jìn)行訪問,而這些都是SuperIO芯片不能實(shí)現(xiàn)的。
另外由于SuperIO的功能多,所以尺寸大,管腳也多。
?
所以在當(dāng)時(shí)的設(shè)計(jì)需求里面,使用一個(gè)SuperIO并不合適。所以選擇一個(gè)CPLD實(shí)現(xiàn)LPC接口控制UART接口。
由于我是從事過這么一個(gè)工作,所以對UART的工作過程特別熟悉。而且,我們一開始按照自己的想法,自定義了很多寄存器,并且地址是按照自己想法去設(shè)計(jì)的,結(jié)果:商業(yè)軟件windows、商用linux無法直接識別到串口。后來又改回基址:03F8H,02F8H,03E8H,02E8H這幾個(gè)地址。
二、串口的工作原理
1、我們用打電話為例,來說明串口的工作原理:
首先打電話,說話是串行,即:一個(gè)字一個(gè)字說。
發(fā)送方對接收方發(fā)送信息,是串行的:
?
因?yàn)閷Ψ绞且粋€(gè)字發(fā)音、一個(gè)字發(fā)音聽到的,所以每個(gè)字是按照時(shí)間先后順序發(fā)給對方的。
如果我們用GPIO去傳遞信號,則我們只能傳遞“高低電平”,信號要么為“高電平”、要么為“低電平”。那么這個(gè)管腳傳遞信息,只有兩個(gè)狀態(tài),跟烽火臺一樣,要么“有”、要么“沒”。
?
所以當(dāng)我們用GPIO進(jìn)行點(diǎn)燈的時(shí)候,表示狀態(tài)的時(shí)候,一般就是兩個(gè)狀態(tài),“亮”、“滅”。
?
但是兩個(gè)狀態(tài)、根本沒法滿足我們傳遞信息的需求。于是我們希望傳遞,一串“亮”、“滅”,來傳遞更復(fù)雜的信息,跟電報(bào)、或者海軍信號燈的原理是一樣的。
?
2、串行的數(shù)據(jù),如何轉(zhuǎn)并行?
如同打電話一樣,我們要聽完一句話,接收所有的字、然后組詞、組成句子,接收完整的一句話,之后人腦去理解他的語意。
學(xué)過《數(shù)字電路》的朋友,應(yīng)該還記得“移位寄存器”吧?
細(xì)節(jié),我估計(jì)你們早忘光了,甚至當(dāng)時(shí)完全就沒學(xué)會。。。。后來工作,好像也沒用得到。(現(xiàn)在做硬件好像就是原理圖PCB畫對了就好了,都不用管電路原理。)
大致的意思是:
初始狀態(tài):?設(shè)A3A2A1A0= 1011
然后Q3的輸出,是在每個(gè)時(shí)鐘節(jié)拍,按照這個(gè)先后順序,把A3A2A1A0串行的輸出出去。
其實(shí)利用的就是D觸發(fā)器的特性。
如果我們使用8位的移位寄存器,就可以利用8個(gè)clk的時(shí)間,發(fā)一組8bit的數(shù)據(jù)通過一跟導(dǎo)線,傳輸出去。
接收也是一樣的,不過過程相反:
3、喂!XXXX ??拜拜
打電話的時(shí)候,我們一般會先說:“喂!”。
這是一個(gè)信號,通知對方:“我要開始說話了”。
因?yàn)榇螂娫挼臅r(shí)候,我們彼此看不到對方,不知道對方的表情、眼神、動作、是否聽你說話。所以我們通過一個(gè)信息,通知對方,啟動通信。
在串口的通信過程中,一樣的,我們需要通知對方:我要開始通信了。
其實(shí)很多接口原理都一樣:首先要有個(gè)常態(tài),然后再發(fā)一個(gè)不同的狀態(tài),告訴對方,開始了!
對于UART來說,首先要有個(gè)常態(tài)——高電平(至于為什么是高電平、各種說法,個(gè)人覺得應(yīng)該沒什么理由,反過來也不影響)
那么,我們就需要用一個(gè)信息告訴接收方,我要傳數(shù)據(jù)了。最簡單的方法就是,突然讓電平拉低,這樣,能夠檢測一個(gè)下降沿,或者能夠檢測到一個(gè)低電平,則,我們就可以認(rèn)為,要開始了。
UART就選擇了這么一個(gè)簡單粗暴的方法:
上圖,中Start,那個(gè)低電平,實(shí)際就是一個(gè)表示開始的信號。我們稱之為:起始位。
同樣,打電話的時(shí)候,我們都需要說:“再見”。
我跟我爸打電話的時(shí)候,我爸一般不說再見、拜拜之類的結(jié)束語,經(jīng)常導(dǎo)致:我話還沒說完,他就掛電話了。導(dǎo)致我要重新?lián)芴栠^去。
這個(gè)“再見”,與平時(shí),我們離開時(shí)說的“再見”,還多一層意思,表達(dá):“通信可以停止了!”
所以,UART也需要這么一個(gè)信息,通知對方,我說完了,你可以處理了。
這個(gè)就是“停止位”,方式也很簡單:“高電平”!
如上圖中的STOP。
4、波特率——語速
因?yàn)?,UART中的A表示的是異步:
(Universal Asynchronous Receiver/Transmitter)
所謂異步,也就是說,我給你發(fā)信號的時(shí)候,我不給你發(fā)時(shí)鐘;
接收方,需要:
1、時(shí)鐘與發(fā)送方時(shí)鐘誤差不能太大。
2、雙方的分析數(shù)據(jù)的時(shí)鐘需要保持基本一致。
例如:
發(fā)送方發(fā)出9600波特率信號,但是接收方的波特率設(shè)置為19200。起始位沒有問題,因?yàn)槟軌蚪邮盏侥莻€(gè)下降沿,低電平。所以,會去解析數(shù)據(jù),但是會出現(xiàn)誤碼。我們在信號上分析一下就知道了:
白色的數(shù)字是9600波特率發(fā)出來的本意:01000001
結(jié)果,接收方波特率19200,是9600的兩倍,采樣的速率也是2倍,解析出來的數(shù)據(jù):00011000
這樣就造成“錯誤”。
這也是為什么,我們串口對接時(shí),收發(fā)雙方需要統(tǒng)一“波特率”的原因。
三、串口的電平標(biāo)準(zhǔn)
1、TTL
一般板內(nèi)或者是,現(xiàn)在調(diào)試用的串口工具,直接使用TTL電平標(biāo)準(zhǔn)的UART,簡單易用,成本低。缺點(diǎn)的是不能遠(yuǎn)距離傳輸。
?
2、RS-232標(biāo)準(zhǔn)
RS-232是美國電子工業(yè)協(xié)會EIA(Electronic Industry Association)制定的一種串行物理接口標(biāo)準(zhǔn)。RS是英文“推薦標(biāo)準(zhǔn)”的縮寫,232為標(biāo)識號。RS-232是對電氣特性以及物理特性的規(guī)定,只作用于數(shù)據(jù)的傳輸通路上,它并不內(nèi)含對數(shù)據(jù)的處理方式。需要說明一下,很多人經(jīng)常把RS-232、RS-422、RS-485 誤稱為通訊協(xié)議,這是很不應(yīng)該的,其實(shí)它們僅是關(guān)于UART通訊的一個(gè)機(jī)械和電氣接口標(biāo)準(zhǔn)(頂多是網(wǎng)絡(luò)協(xié)議中的物理層面)。
該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25 個(gè)腳的DB-25 連接器,對連接器的每個(gè)引腳的信號內(nèi)容加以規(guī)定,還對各種信號的電平加以規(guī)定。后來IBM的PC 機(jī)將RS-232 簡化成了DB-9 連接器,從而成為今天的事實(shí)標(biāo)準(zhǔn)。而工業(yè)控制的RS-232 口一般只使用RXD(2)、TXD(3)、GND(5) 三條線。
早期由于PC都帶有RS-232接口,所以我們需要使用UART時(shí),都選擇RS-232。但是現(xiàn)在個(gè)人電腦,不光是筆記本,包括臺式機(jī)都不再帶有RS-232的接口,大家看到電腦主板上面沒有DB9的接口。所以現(xiàn)在開發(fā)板都選擇TTL的UART,或者直接UART轉(zhuǎn)USB做在開發(fā)板上。
嵌入式里面說的串口,一般是指UART口, 但是我們經(jīng)常搞不清楚它和COM口的區(qū)別, ?以及RS232, TTL等關(guān)系, ?實(shí)際上UART,COM指的物理接口形式(硬件), 而TTL、RS-232是指的電平標(biāo)準(zhǔn)(電信號).
UART有4個(gè)pin(VCC, GND, RX, TX), 用的TTL電平, ?低電平為0(0V),高電平為1(3.3V或以上)。
?
3、RS-485/ RS-422標(biāo)準(zhǔn)
RS-232接口可以實(shí)現(xiàn)點(diǎn)對點(diǎn)的通信方式,但這種方式不能實(shí)現(xiàn)聯(lián)網(wǎng)功能。于是,為了解決這個(gè)問題,一個(gè)新的標(biāo)準(zhǔn)RS-485產(chǎn)生了。RS-485的數(shù)據(jù)信號采用差分傳輸方式,也稱作平衡傳輸,它使用一對雙絞線,將其中一線定義為A,另一線定義為B。?
通常情況下,發(fā)送驅(qū)動器A、B之間的正電平在+2~+6V,是一個(gè)邏輯狀態(tài),負(fù)電平在-2~6V,是另一個(gè)邏輯狀態(tài)。另有一個(gè)信號地C,在RS-485中還有一“使能”端,而在RS-422中這是可用可不用的。
RS-422 的電氣性能與RS-485完全一樣。主要的區(qū)別在于:RS-422 有4 根信號線:兩根發(fā)送、兩根接收。由于RS-422 的收與發(fā)是分開的所以可以同時(shí)收和發(fā)(全雙工),也正因?yàn)槿p工要求收發(fā)要有單獨(dú)的信道,所以RS-422適用于兩個(gè)站之間通信,星型網(wǎng)、環(huán)網(wǎng),不可用于總線網(wǎng);RS-485 只有2 根信號線,所以只能工作在半雙工模式,常用于總線網(wǎng)。
1. RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(2~6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V表示。接口信號電平比RS-232-C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL 電路連接。
2. RS-485的數(shù)據(jù)最高傳輸速率為10Mbps 。
3. RS-485接口是采用平衡驅(qū)動器和差分接收器的組合,抗共模干擾能力增強(qiáng),即抗噪聲干擾性好。
4. RS-485最大的通信距離約為1219M,最大傳輸速率為10Mb/S,傳輸速率與傳輸距離成反比,在100Kb/S的傳輸速率下,才可以達(dá)到最大的通信距離,如果需傳輸更長的距離,需要加485中繼器。RS-485總線一般最大支持32個(gè)節(jié)點(diǎn),如果使用特制的485芯片,可以達(dá)到128個(gè)或者256個(gè)節(jié)點(diǎn),最大的可以支持到400個(gè)節(jié)點(diǎn)。
RS-423 非平衡串行通信接口
結(jié)構(gòu)、信號電平、傳輸距離、傳輸速率、接口芯片
RS-422 平衡型串行通信接口
結(jié)構(gòu)、信號電平、接口芯片,MC3486、MC3487、SN75154,SN75155
傳輸速率、傳輸距離
RS-485 串行通信總線
結(jié)構(gòu)、信號電平、接口芯片 MAX485
傳輸速率、傳輸距離,應(yīng)用實(shí)例
由于RS-232 接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要有以下四點(diǎn):
(1)??接口的信號電平值較高,易損壞接口電路芯片,又因?yàn)?32電平與TTL電平不兼容故需使用電平轉(zhuǎn)換電路方能與TTL電路連接;
(2)??傳輸速率較低,在異步傳輸時(shí),波特率為20Kbps?,F(xiàn)在由于采用了新的UART芯片,波特率達(dá)到115.2Kbps(1.832M/16);
(3)??接口使用一根信號線和一根信號返回線而構(gòu)成共地的傳輸形式,這種共地傳輸容易產(chǎn)生共模干擾,所以抗噪聲干擾性弱;
(4)??傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為50 米,實(shí)際上也只能用在15 米左右;
(5)? RS-232 只容許一對一的通信,沒有考慮構(gòu)成串行總線。(這點(diǎn)很重要,在很多控制場景,是一控多,如果主設(shè)備都需要跟從設(shè)備點(diǎn)對點(diǎn)通信,那現(xiàn)場布線成蜘蛛網(wǎng)了)
非平衡型串行通信接口RS-423,RS-449
平衡型串行通信接口RS-422
RS-422(EIA RS-422-A Standard)是Apple的Macintosh計(jì)算機(jī)的串口連接標(biāo)準(zhǔn)。RS-422使用差分信號,RS-232使用非平衡參考地的信號。差分傳輸使用兩根線發(fā)送和接收信號,對比RS-232,它能更好的抗噪聲和有更遠(yuǎn)的傳輸距離。在工業(yè)環(huán)境中更好的抗噪性和更遠(yuǎn)的傳輸距離是一個(gè)很大的優(yōu)點(diǎn)。
?
4、RS-232與RS-485對比
1、抗干擾性:RS485 接口是采用平衡驅(qū)動器和差分接收器的組合,抗噪聲干擾性好。RS232 接口使用一根信號線和一根信號返回線而構(gòu)成共地的傳輸形式,這種共地傳輸容易產(chǎn)生共模干擾。
2、傳輸距離:RS485 接口的最大傳輸距離標(biāo)準(zhǔn)值為 1200 米(9600bps 時(shí)),實(shí)際上可達(dá) 3000 米。RS232 傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為 50 米,實(shí)際上也只能用在 15 米左右。
3、通信能力:RS-485 接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器,用戶可以利用單一的 RS-485 接口方便地建立起設(shè)備網(wǎng)絡(luò)。RS-232只允許一對一通信。
4、傳輸速率:RS-232傳輸速率較低,在異步傳輸時(shí),波特率為 20Kbps。RS-485 的數(shù)據(jù)最高傳輸速率為 10Mbps 。
5、信號線:RS485 接口組成的半雙工網(wǎng)絡(luò),一般只需二根信號線。RS-232 口一般只使用 RXD、TXD、GND 三條線 。
6、電氣電平值:RS-485的邏輯"1"以兩線間的電壓差為+(2-6) V 表示;邏輯"0"以兩線間的電壓差為-(2-6)V 表 示 。在 RS-232-C 中任何一條信號線的電壓均為負(fù)邏輯關(guān)系。即:邏輯"1",-5- -15V;邏輯"0 " +5- +15V 。
5、RS-422與RS-485對比?
RS-485的電氣性能與RS-422完全一樣。主要的區(qū)別在于:
1、RS-422 有4 根信號線:兩根發(fā)送(Y、Z)、兩根接收(A、B)。由于RS-422 的收與發(fā)是分開的所以可以同時(shí)收和發(fā)(全雙工)。
2、RS-485 只有兩根數(shù)據(jù)線:發(fā)送和接收都是A 和B。由于RS-485 的收與發(fā)是共用兩根線,所以不能同時(shí)收和發(fā)(半雙工)。
RS-485標(biāo)準(zhǔn)采用平衡式發(fā)送,差分式接收的數(shù)據(jù)收發(fā)器來驅(qū)動總線,具體規(guī)格要求:
驅(qū)動器能輸出±7V的共模電壓
輸入端的電容≤50pF
在節(jié)點(diǎn)數(shù)為32個(gè),配置了120Ω的終端電阻的情況下,驅(qū)動器至少還能輸出電壓1.5V(終端電阻的大小與所用雙絞線的參數(shù)有關(guān))
接收器的輸入靈敏度為200mV(即(V+)-(V-)≥0.2V,表示信號“0”;(V+)-(V-)≤-0.2V,表示信號“1”)
因?yàn)镽S-485的遠(yuǎn)距離、多節(jié)點(diǎn)(32個(gè))以及傳輸線成本低的特性,使得EIA RS-485成為工業(yè)應(yīng)用中數(shù)據(jù)傳輸?shù)氖走x標(biāo)準(zhǔn)。
(1)? RS-485 的電氣特性:發(fā)送端:邏輯“0”以兩線間的電壓差+(2 ~6)V 表示;邏輯“1”以兩線間的電壓差-(2 ~6)V 表示。接收端:A 比B 高200mV 以上即認(rèn)為是邏輯“0”,A 比B 低200mV 以上即認(rèn)為是邏輯“1”;
(2)? RS-485 的數(shù)據(jù)最高傳輸速率為10Mbps。但是由于RS-485 常常要與PC 機(jī)的RS-232 口通信,所以實(shí)際上一般最高115.2Kbps。又由于太高的速率會使RS-485 傳輸距離減小,所以往往為9600bps 左右或以下;
(3)? RS-485 接口是采用平衡驅(qū)動器和差分接收器的組合,抗噪聲干擾性好;
(4)? RS-485 接口的最大傳輸距離標(biāo)準(zhǔn)為1200 米(9600bps 時(shí)),實(shí)際上可達(dá)3000米,RS-485 接口在總線上是容許連接多達(dá)128 個(gè)收發(fā)器、即RS-485 具有多機(jī)通信功能,這樣用戶可以利用單一的RS-485 接口方便的建立起網(wǎng)絡(luò)。因?yàn)镽S-485 接口組成的半雙工網(wǎng)絡(luò),一般只需二根信號線,所以RS-485 接口均采用雙絞線傳輸。RS-485 的國際標(biāo)準(zhǔn)并沒有規(guī)定RS-485 的接口連接器標(biāo)準(zhǔn)、所以采用接線端子或者DB-9、DB-25 等連接器都可以。
在使用RS-485 接口時(shí),對于特定的傳輸線徑,從發(fā)生器到負(fù)載其數(shù)據(jù)信號傳輸所容許的最大電纜長度是數(shù)據(jù)信號速率的函數(shù),這個(gè)長度數(shù)據(jù)主要是受信號失真及噪聲等影響所限制。最大電纜長度與信號速率的關(guān)系曲線是使用24AWG 銅芯雙絞電話電纜(線徑為0.51mm),線間旁路電容為52.5PF/M,終端負(fù)載電阻為100 歐時(shí)所得出的。(引自GB11014-89 附錄A)。當(dāng)數(shù)據(jù)信號速率降低到90Kbit/S 以下時(shí),假定最大容許的信號損失為6dBV 時(shí),則電纜長度被限制在1200m。實(shí)際上,在使用時(shí)是完全可以取得比它大的電纜長度。當(dāng)使用不同線徑的電纜,則取得的最大電纜長度是不相同的。例如:當(dāng)數(shù)據(jù)信號速率為600Kbit/S 時(shí),采用24AWG 電纜,最大電纜長度是200m,若采用19AWG電纜(線徑為0.91mm)則電纜長度將可以大于200m;若采用28AWG 電纜(線徑為0.32mm),則電纜長度只能小于200m。
RS-485的遠(yuǎn)距離通信建議采用屏蔽電纜,并且將屏蔽層作為地線。
?
6、影響RS-485總線通訊速度和通信可靠性的三個(gè)因素
?在通信電纜中的信號反射
在通信過程中,有兩種信號因素導(dǎo)致信號反射:阻抗不連續(xù)和阻抗不匹配。
阻抗不連續(xù),信號在傳輸線末端突然遇到電纜阻抗很小甚至沒有,信號在這個(gè)地方就會引起反射,如圖所示。這種信號反射的原理,與光從一種媒質(zhì)進(jìn)入另一種媒質(zhì)要引起反射是相似的。消除這種反射的方法,就必須在電纜的末端跨接一個(gè)與電纜的特性阻抗同樣大小的終端電阻,使電纜的阻抗連續(xù)。由于信號在電纜上的傳輸是雙向的,因此,在通訊電纜的另一端可跨接一個(gè)同樣大小的終端電阻。
從理論上分析,在傳輸電纜的末端只要跨接了與電纜特性阻抗相匹配的終端電阻,就再也不會出現(xiàn)信號反射現(xiàn)象。但是,在實(shí)現(xiàn)應(yīng)用中,由于傳輸電纜的特性阻抗與通訊波特率等應(yīng)用環(huán)境有關(guān),特性阻抗不可能與終端電阻完全相等,因此或多或少的信號反射還會存在。
引起信號反射的另一個(gè)原因是數(shù)據(jù)收發(fā)器與傳輸電纜之間的阻抗不匹配。這種原因引起的反射,主要表現(xiàn)在通訊線路處在空閑方式時(shí),整個(gè)網(wǎng)絡(luò)數(shù)據(jù)混亂。
信號反射對數(shù)據(jù)傳輸?shù)挠绊?,歸根結(jié)底是因?yàn)榉瓷湫盘栍|發(fā)了接收器輸入端的比較器,使接收器收到了錯誤的信號,導(dǎo)致CRC校驗(yàn)錯誤或整個(gè)數(shù)據(jù)幀錯誤。
在信號分析,衡量反射信號強(qiáng)度的參數(shù)是RAF(Refection AttenuationFactor反射衰減因子)。它的計(jì)算公式如式(1)。
RAF=20lg(Vref/Vinc) (1)
式中:Vref—反射信號的電壓大?。籚inc—在電纜與收發(fā)器或終端電阻連接點(diǎn)的入射信號的電壓大小。
具體的測量方法如圖3所示。例如,由實(shí)驗(yàn)測得2.5MHz的入射信號正弦波的峰-峰值為+5V,反射信號的峰-峰值為+0.297V,則該通訊電纜在2.5MHz的通訊速率時(shí),它的反射衰減因子為:
RAF=20lg(0.297/2.5)=-24.52dB
要減弱反射信號對通訊線路的影響,通常采用噪聲抑制和加偏置電阻的方法。在實(shí)際應(yīng)用中,對于比較小的反射信號,為簡單方便,經(jīng)常采用加偏置電阻的方法。在通訊線路中,如何通過加偏置電阻提高通訊可靠性的原理。
? ? 在通訊電纜中的信號衰減
第二個(gè)影響信號傳輸?shù)囊蛩厥切盘栐陔娎|的傳輸過程中衰減。一條傳輸電纜可以把它看成由分布電容、分布電感和電阻聯(lián)合組成的等效電路,如圖所示。
電纜的分布電容C主要是由雙絞線的兩條平行導(dǎo)線產(chǎn)生。導(dǎo)線的電阻在這里對信號的影響很小,可以忽略不計(jì)。信號的損失主要是由于電纜的分布電容和分布電感組成的LC低通濾波器。PROFIBUS用的LAN標(biāo)準(zhǔn)型二芯電纜(西門子為DP總線選用的標(biāo)準(zhǔn)電纜),在不同波特率時(shí)的衰減系數(shù)如表1所示。
電纜的衰減系數(shù)
? 在通訊電纜中的純阻負(fù)載
影響通訊性能的第三個(gè)因素是純阻性負(fù)載(也叫直流負(fù)載)的大小。這里指的純阻性負(fù)載主要由終端電阻、偏置電阻和RS-485收發(fā)器三者構(gòu)成。
在敘述EIA RS-485規(guī)范時(shí)曾提到過RS-485驅(qū)動器在帶了32個(gè)節(jié)點(diǎn),配置了150Ω終端電阻的情況下,至少能輸出1.5V的差分電壓。一個(gè)接收器的輸入電阻為12kΩ,整個(gè)網(wǎng)絡(luò)的等效電路如圖5所示。按這樣計(jì)算,RS-485驅(qū)動器的負(fù)載能力為:
RL=32個(gè)輸入電阻并聯(lián)2個(gè)終端電阻=((12000/32)×(150/2))/(12000/32)+(150/2))≈51.7Ω
現(xiàn)在比較常用的RS-485驅(qū)動器有MAX485、DS3695、MAX1488/1489以及和利時(shí)公司使用的SN75176A/D等,其中有的RS-485驅(qū)動器負(fù)載能力可以達(dá)到20Ω。在不考慮其它諸多因素的情況下,按照驅(qū)動能力和負(fù)載的關(guān)系計(jì)算,一個(gè)驅(qū)動器可帶節(jié)點(diǎn)的最大數(shù)量將遠(yuǎn)遠(yuǎn)大于32個(gè)。
在通訊波特率比較高的時(shí)候,在線路上偏置電阻是很有必要的。偏置電阻的連接方法如圖6。它的作用是在線路進(jìn)入空閑狀態(tài)后,把總線上沒有數(shù)據(jù)時(shí)(空閑方式)的電平拉離0電平,如圖7。這樣一來,即使線路中出現(xiàn)了比較小的反射信號或干擾,掛接在總線上的數(shù)據(jù)接收器也不會由于這些信號的到來而產(chǎn)生誤動作。
通過下面后例子了,可以計(jì)算出偏置電阻的大?。?/p>
終端電阻Rt1=Rr2=120Ω;
假設(shè)反射信號最大的峰-峰值Vref≤0.3Vp-p,則負(fù)半周的電壓Vref≤0.15V;終端的電阻上由反射信號引起的反射電流Iref≤0.15/(120||120)=2.5mA。一般RS-485收發(fā)器(包括SN75176)的滯后電壓值(hysteresis value)為50mV,即:
(Ibias-Iref)×(Rt1||Rt2)≥50mV
于是可以計(jì)算出偏置電阻產(chǎn)生的偏置電流Ibias≥3.33mA
+5V=Ibias(R上拉+R下拉+(Rt1||Rt2)) (2)
通過式2可以計(jì)算出R上拉=R下拉=720Ω
在實(shí)際應(yīng)用中,RS-485總線加偏置電阻有兩種方法:
(1)把偏置電阻平衡分配給總線上的每一個(gè)收發(fā)器。這種方法給掛接在RS-485總線上的每一個(gè)收發(fā)器加了偏置電阻,給每一個(gè)收發(fā)器都加了一個(gè)偏置電壓。
(2)在一段總線上只用一對偏置電阻。這種方法對總線上存在大的反射信號或干擾信號比較有效。值得注意的是偏置電阻的加入,增加了總線的負(fù)載。
?7、RS-485總線的負(fù)載能力和通訊電纜長度之間的關(guān)系
在設(shè)計(jì)RS-485總線組成的網(wǎng)絡(luò)配置(總線長度和帶負(fù)載個(gè)數(shù))時(shí),應(yīng)該考慮到三個(gè)參數(shù):純阻性負(fù)載、信號衰減和噪聲容限。純阻性負(fù)載、信號衰減這兩個(gè)參數(shù),在前面已經(jīng)討論過,現(xiàn)在要討論的是噪聲容限(Noise Margin)。RS-485總線接收器的噪聲容限至少應(yīng)該大于200mV。前面的論述者是在假設(shè)噪聲容限為0的情況下進(jìn)行的。在實(shí)際應(yīng)用中,為了提高總線的抗干擾能力,總希望系統(tǒng)的噪聲容限比EIA RS-485標(biāo)準(zhǔn)中規(guī)定的好一些。從下面的公式能看出總線帶負(fù)載的多少和通訊電纜長度之間的關(guān)系:
Vend=0.8(Vdriver-Vloss-Vnoise-Vbias)(3)
其中:Vend為總線末端的信號電壓,在標(biāo)準(zhǔn)測定時(shí)規(guī)定為0.2V;Vdriver為驅(qū)動器的輸出電壓(與負(fù)載數(shù)有關(guān)。負(fù)載數(shù)在5~35個(gè)之間,Vdriver=2.4V;當(dāng)負(fù)載數(shù)小于5,Vdriver=2.5V;當(dāng)負(fù)載數(shù)大于35,Vdriver≤2.3V);Vloss為信號在總線中的傳輸過程中的損耗(與通訊電纜的規(guī)格和長度有關(guān)),由表1提供的標(biāo)準(zhǔn)電纜的衰減系數(shù),根據(jù)公式衰減系數(shù)b=20lg(Vout/Vin)可以計(jì)算出Vloss=Vin-Vout=0.6V(注:通訊波特率為9.6kbps,電纜長度1km,如果特率增加,Vloss會相應(yīng)增大);Vnoise為噪聲容限,在標(biāo)準(zhǔn)測定時(shí)規(guī)定為0.1V;Vbias是由偏置電阻提供的偏置電壓(典型值為0.4V)。
式(3)中乘以0.8是為了使通信電纜不進(jìn)入滿載狀態(tài)。從式(3)可以看出,Vdriver的大小和總線上帶負(fù)載數(shù)的多少成反比,Vloss的大小和總線長度成反比,其他幾個(gè)參數(shù)只和用的驅(qū)動器類型有關(guān)。因此,在選定了驅(qū)動器的RS-495總線上,在通信波特率一定的情況下,帶負(fù)載數(shù)的多少,與信號能傳輸?shù)淖畲缶嚯x是直接相關(guān)的。具體關(guān)系是:在總線允許的范圍內(nèi),帶負(fù)載數(shù)越多,信號能傳輸?shù)木嚯x就越??;帶負(fù)載數(shù)據(jù)少,信號能傳輸?shù)木嚯x就越遠(yuǎn)。
8、分布電容對RS-485總線傳輸性能的影響
電纜的分布電容主是由雙絞線的兩條平行導(dǎo)線產(chǎn)生。另外,導(dǎo)線和地之間也存在分布電容,雖然很小,但在分析時(shí)也不能忽視。分布電容對總線傳輸性能的影響,主要是因?yàn)榭偩€上傳輸?shù)氖腔ㄐ盘?,信號的表達(dá)方式只有“1”和“0”。在特殊的字節(jié)中,例如0x01,信號“0”使得分布電容有足夠的充電時(shí)間,而信號“1”到來時(shí),由于分布電容中的電荷,來不及放電,(Vin+)—(Vin-)-還大于200mV,結(jié)果使接收誤認(rèn)為是“0”,而最終導(dǎo)致CRC校驗(yàn)錯誤,整個(gè)數(shù)據(jù)幀傳輸錯誤。具體過程如圖所示。
由于總線上分布影響,導(dǎo)致數(shù)據(jù)傳輸錯誤,從而使整個(gè)網(wǎng)絡(luò)性能降低。解決這個(gè)問題有兩種方法:
(1)降低數(shù)據(jù)傳輸?shù)牟ㄌ芈剩?/p>
(2)使用分布電容小的電纜,提高傳輸線的質(zhì)量。
僅僅用一對雙絞線將各個(gè)接口的A、B端連接起來,而不對RS-485通信鏈路的信號接地,在某些情況下也可以工作,但給系統(tǒng)埋下了隱患。RS-485接口采用差分方式傳輸信號并不需要對于某個(gè)參照點(diǎn)來檢測信號系統(tǒng),只需檢測兩線之間的電位差就可以了。但應(yīng)該注意的是收發(fā)器只有在共模電壓不超出一定范圍(-7V至+12V)的條件下才能正常工作。當(dāng)共模電壓超出此范圍,就會影響通信的可靠直至損壞接口。如圖1所示,當(dāng)發(fā)送器A向接收器B發(fā)送數(shù)據(jù)時(shí),發(fā)送器A的輸出共模電壓為VOS,由于兩個(gè)系統(tǒng)具有各自獨(dú)立的接地系統(tǒng)存在著地電位差VGPD,那么接收器輸入端的共模電壓就會達(dá)到VCM=VOS+VGPD。RS-485標(biāo)準(zhǔn)規(guī)定VOS≤3V,但VGPD可能會有很大幅度(十幾伏甚至數(shù)十伏),并可能伴有強(qiáng)干擾信號致使接收器共模輸入VCM超出正常圍,在信號線上產(chǎn)生干擾電流影響正常通信,或損壞設(shè)備。
四、串口線的傳輸距離
串行接口?(Serial Interface)?是指數(shù)據(jù)一位一位地順序傳送,其特點(diǎn)是通信線路簡單,只要一對傳輸線就可以實(shí)現(xiàn)雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。一條信息的各位數(shù)據(jù)被逐位按順序傳送的通訊方式稱為串行通訊。串行通訊的特點(diǎn)是:數(shù)據(jù)位的傳送,按位順序進(jìn)行,最少只需一根傳輸線即可完成;成本低但傳送速度慢。串行通訊的距離可以從幾米到幾千米;根據(jù)信息的傳送方向,串行通訊可以進(jìn)一步分為單工、半雙工和全雙工三種。
總述:
串口通信的兩種最基本的方式:同步串行通信方式和異步串行通信方式。
同步串行是指SPI(Serial Peripheral interface)的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息,TRM450是SPI接口。
異步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用異步接收/發(fā)送。UART是一個(gè)并行輸入成為串行輸出的芯片,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。TTL電平是3.3V的,而RS232是負(fù)邏輯電平,它定義+5~+12V為低電平,而-12~-5V為高電平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。
串行接口按電氣標(biāo)準(zhǔn)及協(xié)議來分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422與RS-485標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定,不涉及接插件、電纜或協(xié)議。
RS-232:
也稱標(biāo)準(zhǔn)串口,最常用的一種串行通訊接口。它是在1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。傳統(tǒng)的RS-232-C接口標(biāo)準(zhǔn)有22根線,采用標(biāo)準(zhǔn)25芯D型插頭座(DB25),后來使用簡化為9芯D型插座(DB9),現(xiàn)在應(yīng)用中25芯插頭座已很少采用。
RS-232采取不平衡傳輸方式,即所謂單端通訊。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點(diǎn)對點(diǎn)(即只用一對收、發(fā)設(shè)備)通訊而設(shè)計(jì)的,其驅(qū)動器負(fù)載為3~7kΩ。所以RS-232適合本地設(shè)備之間的通信。
pt; background:rgb(255,255,255); mso-shading:rgb(255,255,255); " >、RS485等。RS-232-C、RS-422與RS-485標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定,不涉及接插件、電纜或協(xié)議。
RS-422
標(biāo)準(zhǔn)全稱是“平衡電壓數(shù)字接口電路的電氣特性”,它定義了接口電路的特性。典型的RS-422是四線接口。實(shí)際上還有一根信號地線,共5根線。其DB9連接器引腳定義。由于接收器采用高輸入阻抗和發(fā)送驅(qū)動器比RS232更強(qiáng)的驅(qū)動能力,故允許在相同傳輸線上連接多個(gè)接收節(jié)點(diǎn),最多可接10個(gè)節(jié)點(diǎn)。即一個(gè)主設(shè)備(Master),其余為從設(shè)備(Slave),從設(shè)備之間不能通信,所以RS-422支持點(diǎn)對多的雙向通信。接收器輸入阻抗為4k,故發(fā)端最大負(fù)載能力是10×4k+100Ω(終接電阻)。RS-422四線接口由于采用單獨(dú)的發(fā)送和接收通道,因此不必控制數(shù)據(jù)方向,各裝置之間任何必須的信號交換均可以按軟件方式(XON/XOFF握手)或硬件方式(一對單獨(dú)的雙絞線)實(shí)現(xiàn)。
RS-422的最大傳輸距離為1219米,最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達(dá)到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。
RS-485
是從RS-422基礎(chǔ)上發(fā)展而來的,所以RS-485許多電氣規(guī)定與RS-422相仿。如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻等。RS-485可以采用二線與四線方式,二線制可實(shí)現(xiàn)真正的多點(diǎn)雙向通信,而采用四線連接時(shí),與RS-422一樣只能實(shí)現(xiàn)點(diǎn)對多的通信,即只能有一個(gè)主(Master)設(shè)備,其余為從設(shè)備,但它比RS-422有改進(jìn),無論四線還是二線連接方式總線上可多接到32個(gè)設(shè)備。
RS-485與RS-422的不同還在于其共模輸出電壓是不同的,RS-485是-7V至+12V之間,而RS-422在-7V至+7V之間,RS-485接收器最小輸入阻抗為12kΩ、RS-422是4kΩ;由于RS-485滿足所有RS-422的規(guī)范,所以RS-485的驅(qū)動器可以在RS-422網(wǎng)絡(luò)中應(yīng)用。
RS-485與RS-422一樣,其最大傳輸距離約為1219米,最大傳輸速率為10Mb/s。平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能使用規(guī)定最長的電纜長度。只有在很短的距離下才能獲得最高速率傳輸。一般100米長雙絞線最大傳輸速率僅為1Mb/s。
nt face="Arial" >1219米,最大傳輸速率為10Mb/s。其平衡雙絞線的長度與傳輸速率成反比,在100kb/s速率以下,才可能達(dá)到最大傳輸距離。只有在很短的距離下才能獲得最高速率傳輸。一般100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mb/s。
編輯:黃飛
?
評論
查看更多