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