一篇讓你學會通信協議
1.概述什么是通信協議
協議是通信計算機雙方必須共同遵從的一組約定。如怎么樣建立連接、怎么樣互相識別等。只有遵守這個約定,計算機之間才能相互通信交流。
比如一些常見的協議:串口協議、Modbus協議、CAN 協議、TCP/IP協議等。
『通信協議』是一個很寬泛的概念,拿OSI(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層)來說,每一層都有對應的協議,我們所說的串口、Modbus、CAN等對應在不同的層次。
很多初學者對『通信協議』的概念不理解,覺得很高深、很復雜。要搞明白通信協議,建議結合一些實際例子來理解。
2.UART通信協議
UART:Universal Asynchronous Receiver/Transmitter,通用異步收發傳輸器。
UART,通常我們成為串口,是通信中最常見的一種。
1).串口底層協議
如上圖,假如設備A發送一個字符給設備B,需要規定啟始位、數據位、校驗位、停止位以及波特率等。這些約定就是串口通訊的協議。
另外,傳輸的線路是通過TTL、232還是485,也是需要通訊雙方(設備A和設備B)約定的,嚴格來說也屬于一種協議。
我們這里把這些約定統稱為物理層協議,或者說底層的協議。
2).串口上層協議
串口通信不像http通信那么復雜,我這里說的簡單點,就是底層協議和上層協議。
基于串口的應用層協議很多,自定義應用協議、通用協議等。
自定義應用協議
比如:你買一個溫度傳感器模塊,自定義協議:固定長度3字節。
這是一個很簡單的自定義協議,當然,實際應用中自定義協議一般比這個更復雜,比如多一些標志:命令、數據長度、校驗信息等。
通用協議
比如:Modbus、MAVLink等這些都是基于串口的應用層協議。
如果只是做應用,我們不必深究通用協議的原理,掌握如何使用,能正確傳輸數據就行(當然,一些基本原理還是要懂)。
3.CAN通信協議
之前寫過一些《CANOpen系列教程》,很多人第一步就蒙了,什么是CAN 2.0協議,什么是CANOpen協議?
看了上面串口的解釋,現在你是不是要清晰一點了呢?
CAN 2.0屬于一種協議,CANOpen也是一種協議,這兩種協議是各自獨立的協議。
1).CAN底層協議
CAN 2.0協議屬于物理層的協議,分為CAN 2.0 A版本和B版本協議。
前幾年引入了新的CAN FD協議,這個協議可以理解為CAN協議的升級版,都屬于物理層協議。
2).CAN上層協議
基于物理層CAN之上的協議,比如:CANopen、J1939、DeviceNet等。這些協議屬于應用層協議。
應用層協議一般都是指的軟件,里面的一些內容也是標準協會進行約定的(比如CANOpne里面的對象字典、PDO、SDO等),大家都按照這個約定進行通信。
4.網絡通信協議
網絡通信是生活中常見的一種,我們要上網,就必須要有網絡,我們需要的數據通過多層協議,最終才能完成傳輸。
網絡通信是一個比較大的概念,包含的協議種類繁多,對于大部分開發人員來說,只需要掌握基本原理,學會調用相應接口開發自己應用程序即可。
做硬件開發的需要網線電平信號、接口含義等,做應用的需要了解TCP、UDP通信方式區別等。