查看原文
其他

通信教程07_通信协议

strongerHuang strongerHuang 2022-05-20
关注、星标公众,不错过精彩内容


本教程由作者strongerHuang于2020年01月原创发布。

标签:串口、 通信、 协议

版权所有:禁止商用

申明:该文档仅供个人学习使用,转载请公众号联系作者授权。



1写在前面

协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

比如一些常见的协议:串口协议、Modbus协议、CAN 协议、TCP/IP协议等。

『通信协议』是一个很宽泛的概念,拿OSI(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层)来说,每一层都有对应的协议,我们所说的串口、Modbus、CAN等对应在不同的层次。

很多初学者对『通信协议』的概念不理解,觉得很高深、很复杂。要搞明白通信协议,建议结合一些实际例子来理解。

2UART通信协议

UART:Universal Asynchronous Receiver/Transmitter,通用异步收发传输器。


UART,通常我们成为串口,是通信中最常见的一种。


2.1 串口底层协议

如上图,假如设备A发送一个字符给设备B,需要规定启始位、数据位、校验位、停止位以及波特率等。这些约定就是串口通讯的协议。


另外,传输的线路是通过TTL、232还是485,也是需要通讯双方(设备A和设备B)约定的,严格来说也属于一种协议。


我们这里把这些约定统称为物理层协议,或者说底层的协议。


2.2 串口上层协议

串口通信不像http通信那么复杂,我这里说的简单点,就是底层协议和上层协议。


基于串口的应用层协议很多,自定义应用协议、通用协议等。


自定义应用协议

比如:你买一个温度传感器模块,自定义协议:固定长度3字节。


这是一个很简单的自定义协议,当然,实际应用中自定义协议一般比这个更复杂,比如多一些标志:命令、数据长度、校验信息等。


通用协议

比如:Modbus、MAVLink等这些都是基于串口的应用层协议。


如果只是做应用,我们不必深究通用协议的原理,掌握如何使用,能正确传输数据就行(当然,一些基本原理还是要懂)


3CAN通信协议

之前写过一些《CANOpen系列教程》,很多人第一步就蒙了,什么是CAN 2.0协议,什么是CANOpen协议?


看了上面串口的解释,现在你是不是要清晰一点了呢?


CAN 2.0属于一种协议,CANOpen也是一种协议,这两种协议是各自独立的协议。


3.1 CAN底层协议

CAN 2.0协议属于物理层的协议,分为CAN 2.0 A版本和B版本协议。


前几年引入了新的CAN FD协议,这个协议可以理解为CAN协议的升级版,都属于物理层协议。


3.2 CAN上层协议

基于物理层CAN之上的协议,比如:CANopen、J1939、DeviceNet等。这些协议属于应用层协议。


应用层协议一般都是指的软件,里面的一些内容也是标准协会进行约定的(比如CANOpne里面的对象字典、PDO、SDO等),大家都按照这个约定进行通信。


4网络通信协议

网络通信是生活中常见的一种,我们要上网,就必须要有网络,我们需要的数据通过多层协议,最终才能完成传输。


网络通信是一个比较大的概念,包含的协议种类繁多,对于大部分开发人员来说,只需要掌握基本原理,学会调用相应接口开发自己应用程序即可。


之前还写过一篇文章:http和tcp/ip、http和https之间的关系和区别


做硬件开发的需要网线电平信号、接口含义等,做应用的需要了解TCP、UDP通信方式区别等。


关于网络通信的更多介绍,如果后面有时间,给大家开一个专栏来讲述。


5

说明

1.该文档仅供个人学习使用,版权所有,禁止商用。


2.本文由我一个人编辑并整理,难免存在一些错误。


3.本文收录于公众号『嵌入式专栏』,关注微信公众号回复【通信教程】即可查看全系列教程。  



6最后

我的知乎:strongerHuang

我的网站:www.strongerhuang.com


若觉得文章对你有帮助,随手点『在看』、分享到朋友圈,也是对我的支持和鼓励


扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!


长按识别图中二维码关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存