新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串行通訊的一些認識

        串行通訊的一些認識

        作者: 時間:2016-12-19 來源:網(wǎng)絡(luò) 收藏

        1、串行通訊只有一個傳輸通道,每個時刻只能表達一種狀態(tài)。不管什么介質(zhì),不管是什么信號,我們用1表示一種狀態(tài),用0表示另一種狀態(tài)。

        2、只用1和0兩種狀態(tài),是不能表達更多信息的。好在有一個物理量,對每個系統(tǒng)來講是統(tǒng)一的,那就是時間。我們現(xiàn)在很容易做到不同系統(tǒng)之間的定時誤差控制在PPM數(shù)量級。1和0在時間上進行有序的組合,就可表達近乎無限的信息。

        3、任何一個信號,如果不賦給它一些特點的意義,實際上沒什么用。兩個系統(tǒng)要通過信號交換信息,必須對信號有一個共同的約定,這就是我們通常所說的協(xié)議。

        4、最基本的協(xié)議是物理層面的(那個OSI的七層協(xié)議模型,第一層就是物理層協(xié)議)。RS232、RS485、RS422,這些是物理層面的一些協(xié)議。

        5、我們現(xiàn)在要談的是異步串行通訊。異步,發(fā)達方和接收方之間,沒有額外的通道來傳送信息何時傳送與接收。每個信息單元的起止時間,發(fā)送方編在信息中,由接收方自已解碼并同步。

        6、好。現(xiàn)在來講一下傳送一個字節(jié)的過程。在沒有傳送信息時,傳輸線處于空閑狀態(tài)。規(guī)定:空閑狀態(tài)為1。發(fā)送方(TX)準備發(fā)送,驅(qū)動傳輸線讓它由1變?yōu)?,并持一位的時間長度,我們把這一位叫做起始位。接收方(RX),檢測到傳輸線由1變0,意味著可能有信息要傳了,RX就持續(xù)檢測,以驗證這個0是不是持續(xù)了規(guī)定的一位時間長度,若是個合法的起始位,就按約定的定時方式,把后續(xù)的傳輸線狀態(tài),接收為1個字節(jié)。TX在發(fā)完起始位后,就發(fā)字節(jié)中的第一個位(bit),并依次把字節(jié)中的所有位發(fā)完,每bit均持續(xù)相同的一位時長。然后再發(fā)校驗位(如果約定發(fā)/收方都采用的話)、停止位。

        7、停止位,這個要說一下。我們知道起始位是0,而這個停止位,規(guī)定是1,和傳輸線的空閑狀態(tài)1是相同的。停止位規(guī)定的時長比較亂,有1位停止位(也就持續(xù)時間占1個位長)、1.5位、和2位停止位,其它時長的停止位好象沒見過。停止位的作用,其一是作為一字節(jié)單元的成員,給接收方定時用的,也就是下一個字節(jié),在停止位之后才開始。另一個作用,可供檢查字節(jié)傳送的完整性。因為停止位是規(guī)定為1狀態(tài)的,若在停止位的時間里測到了非1狀態(tài),表示這個字節(jié)傳送有問題,有可能被接收方丟棄,傳送失敗。

        8、若收發(fā)雙方的停止位不相同,怎么辦?這個在論壇上經(jīng)常有人問。好,我們來分析一下。若TX是2個停止位,RX要求是1個停止位,很好,TX多發(fā)的一個停止位,會被RX看作是空閑狀態(tài)(也可認為是字符間隔),沒有任何問題。若反過來,TX是1個停止位,RX要求是2個停止位,有問題嗎?一般問題是很大的,但也有可能可以正常通訊。這要看TX是怎么發(fā)字節(jié)的。有些系統(tǒng),硬件上,發(fā)送電路比較簡單,沒有緩沖機構(gòu),一個字節(jié)必須完整發(fā)送后,才準備下一個字節(jié)的數(shù)據(jù),而這個準備需要花一些時間的,這就給傳送的時序上,停止位之后,有了空閑時間,相當(dāng)于停止位得到了延長。所以我曾經(jīng)發(fā)過一個貼子說,S7200的發(fā)送改為單字節(jié)發(fā)送,每個字節(jié)之間有意插入一些延時,人為造成空閑時間,以充當(dāng)停止位,但這個方法說歸說,我并沒有試過。可惜的是,現(xiàn)在的系統(tǒng),硬件都做得很完美了,包括S7200,TX是有緩沖的,在一個字節(jié)還未發(fā)完前就可以接受下一個要發(fā)送的字節(jié),硬件上保證一個字節(jié)發(fā)完后可以立即啟動下一個字節(jié)發(fā)送,前后兩字節(jié)間除了停止位,沒有額外的間隙,這種情況下,接收方就要命了,RX認為還在收停止位時,下一個字節(jié)的起始位就來了,沒辦法完整接收,通訊就失敗了。

        9、波特率。兩邊設(shè)為一致就可以了。波特率不一致,鐵定不能通訊。但允許有少量的誤差。停止位實際上還用來調(diào)節(jié)這個誤差的。比如1個停止位,RX并不死板要求停止位是完整的1個位時長,實際只要停止位超過0.5個位長就算是合格了。波特率,就是每秒最快能傳送的位數(shù),包括了起始位、停止位這些輔助位。實際每秒能傳送的最快字節(jié)數(shù),要看這些輔助位的多少。比如一個11位結(jié)構(gòu)的字節(jié)單元:1起始位+8字節(jié)位+1校驗位+1停止位,字節(jié)最快傳送速率為band/11。好象還有一個概念,叫比特率,也就是有效的位傳送速率,比特率=8*(band/11),也就是比特率比波特率要小的。

        10、RS232的TX和RX是兩根獨立的線,收/發(fā)可以同時進行,所以叫作全雙工異步串行通訊。按我們?nèi)粘扇私徽劦慕?jīng)驗,總是A說B聽,當(dāng)B要說時,A就停下來聽B說。如果A、B同時說,這是吵架,要達到相互交流就難了。同樣,通訊若同時收發(fā),一般人會白白死掉很多腦細胞而寫出的程序通訊效果還是很差。所以,即使RS232能雙向同時, 一般使用時也是收、發(fā)不同時的。

        11、RS485。RS232不錯了,但局限性大大的。RS485收發(fā)同線,允許多少RS485并聯(lián)使用,電氣采用差分傳送信號,可以抗干擾。S7200就屬于RS485。RS485設(shè)備同一時間只能發(fā)或再改,收發(fā)是分時的,所以叫做準雙向。盡管S7200中可以同時緩沖8個NETR和NETW,實際在RS485層面,還是一個一個分時完成的(由系統(tǒng)程序根據(jù)PPI協(xié)議協(xié)調(diào))。RCV和XMT完全由用戶程序控制,你就不能同時讓兩個都執(zhí)行,否則就是哄搶資源而被S7200當(dāng)成錯誤處理。

        12、RS422,介于RS232和RS485。RS422和RS232一樣收、發(fā)線獨立,但電氣上采用和RS485一樣的差分信號。所以RS422能多機通訊,比RS232傳得遠,但比RS485浪費硬件資源。RS422只要軟件上采用準雙向的規(guī)則,通過發(fā)收線合并,可以簡化為RS485,和RS485設(shè)備通訊。但RS485卻不能復(fù)雜化成RS422使用。

        本文引用地址:http://www.104case.com/article/201612/331528.htm


        關(guān)鍵詞: 串行通訊傳輸通道物理

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阜康市| 什邡市| 东城区| 彩票| 阿拉尔市| 大足县| 定南县| 礼泉县| 西宁市| 宁蒗| 兖州市| 金沙县| 马公市| 乡宁县| 沽源县| 敖汉旗| 油尖旺区| 博野县| 盖州市| 麻栗坡县| 景德镇市| 建宁县| 磴口县| 石屏县| 社旗县| 宁德市| 永和县| 韩城市| 永康市| 富川| 永安市| 水富县| 山西省| 容城县| 庆云县| 丹棱县| 新绛县| 蓬莱市| 孟津县| 梅州市| 渭南市|