Linux開發板啟動階段除錯串列埠無法輸入原因解析
在專案中,我用secureCRT試圖連線我的開發板,一直連不上,如下圖:
接下來的事情,就是敲擊鍵盤,都無法有任何反應。開始以為是RX和TX的斷線造成的。當然肯定不是這個問題。下面看一下我的串列埠的原理圖:
我用的是J30這個串列埠,上面J29也是一個串列埠,我們會發現有個差別,上面2腳和下面2腳,名稱不一樣。一個是RXDC1,一個CTSC1。我搜了一下,CTS這個東西。這個東西叫流控。那什麼是流控?下面上一下百度的結果,大家理解一下。
還是先引用一些文字,來自Telit公司GM862 QUAD/PY的資料手冊
Pin Signal I/O Function
20 C103/TXD I Serial data input (TXD) from DTE
29 C106/CTS O Output for Clear to send signal (CTS) to DTE
33 C107/DSR O Output for Data set ready signal (DSR) to DTE
37 C104/RXD O Serial data output to DTE
43 C108/DTR I Input for Data terminal ready signal (DTR) from DTE
45 C105/RTS I Input for Request to send signal (RTS) from DTE
注意上面各個功能的I/O的方向,看到這些縮寫的全稱,結合訊號流向,是不是更容易理解呢
DTE是資料傳送的主動方,DCE是資料的接受方。
CTS是讓DTE明白的,也就是說DCE需要把自己的CTS給DTE看,讓他知道DEC已經準備好接受資料了。
RTS是DTE給DCE看的,告訴DCE,DTE有資料要發。
DB9只有9根線,遵循RS232標準。定義如下:
DTR,DSR------DTE裝置準備好/DCE裝置準備好。主流控訊號。
RTS,CTS------請求傳送/清除傳送。用於半雙工時,收發切換。屬於輔助流控訊號。半雙工的意思是說,發的時候不收,收的時候不發。那麼怎麼區 分收發呢?預設時是DCE向DTE傳送資料,當DTE決定向DCE發資料時,先有效RTS,表示DTE希望向DCE傳送,一般DCE不能馬上轉換收發狀 態,DTE就通過監測CTS是否有效來判斷可否傳送,這樣避免了DTE在DCE未準備好時傳送所導致的資料丟失。
全雙工時,這兩個訊號一直有效即可。
我的理解是,這個串列埠根本沒有流控的功能,所以,我在開始連線串列埠的時候,右邊點選了流控,所以,預設終端會認為對方沒有傳送完(也就是沒有啟動完),然後,不接收終端的任何輸入。然後只要去掉點選的流控,就ok了,這個是點小問題,記下來。希望對大家有幫助。