串口通訊(上)——基礎概念
通訊協議
通訊協議分為物理層和協議層。
- 物理層:規定通訊系統中具有機械、電子功能部分的特性,確保原始數據在物理媒體的傳輸;
- 協議層:規定通訊邏輯,統一收發雙方的數據打包、解包標準。
串口通訊物理層之RS-232
RS-232標準主要規定了信號用途、通訊介面和信號電平標準。如圖9-1為常見的設備間串口通訊結構圖。
如上圖所示,每個設備都有一個DB9介面,通過DB9介面連接RS-232標準的串口線進行數據傳輸。由於通過RS-232標準傳輸的電平信號到達設備後,不能直接被識別,所以會通過電平轉換晶元(例如MAX3232、SP3232晶元等)轉換成能識別的TTL電平信號,實現通訊。
相互通訊的兩個設備間,一個設備發送數據,一個設備接收數據。一般情況下,發送數據的設備稱為DTE,如計算機;接收數據的設備稱為DCE,如數據機。
這裡需要介紹下DB9介面。如圖9-2為DB9標準的公頭、母頭接法(接線口以針式引出信號線為公頭,以孔式引出信號線為母頭)。
圖9-2如上圖,以公頭為例,有9條信號線,其中,
- RXD:用於接收DCE發來的數據信號,即輸入;
- TXD:用於發送DTE的信號,即輸出。公頭和母頭的RXD和TXD應交叉連接;
- GND:用於平衡設備雙方的地電位,即共地。
其他信號線如DCD、DTR、DSR、RTS、CTS等,使用邏輯1表示有效信號,邏輯0表示無效信號。如DTE端的RTS信號線置1時,是為了告知DCE設備本機已準備好接收數據,而置0則表示未準備就緒。
串口通訊協議層
協議層規定了數據包的內容,內容包含了起始位、主體數據、校驗位及停止位,雙方需要約定一致的數據包格式才能正常收發數據。如圖9-3為數據包的基本組成。
圖9-3波特率
串口非同步通訊中由於沒有時鐘信號,所以通訊雙方需要約定好波特率,即每個碼元的長度,以便對信號進行解碼。常見的波特率有4800、9600、115200等。
起始位、停止位
數據包從起始位開始,到停止位結束。起始信號用邏輯0的數據位表示,停止信號由0.5、1、1.5或2個邏輯1的數據位表示,只要雙方約定一致即可。
有效數據
起始位之後便是傳輸的主體數據內容了,也稱為有效數據,其長度一般被約定為5、6、7或8位長。
數據校驗
由於在通訊過程中易受到外部干擾導致傳輸數據出現偏差,所以在有效數據之後加上校驗位解決。校驗方法有奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)及無校驗(noparity)。
奇校驗要求有效數據和校驗位中「1」的個數為奇數,比如一個8位長的有效數據為:01101001,此時共有4個「1」,為達到奇校驗效果,校驗位為「1」,最後傳輸的是8位有效數據加1位校驗位,共9位。
而偶校驗剛好相反,要求有效數據和校驗位的「1」數量為偶數,則此時為達到偶校驗效果,校驗位為「0」。
而0校驗則無論有效數據中是什麼數據內容,校驗位總是為「0」,1校驗校驗位總是為「1」。
-----------------------------------------------------------------------
文章首發於知乎專欄 - stm32,轉載請私信,並註明原文出處。
推薦閱讀:
※串口通訊(中)——USART
※為什麼同為3.5mm耳機介面,電腦能放聲音,手機卻不行?
※python 3.5 中pyserial串口通信如何向串口發送十六進位通信指令?
TAG:串口通信 |