目前所有的個人電腦(PC)都是採用IBM的PC/AT基本架構,PC/AT的序列(Serial)通訊接合器(Adapter)COM埠 (Communication Port),原本是數據機(Modem)連接專用接合器插座,隨著非對稱數位用戶迴路(ADSL)的普及,利用數據機進行電腦網際網路通訊的盛況已不復見。不過,數據機接合器的COM埠依舊是個人電腦的標準配備,並在PC主機板的晶片組內部占有很大的空間,尤其是RS-232通訊介面的製作成本低廉,非常適合應用在不要求大量高速資料傳輸等通訊領域,已經成為電腦通訊不可或缺的重要技術,至今並未因為ADSL的出現而退出市場。
雖然RS-232通訊介面是PC與數據機之間的標準規格,不過RS-232通訊介面的規格,與隸屬於PC的序列通訊介面略有差異,序列通訊介面被歸類成類似RS-232的子集(Sub-set)。圖1是利用數據機進行電腦網際網路通訊的基本架構。
RS-232屬於非同步通訊
RS-232的非同步通訊分別使用一條送訊與收訊用序列通訊線,單純的資料通訊再加上一條地線(Ground)即可,RS-232最初是針對數據機開發,因此規定使用複數訊號線。而連接器(Connector)規格規定使用25支接腳的D-sub,不過幾乎所有的PC都改用9支接腳的D-sub,目前 EIA-574已經成為市場主流。
基本上,非同步通訊時9支接腳的D-sub不會有任何問題,然而規範包含同步通訊,此時則必須使用25支接腳的D-sub連接器。
類似PC等資料處理設備,在RS-232規範中稱為資料終端機(Data Terminal Equipment, DTE);被動處理數據機的設備稱為線路終端機(Data Circuit Terminating Equipment, DCE),至於線路則是指一般大眾電話線路而言。
表1是RS-232的D-Sub連接器外觀與接腳定義,表2則是RS-232的電氣規格一覽。為提高噪訊範圍(Noise Margin),因此RS-232規範要求電源電壓為±15伏特(V),由於輸入條件為±3V,這意味著電源電壓低於±15伏特時也能夠動作。「0」的位元稱為空格(Space),「1」的位元稱為符號(Mark),「0」的位元為正電壓,「1」的位元為負電壓。
如上所述RS-232屬於非同步通訊,所謂非同步表示它無同步的時脈(Clock),因此從送訊端送來的序列資料復原時,必須以受訊端的時脈讀取資料。而若採同步方式,送訊端會同時傳送資料與時脈,因此只要依照該時脈復原資料即可,相形之下非同步方式會出現時脈偏差。此處假設振盪器的精度為1%,讀入 100位元時會產生大約1位元的誤差,這對資料通訊是致命性缺失。
如圖2所示非同步通訊必須在資料前後添加起始位元與結束位元,起始位元是1位元的「符號」,結束位元是1~2位元的「空格」。起始位元與結束位元兩者的間隔取決於資料的位元數,只要檢測這兩個位元就能夠使資料正確收訊。
此外,上述資料也可以添加同等(Parity)位元,無同等位元時,如果將結束位元設定成1位元,會變成全部以10位元進行1位元組(Byte)的通訊,此時收訊端只要讀取各10位元組的資料即可,即使1%的振盪器精度也不會發生問題。
實際上,序列通訊的控制是由電腦內部的控制器執行,因此只要正確設定控制器,就可以順利進行資料通訊作業。序列通訊以逗號(Comma)切割同等資料位元長度與結束位元長度,例如9,600bit/s的通訊速度,資料位元為8位元,無同等位元時以「9,600,n,8,1」方式表示。
RS-232的通訊速度規範低於20kbit/s,不過PC內建序列控制器卻能夠支援比20kbit/s更高的資料通訊;而PC未內建控制器的場合,則由於微處理器的動作相當快,因此9,600bit/s的通訊速度,只要利用軟體作I/O控制就可以達成序列通訊。
雖然非同步通訊的RS-232使用8條訊號線,不過序列通訊只使用送、收訊2條訊號線,其他6條是數據機控制用訊號線,值得一題的是,這些訊號線經常應用在流量(Flow)控制,因此設計者必須熟悉各條訊號線的定義,茲分析如下:
圖3為利用數據機時的RS-232訊號流程,具體動作為首先DTE端的埠被開啟,一旦進入可以通訊狀態就會使DTR變成ON,接著數據機接收DTE並將 DSR通知DTE「數據機端可以進行通訊」,DTE通知DCE「收訊緩衝器呈空檔狀態可以收訊」並將RTS開啟,DCE透過大眾電話線路確定與對方的數據機連接,同時將DCD與CTS開啟並通知DTE,DTE確認CTS變成ON,開始從TxD對數據機傳送資料。
以上是開始送訊的作業程序,送訊結束作業順序剛好相反,DTE先將RTS關閉,通知DCE不再收訊,DCE接到通知立即切斷大眾電話線路將CTS關閉,通知DTE無法從數據機送訊。大眾電話線路一旦被切斷,就無法檢測載波,DCD變成OFF狀態,DTE關閉通訊埠與DTR,DCE接到通知再將DSR關閉結束通訊作業。
適時進行流量控制
利用PC進行序列通訊時,為了避免收訊緩衝器滿載(Buffer Full)造成資料滿溢,必須透過硬體進行流量控制。硬體流量控制通常使用DTR、DSR或是RTS與CTS,DTE的場合收訊緩衝器沒有空間,無法收訊之前會將DTR或是RTS關閉,等待來自DCE的送訊。
此外,送訊時會先確認DSR或是CTS,DCE無法收訊時,停止送訊一直到DCE可以收訊為止。DCE端送訊時會先確認DSR或是RTS,停止送訊一直到 DTE可以送訊為止,DCE的收訊緩衝器一旦沒有空間,會關閉DSR或是CTS使來自DTE的送訊停止。整體而言,RS-232與數據機通訊不同,不須要同時進行上述4條訊號線的控制,只要備妥DTR、DSR或是RTS與CTS其中的對線(Pair)即可。圖4是RS-232的流量控制訊號接線圖。
圖5是一般PC內部的RS-232介面電路,本電路屬於DTE用。DCE的場合輸出、入的關係剛好相反。圖6是圖5內使用的MAX211的接腳圖與內部區塊圖,MAX211內建電荷泵(Charge Pump)電路,可以在內部產生±12伏特的電壓,因此只要使用5伏特單電源即可,相當方便。
PIC微處理器的RS-232通訊技術
圖7是PIC16F648A構成的RS-232通訊介面電路;圖8是MAX232A的接腳圖與內部區塊圖。由於PIC16F648A內建振盪電路,因此可以省略外部振盪電路。此外,PIC16F648A還內建序列通訊模組(Universal Synchronous Asynchronous Receiver Transmitter, USART),它可以進行非同步與同步通訊。圖9是PIC16F648A序列通訊模組的USART內部區塊圖。
PIC16F648A的USART初始化,使用TXSTA,RCSTA,SPBRG三個控制暫存器(Register)。圖10是TXSTA暫存器的位元定義;圖11是RCSTA暫存器的位元定義。SPBRG暫存器的值由時脈頻率與位元率(Bit Rate)兩者的組合決定,表3是SPBRG暫存器的設定值;圖12是PIC16F648A序列通訊的示範程式。PIC具備硬體堆疊(Stack)不須要作堆疊指標(Pointer)的初始化,周邊電路能夠以標準使用方式初始化。至於振盪電路的選擇為Boot時,必要的資訊可以寫入結構記憶體 (Configuration Memory)特殊領域內。程式寫入PIC時,結構記憶體能夠以寫入軟體設定該值,由於PIC的軟體幾乎不須進行初始化也能夠動作,因此使用上非常方便。
由圖12的示範程式可知,序列埠的初始化,必須以「void serialInit(char rateScaler)」參數執行,引數的「rateScaler」必須配合使用Board Rate,才能夠設定SPBRG暫存器的值。而序列送訊必須以「void serialSendChar(char value);」參數執行,如此一來,以value指定的資料會被序列送訊。
序列送訊時會檢查TXSTA暫存器的TRMT位元,一直等待直到變成可以送訊狀態為止,一旦進入送訊狀態立即設定TXREG傳送資料。至於,序列的收訊必須以「char serialReceiverChar( );」參數執行,該參數執行等待資料被收訊,一旦被收訊就會將收訊資料送返。資料的收訊flag為PIRIG暫存器的RCIF flag,收訊後的資料成為RCREG暫存器的值。
確認RS-232訊號傳送動作
動作確認以Windows附屬的超級終端(Hyper Terminal)等終端軟體執行。具體步驟為首先利用直纜線(Straight Cable)將上述硬體與PC的序列埠連接,在用超級終端等終端軟體開啟COM埠。
此時如果設定或是硬體布線都正確無誤時,其結果會直接顯示在終端畫面上,如果未動作就必須重新檢查纜線型式,同時修正或是調整硬體布線與原始 (Source)程式。此外,DTE與DCE很容易混淆,DTE的場合TxD、RxD與RTS、CTS的輸出、入關係剛好相反,必須格外注意。
提升RS-232通訊距離與速度
RS-232原本是數據機連接PC用通訊介面規範,RS-232最大缺點是資料傳輸距離很短,而且傳輸速度非常緩慢,高速且長距離資料傳輸時,通常會改用 RS-422與RS-485等通訊介面規範。表4是RS-232、RS-422、RS-423與RS-485各種高速通訊介面規範的比較。
RS-422可以取代傳統RS-232驅動/接收IC,RS-422的驅動/接收IC與RS-232一樣分為MAX3085E與MAX3086E兩種,前者是半雙工通訊用,後者是全雙工通訊用驅動/接收IC。
圖13是RS-422驅動/接收IC MAX3086E的接腳配置圖及全雙工電路圖。RS-232要求±12伏特的電源電壓,採用可以使5伏特動作的電荷泵電路,相較之下,RS-422不需要該電路,因此結構上相當簡潔。
RS-485基本結構與RS-422相同,RS-422屬於1對1的通訊,相較之下,RS-485可以連接匯流排。RS-485與RS-422兩者的電氣規格幾乎相同,因此,可以使用相同的驅動/接收IC,也就是說RS-485可使用MAX3085E與MAX3086E兩種驅動/接收IC,圖14是 MAX3086E構成的全雙工RS-485網路。
以單晶片微處理器使用RS-422/485
以單晶片微處理器使用RS-422時,必須使用RS-422驅動/接收IC。圖15是MAX3086E單晶片微處理器構成的RS-422使用方法,圖16 的MAX3086E單晶片微處理器,並沒有進行流量控制,一般而言,要求流量控制的應用場合,須使用兩顆MAX3086E單晶片微處理器。
基本上,RS-485與RS-422的驅動/接收IC,在相同網路上可以複數連接的是兩者主要差異,亦即每次可以送訊的驅動器,在相同網路只有一台,實際上卻變成1對n台。在相同網路連接複數台的驅動/接收器時,相對必須在應用階段進行調解通訊,較普遍使用的典型方法,是利用RS-485將PC與複數台的量測器連接至相同的網路上,接著在實際應用階段進行下列通訊,藉此避免通訊相互競爭:
換言之,將資料通訊作成固定長度的囊袋狀(Pocket),理論上就可以獲得更精確的通訊結果。