串列埠硬體流量控制說明
流量控制 對 串列埠而言,意味著 可以停止傳送 然後重新開始,而不丟失任何資料
用專用的控制線來發送 “停止”和“開始”訊號
RTS Request To Send 我可以接受資料,請求傳送資料給我
CTS Clear To Send 允許我傳送資料給你?
當一端 準備接受資料時, 它將RTS 升為 高電平(意思是 Request To Send to me).
如果它不能接受更多的資料時, 它將RTS降為 低電平(表示stop sending to me),
對於PC機, 或者non-modem這樣的終端裝置, 它的CTS線 與 另外一端的 RTS線相連線
Linux系統只支援RTS/CTS流量控制 (當然可以自己寫一個特殊驅動來支援DTR/DSR流量控制)
如果一端準備停止接受, 它就將RTS降為 -5V, 意思是, request NOT to send to me(停止傳送)
如果處理完畢,可以接受更多資料時,將RTS拉為 高電平, 接收的資料流 就恢復了
流控訊號的傳送方向,跟 資訊資料的傳送 方向恰好是相反的
有時候,這兩個訊號的定義,容易跟 原始的RTS的用途(I Request To Send to you)混淆,
用來請求傳送, 跟資料的流動方向相同。並且它只保護一個方向的資料流(從PC到modem的)
DTR,告訴別人自己上電了,可以操作了
硬體流控是靠軟體實現的,之所以強調“硬體”二字,僅僅是因為硬體流控提供了用於流量情況指示的硬體連線(CTS/RTS),並不是說,你只要把線連上,硬體就能自己流控。如果軟體不支援,光連上RTS和CTS是沒有用的。
軟體流控 不需要 額外的連線, 只需要TxD和RxD, 在資料通道上 傳送特殊的流量控制字元來實現
DCB.fOutxCtsFlow = TRUE 表示, DTE的CTS訊號在關閉狀態下, DTE將不能傳送資料, WriteFile() 會Pending狀態.