1. 何謂串口?
串口幾乎為所有計算機的裝置通訊協(xié)議標準。請別與通用串行總線 (Universal serial bus,USB) 產(chǎn)生混肴。大多數(shù)的計算機均配備 2 組 EIA-232 架構(gòu)的串行端口。串口亦為常見的通訊協(xié)議,適用于控制多種儀器設(shè)備,并可搭配 EIA-232 通訊端口使用多款 GPIB 兼容的裝置。此外,用戶可透過數(shù)據(jù)擷取的串口通訊功能,進而整合遠程取樣裝置。請注意,EIA-232 與 EIA-485/422 亦可為所謂的 RS-232 與 RS-485/422。
串口通訊的概念極為簡單。串行端口將同時傳送并接收 1 個位 (Bit) 的信息字節(jié) (Byte)。雖然此傳輸量低于并行通訊作業(yè),卻可傳輸完整的字節(jié);適用于較長距離的通訊作業(yè)。以 IEEE 488 規(guī)格的平行通訊作業(yè)為例,設(shè)備之間的接線總長度不得超過 20米(65英尺);任兩組裝置之間的長度不超過 2米(6.5英尺)。而串口卻可達最長 1200米(4000英尺)。
?
一般情況下,工程師均使用串行傳輸 ASCII 數(shù)據(jù)。并透過三種傳輸線完成通訊作業(yè) - 接地線 (Ground)、傳送線 (Transmit)與接收線 (Receive)。由于串口屬于異步化,因此串行端口可于其中 1 個信道傳送數(shù)據(jù),并于另 1 個信道接收數(shù)據(jù)。其他通道可視情況而進行握手(Handshaking)。重要的串口特性為波特率 (Baud rate)、數(shù)據(jù)位、停止位 (Stop bit),與奇偶同位 (Parity)。若要溝通兩組通訊端口,則必須符合這些參數(shù):
1、波特率 (Baud rate) 為通訊的速度量測作業(yè),顯示每秒所傳輸?shù)奈粩?shù)。舉例來說,300 波特率即為每秒達 300個位。工程師所稱的頻率周期 (Clock cycle) 即為波特率;若協(xié)議呼叫信號 (Protocol call) 為 4800 波特率,意即頻率為 4800 Hz。亦表示串行端口以 4800 Hz 的速率,進行數(shù)據(jù)信道的取樣。常見的電話線路波特率為 14400、28800,與 33600。波特率當然可以大于上述這些數(shù)字,但這些速率將限制設(shè)備之間的距離。因此高波特率均用于裝置距離相近的通訊作業(yè),常見的即為 GPIB 裝置。
2、數(shù)據(jù)位數(shù) (Data bit),代表傳輸作業(yè)中的實際數(shù)據(jù)位。當計算機傳送信息框架 (Frame) 時,實際數(shù)據(jù)總數(shù)可能不滿 8 位??蚣艿臉藴蕯?shù)值為 5、7,與 8 位。應(yīng)根據(jù)所傳輸?shù)男畔ⅲx擇所需的設(shè)定。舉例來說,標準 ASCII 可為 0 ~ 127 的數(shù)值 (7 位)。延伸的 ASCII 則使用 0 ~ 255 (8 位)。若傳輸中的數(shù)據(jù)為標準 ASCII,則各個框架若能傳送 7 位數(shù)據(jù),即屬高效率的通訊作業(yè)。1 個框架即為單一字節(jié) (Byte) 的傳輸,包含開始/停止 (Start/stop) 位、數(shù)據(jù)位,與奇偶校驗 (Parity)。由于所選的通訊協(xié)議將影響實際位數(shù),因此可使用“框架 (Frame)”代表所有的范例。
停止位 (Stop bit) 可針對單一框架的通訊作業(yè)末端發(fā)出信號。常見數(shù)值為 1、1.5,與 2 位。由于數(shù)據(jù)將受到跨信道的頻率所影響,而各組裝置又具有自己的頻率,因此任 2 組裝置可能會稍稍落后同步化作業(yè)。因此,停止位不僅可指出傳輸作業(yè)末端,并可為計算機頻率速度提供發(fā)生錯誤的空間。停止位所占的位數(shù)越多,則不同頻率的同步化越具彈性;但亦將拖慢傳輸速度。
3、奇偶校驗 (Parity) 為串口通訊作業(yè)錯誤檢查的簡易形式。奇偶校驗具分為 4 種類型 – Even、Odd、Marked,與 Spaced。亦可不使用奇偶校驗。針對 Even 與 Odd,串行端口將設(shè)定奇偶校驗位 (Parity bit,為數(shù)據(jù)位之后的最后 1 個位) 為 1 個數(shù)值,以確認該傳輸作業(yè)具有邏輯高位 (Logic-high) 位的 Even 或 Odd 數(shù)。舉例來說,若資料為 011,針對 Even 奇偶校驗的奇偶校驗位則為 0,才能讓邏輯高位位的數(shù)字為 Even。在奇偶校驗為 Odd 的情況下,奇偶校驗位「1」將導致「3」的邏輯高位位。Marked 與 Spaced 的奇偶校驗將不會實際檢查數(shù)據(jù)位,但會根據(jù) Marked 奇偶校驗設(shè)定高的奇偶校驗位,或根據(jù) Spaced 奇偶校驗設(shè)定低的奇偶校驗位。此將讓接收裝置了解位的狀態(tài),以進一步判定噪聲是否使數(shù)據(jù)發(fā)生中斷,或傳送與接收裝置是否尚未同步化。
2. EIA-232 概述
EIA-232 為 IBM 兼容計算機架構(gòu)的串口鏈接功能,可用以連接計算機與傳感器/調(diào)制解調(diào)器,或用于儀器控制等許多功能。EIA-232 硬件可達最長 15 公尺的通訊距離。EIA-232 限用于計算機串行端口與裝置之間的點對點連結(jié)。因此,計算機往往需要額外的 EIA-232 串行端口。標準計算機 EIA-232 串行端口與許多串行接口的制造商,將試圖平衡 Win32 API 于串口通訊函數(shù)調(diào)用中的功能。Win32 API 原來是設(shè)計用于調(diào)制解調(diào)器通訊作業(yè),且并未建置完整的 EIA-232 協(xié)議?;诖隧椣拗?,Win32 API 并無法溝通某些裝置。
NI 則提供多款平臺的 EIA-232 串行接口,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網(wǎng)絡(luò)。根據(jù)所使用的平臺,NI 串行接口卡提供 1、2、4、8,與 16 埠的版本。此外,NI EIA-232 串行接口卡更提升了某些功能,如最高 1 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設(shè)定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅(qū)動程序,可建置完整的 EIA-232 協(xié)議,并針對應(yīng)用開發(fā)作業(yè)提供簡單易用的高階功能。NI-Serial 驅(qū)動程序可彌補 Win32 API 的缺點,亦即任何 EIA-232 架構(gòu)的裝置,均可搭配使用 NI 串口裝置。
3. EIA-422 概述
EIA-422 為蘋果公司麥金塔 (Mac) 計算機的串口鏈接接口。與 EIA-232 所使用的非平衡式信號 (Unbalanced signal) 相較,EIA-422 使用截然不同的電子信號。EIA-422 的差動傳輸 (Differential transmission),就是透過 2 組線路以各自進行信號的傳輸與接收,因此其抗擾性與傳輸距離的表現(xiàn)均優(yōu)于 EIA-232。在工業(yè)級應(yīng)用中,抗擾性 (Noise immunity) 與傳輸距離可享有較佳的優(yōu)勢。
NI 則提供多款平臺的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網(wǎng)絡(luò)。根據(jù)所使用的平臺,NI 串行接口卡具有 1、2、4,與 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多項功能,如最高 3 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設(shè)定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅(qū)動程序,可建置完整的 EIA-485/422 協(xié)議,并針對應(yīng)用開發(fā)作業(yè)提供簡單易用的高階功能。
4. EIA-485 概述
EIA-485 為 EIA-422 的改良版本,從原本的 10 組裝置提高至 32 組裝置,并定義必要的電子特性參數(shù),于最大負載保持適當?shù)男盘栯妷骸M高^增強的多端點 (Multidrop) 功能,即可透過單一 EIA-485 串行端口進行裝置的網(wǎng)絡(luò)鏈接作業(yè)。EIA-485 的抗擾性與多端點功能,使其成為工業(yè)級應(yīng)用的串口連結(jié)首選,適于將多款分布式裝置連接至計算機或其他控制器,以進行于數(shù)據(jù)搜集、HMI,與其他作業(yè)。EIA-485 集 EIA-422 的優(yōu)點于一身,因此所有的 EIA-422 裝置亦可由 EIA-485 進行控制。透過 EIA-485 硬件,串口通訊作業(yè)可達最長 1200米(4000英尺)的連接線總長度。
NI 則提供多款平臺的 EIA-485/422 串行接口卡,包含 PCI、USB、PCMCIA、ExpressCard、PXI,與以太網(wǎng)絡(luò)。根據(jù)所使用的平臺,NI 串行接口卡具有 1、2、4,與 8 埠的版本。此外,NI EIA-485/422 串行接口卡更新增了多項功能,如最高 3 Mb/s 的高速波特率、透過 DMA 傳輸方式而降低 CPU 使用率、可選購的 2000 V 埠對埠隔離,與可設(shè)定的非標準波特率。所有的 NI 串行接口卡均包含 NI-Serial 驅(qū)動程序,可建置完整的 EIA-485/422 協(xié)議,并針對應(yīng)用開發(fā)作業(yè)提供簡單易用的高階功能。
5. NI 串行接口卡接頭的輸出針腳 (Pinout)

DB-9 Male
DB-25 Male
10-Position Modular Jack
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
Pin
EIA-232
EIA-485/422
1
DCD
GND
2
TXD
RTS+ (HSO+)
1
No Connect
No Connect
2
RXD
CTS+ (HSI+)
3
RXD
CTS+ (HSI+)
2
RI
TXD-
3
TXD
RTS+ (HSO+)
4
RTS
RTS- (HSO-)
3
CTS
TXD+
4
DTR
RXD+
5
CTS
TXD+
4
RTS
RTS- (HSO-)
5
GND
RXD-
6
DSR
CTS- (HSI-)
5
DSR
CTS- (HSI-)
6
DSR
CTS- (HSI-)
7
GND
RXD-
6
GND
RXD-
7
RTS
RTS- (HSO-)
8
DCD
GND
7
DTR
RXD+
8
CTS
TXD+
20
DTR
RXD+
8
TXD
RTS+ (HSO+)
9
RI
TXD-
22
RI
TXD-
9
RXD
CTS+ (HSI+)
-
-
-
-
-
-
10
DCD
GND
6. 何謂握手 (Handshaking)?
此 EIA-232 通訊作業(yè),可進行 3 種線路的簡易鏈接作業(yè) - Tx、Rx,與接地。然而,針對所要傳輸?shù)臄?shù)據(jù),其2端均需以相同波特率進行數(shù)據(jù)的頻率化 (Clocking)。雖然此方式適用于大多數(shù)的應(yīng)用,此功能卻受限于系統(tǒng)對問題的反應(yīng)速度,如發(fā)生過載 (Overloaded) 的接收器。而串口握手 (Handshaking) 可協(xié)助解決相關(guān)問題。3 種最常見的 EIA-232 握手形式,即為軟件握手、硬件握手,與 Xmodem。
軟件握手
此方式是將數(shù)據(jù)字節(jié)作為控制字符 (Control character),近似于 GPIB 使用命令字符串 (Command string) 的方式。由于控制字符可透過傳輸線路,如正常數(shù)據(jù)般進行傳輸,因此亦可整合 Tx、Rx,與接地而成簡易的 3 線式集合。透過 SetXMode 函式,即可啟用或停用 2 個控制字符:XON 與 XOFF。數(shù)據(jù)接收器將傳送這些字符,以于通訊期間暫停傳送器。
此方式的最大缺點,也是最重要的概念:數(shù)據(jù)值將不再使用 Decimal 17 與 19。由于這些數(shù)值為無字符 (Noncharacter) 數(shù)值,因此往往不會影響 ASCII 的傳輸作業(yè);然而,若以二進制法傳輸數(shù)據(jù),則極可能將這些數(shù)值作為數(shù)據(jù)進行傳輸,導致傳輸作業(yè)發(fā)生錯誤。
硬件握手
此方式將使用實際的硬件線路。如同 Tx 與 Rx 線路一般,RTS/CTS 與 DTR/DSR 線路可搭配使用。若其中 1 個線路為輸出,則另 1 個線路即為輸入。
第一種線路集為 RTS (Request to Send) 與 CTS (Clear to Send)。當接收器可接收資料時,則將插入 (Assert) RTS 線路,表示接收器已可接收資料。接著將由 CTS 輸入線路的傳送器讀取此訊息,表示已可傳送數(shù)據(jù)。
第二種線路集為 DTR (Data Terminal Ready) 與 DSR (Data Set Ready)。由于此種線路可讓串行端口與調(diào)制解調(diào)器之間通訊現(xiàn)有狀態(tài),因此主要用于調(diào)制解調(diào)器的通訊作業(yè)。舉例來說,當調(diào)制解調(diào)器可為計算機傳送數(shù)據(jù)時,將先中斷 DTR 線路,代表目前是透過電話線進行鏈接作業(yè)。接著 DSR 線路將讀取該訊息,計算機則開始傳送數(shù)據(jù)。在一般情況下,DTR/DSR 線路是用以表示系統(tǒng)可進行通訊作業(yè),而 RTS/CTS 線路則用于獨立的數(shù)據(jù)框架。
在 LabWindows/CVI 中,SetCTSMode 函式將啟用或停用硬件握手。若已啟用 CTS 模式,則 LabWindows/CVI 將依循下列規(guī)則:
計算機傳送數(shù)據(jù)時:
EIA-232 函式庫必須于傳送數(shù)據(jù)之前,偵測該 CTS 線路為高 (High) 狀態(tài)。
計算機接收數(shù)據(jù)時:
若通訊端口為開啟狀態(tài),且輸入隊列具有容納數(shù)據(jù)的空間,則函式庫將引發(fā) (Raise) RTS 與 DTR。
若通訊端口輸入隊列已達 90%,則函式庫將降低 RTS 并提升 DTR。
若通訊端口輸入隊列近乎空白,則函式庫將引發(fā) RTS 并保持 DTR 為高狀態(tài)。
若通訊端口為關(guān)閉,則函式庫將降低 RTS 與 DTR。
XModem 握手
雖然此種協(xié)議已普遍用于調(diào)制解調(diào)器通訊作業(yè),若其他裝置均可使用此種協(xié)議,仍可直接于裝置之間使用 XModem 協(xié)議。在 LabWindows/CVI 中,使用者可選擇是否隱藏實際的 XModem 建置。只要計算機透過 XModem 協(xié)議連接其他裝置,即可使用 LabWindows/CVI 的 XModem 函式,以傳送檔案至其他地址 (Site)。該函式為 XModemConfig、XModemSend,與 XModemReceive。
根據(jù)下列參數(shù)使用協(xié)議:start_of_data、end_of_trans、neg_ack、ack、wait_delay、start_delay、max_tries,與 packet_size。傳輸數(shù)據(jù)的 2 邊必須同時認可這些參數(shù),而 XModem 則提供相關(guān)標準定義。然而,使用者可透過 LabWindows/CVI 中的 XModemConfig 函式修改這些參數(shù),以符合任何需求。在接收器 (Receiver) 傳送 neg_ack 字符之后,即可于 XModem 中使用這些參數(shù)。此字符將告訴傳送器 (Sender) 已準備好接收資料。于每次傳輸嘗試之間,接收器均將使用 start_delay 時間,直到滿足 max_tries 或接收到傳送器的 start_of_data。若滿足 max_tries,則接收器將提醒使用者目前無法溝通傳送器。若的確接收到傳送器的 start_of_data,則接收器將讀取后續(xù)的信息封包。此封包具有封包號碼、可檢查錯誤的封包補充碼、packet_size 字節(jié)的實際數(shù)據(jù)封包,與用于更多錯誤檢查的數(shù)據(jù)總和檢查碼 (Checksum)。在讀取數(shù)據(jù)之后,接收器將呼叫 wait_delay,并于稍后傳送認可字符 (Ack) 回傳送器。若傳送器未接受到 ack,則將重新傳送 max_tries 數(shù)據(jù)封包,直到接收 ack 為止。若傳送器一直未接收 ack,則將通知使用者傳送檔案失敗。
由于傳送器必須以 packet_size 字節(jié)的封包傳送數(shù)據(jù),因此若沒有足夠數(shù)據(jù)填滿最后的封包,則傳送器將使用 ASCII NULL (0) 字節(jié)填滿數(shù)據(jù)封包。如此將使接收檔案大于源文件。由于 XModem 傳輸作業(yè)的封包號碼,極可能增加 XON/OFF 控制字符而造成通訊中斷,因此 XModem 協(xié)議并不適合搭配使用 XON/XOFF。
電子發(fā)燒友App













評論