串行通訊的一些認識
1、串行通訊只有一個傳輸通道,每個時刻只能表達一種狀態。不管什么介質,不管是什么信號,我們用1表示一種狀態,用0表示另一種狀態。
2、只用1和0兩種狀態,是不能表達更多信息的。好在有一個物理量,對每個系統來講是統一的,那就是時間。我們現在很容易做到不同系統之間的定時誤差控制在PPM數量級。1和0在時間上進行有序的組合,就可表達近乎無限的信息。
3、任何一個信號,如果不賦給它一些特點的意義,實際上沒什么用。兩個系統要通過信號交換信息,必須對信號有一個共同的約定,這就是我們通常所說的協議。
4、最基本的協議是物理層面的(那個OSI的七層協議模型,第一層就是物理層協議)。RS232、RS485、RS422,這些是物理層面的一些協議。
5、我們現在要談的是異步串行通訊。異步,發達方和接收方之間,沒有額外的通道來傳送信息何時傳送與接收。每個信息單元的起止時間,發送方編在信息中,由接收方自已解碼并同步。
6、好。現在來講一下傳送一個字節的過程。在沒有傳送信息時,傳輸線處于空閑狀態。規定:空閑狀態為1。發送方(TX)準備發送,驅動傳輸線讓它由1變為0,并持一位的時間長度,我們把這一位叫做起始位。接收方(RX),檢測到傳輸線由1變0,意味著可能有信息要傳了,RX就持續檢測,以驗證這個0是不是持續了規定的一位時間長度,若是個合法的起始位,就按約定的定時方式,把后續的傳輸線狀態,接收為1個字節。TX在發完起始位后,就發字節中的第一個位(bit),并依次把字節中的所有位發完,每bit均持續相同的一位時長。然后再發校驗位(如果約定發/收方都采用的話)、停止位。
7、停止位,這個要說一下。我們知道起始位是0,而這個停止位,規定是1,和傳輸線的空閑狀態1是相同的。停止位規定的時長比較亂,有1位停止位(也就持續時間占1個位長)、1.5位、和2位停止位,其它時長的停止位好象沒見過。停止位的作用,其一是作為一字節單元的成員,給接收方定時用的,也就是下一個字節,在停止位之后才開始。另一個作用,可供檢查字節傳送的完整性。因為停止位是規定為1狀態的,若在停止位的時間里測到了非1狀態,表示這個字節傳送有問題,有可能被接收方丟棄,傳送失敗。
8、若收發雙方的停止位不相同,怎么辦?這個在論壇上經常有人問。好,我們來分析一下。若TX是2個停止位,RX要求是1個停止位,很好,TX多發的一個停止位,會被RX看作是空閑狀態(也可認為是字符間隔),沒有任何問題。若反過來,TX是1個停止位,RX要求是2個停止位,有問題嗎?一般問題是很大的,但也有可能可以正常通訊。這要看TX是怎么發字節的。有些系統,硬件上,發送電路比較簡單,沒有緩沖機構,一個字節必須完整發送后,才準備下一個字節的數據,而這個準備需要花一些時間的,這就給傳送的時序上,停止位之后,有了空閑時間,相當于停止位得到了延長。所以我曾經發過一個貼子說,S7200的發送改為單字節發送,每個字節之間有意插入一些延時,人為造成空閑時間,以充當停止位,但這個方法說歸說,我并沒有試過。可惜的是,現在的系統,硬件都做得很完美了,包括S7200,TX是有緩沖的,在一個字節還未發完前就可以接受下一個要發送的字節,硬件上保證一個字節發完后可以立即啟動下一個字節發送,前后兩字節間除了停止位,沒有額外的間隙,這種情況下,接收方就要命了,RX認為還在收停止位時,下一個字節的起始位就來了,沒辦法完整接收,通訊就失敗了。
9、波特率。兩邊設為一致就可以了。波特率不一致,鐵定不能通訊。但允許有少量的誤差。停止位實際上還用來調節這個誤差的。比如1個停止位,RX并不死板要求停止位是完整的1個位時長,實際只要停止位超過0.5個位長就算是合格了。波特率,就是每秒最快能傳送的位數,包括了起始位、停止位這些輔助位。實際每秒能傳送的最快字節數,要看這些輔助位的多少。比如一個11位結構的字節單元:1起始位+8字節位+1校驗位+1停止位,字節最快傳送速率為band/11。好象還有一個概念,叫比特率,也就是有效的位傳送速率,比特率=8*(band/11),也就是比特率比波特率要小的。
10、RS232的TX和RX是兩根獨立的線,收/發可以同時進行,所以叫作全雙工異步串行通訊。按我們日常兩人交談的經驗,總是A說B聽,當B要說時,A就停下來聽B說。如果A、B同時說,這是吵架,要達到相互交流就難了。同樣,通訊若同時收發,一般人會白白死掉很多腦細胞而寫出的程序通訊效果還是很差。所以,即使RS232能雙向同時, 一般使用時也是收、發不同時的。
11、RS485。RS232不錯了,但局限性大大的。RS485收發同線,允許多少RS485并聯使用,電氣采用差分傳送信號,可以抗干擾。S7200就屬于RS485。RS485設備同一時間只能發或再改,收發是分時的,所以叫做準雙向。盡管S7200中可以同時緩沖8個NETR和NETW,實際在RS485層面,還是一個一個分時完成的(由系統程序根據PPI協議協調)。RCV和XMT完全由用戶程序控制,你就不能同時讓兩個都執行,否則就是哄搶資源而被S7200當成錯誤處理。
12、RS422,介于RS232和RS485。RS422和RS232一樣收、發線獨立,但電氣上采用和RS485一樣的差分信號。所以RS422能多機通訊,比RS232傳得遠,但比RS485浪費硬件資源。RS422只要軟件上采用準雙向的規則,通過發收線合并,可以簡化為RS485,和RS485設備通訊。但RS485卻不能復雜化成RS422使用。


評論