最近,由于物联网综合实践,组队做个智能报警系统,我负责硬件层,所以一直在搞stm32开发板。我将ds18b20以及MQ2烟雾传感器挂载到了开发板上,也采集到了数据。之后的任务就是要完成与中间层的通讯,我原本想用rs485+MODBUS协议完成通讯的,但是做中间层的是用jetson nano板子,那个板子没有rs485接口,所以得考虑其他串口通信协议。在上网查阅资料的时候,对很多串口通信协议也有了一些理解。
串口通信是指串口按位(bit)发送和接收字节,区别于并行通信。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
串口通信又可以分为同步传输和异步传输。
同步传输:在知道对方状态下进行全双工传输,需要调节系统时钟,使得传送速度不超过缓存容量,并保持包络上均衡。
异步传输:既能针对字符流,也可针对比特流。异步传输没有明确定义的“帧”模式,因此不需要同步时钟,但会增加一个帧同步域,用于在接收端恢复字节边界,并通过位数逐个地进行帧的识别。
在实际应用中,串口通常使用异步技术来发送和接收数据。
对于任何的通信协议,包括串口通信协议,都可以从硬件层与软件层这两个协议。标准来考虑。
硬件层的协议主要是对接口进行了规定,包括电气特性(高低电平对应的电压范围)、机械特性(接口的针数)、信号功能(接口的各个引脚的功能)、连接方式。
软件层的协议主要是对传输的数据帧中各位数据的含义的规定。比如像MODBUS协议中帧的第一个字节表示地址。所以在说MODBUS协议的时候,我们会说这是基于XX(RS232协议)的MODBUS协议。
所以串口通信协议包括硬件层的协议以及软件层的协议,像RS232协议就是硬件层的协议,MODBUS协议就是典型的软件层的协议。像SPI,IIC,CAN总线等就是既包括了硬件层的协议也包括了软件层的协议,可以说是软硬件的结合体。
下面,列举几个比较常见的串口通信协议。
UART协议。我觉得UART协议偏向于应用层。UART的意思是通用异步收发器,结构上一般由波特率产生器、UART/USART发送器、UART/USART接收器组成,硬件上两线,一收一发。
它规定了数据的传输格式。uart可以使用rs232物理层来通信。总的来说,对于一项通信任务,通信协议可以使用UART协议,而UART协议可以通过COM端口来实现硬件连线,此协议下的传输方式可以选用RS232或者RS485等。UART只是对信号的时序进行了定义,而未定义接口的电气特性。
UART使用标准的TTL/CMOS逻辑电平(0-5v,0-3.3v,0-2.5v或0-1.8v)来表示数据,1表示高电平,0表示低电平。为了提高抗干扰能力、提高传输的距离,通常也会TTL/CMOS逻辑电平转换为RS-232逻辑电平,3-15表示0,-3~-15V表示1。
举个例子,对于传输数据0x55,即二进制的01010101,RS232和TTL的区别如下:
USB协议。依我所见,USB协议既包括了物理层协议,也包括了应用层协议。
物理层为USB协议中规定了USB的电气结构:
标准USB是四线:5V电源VCC,地GND,差分数据线正D+,差分数据线D- 。
应用层协议为规定了数据包的形式。
USB总线上传输数据是以包为基本单位,一个包被分为不同的域,包的类型不同,包含的域也不同包有个共同特点,那就是以同步域开始,紧跟一个包标识符,最终以包结束符来收尾
同步域:用于告诉USB的串行接口引擎数据就要开始传输了,请做好准备,除此之外,同步域还可以用来同步主机端和设备端的数据时钟
包结束符:对于高速设备,用故意的填充错误来表示,此时CRC校验仍然可以通过,因此可以判断是故意的错误填充,而不是数据传输错了;对于全速和低速设备,将D+和D-都保持低电平,时间为2个数据位宽度
包标识符:用来表示一个包的类型,共有8位,只前4位是有效数据,后4位是前4位的取反,用于校验
对于RS232协议、RS485协议,就是典型的物理层的协议。规定连接端口的电气属性。
MODBUS协议就是典型的应用层协议。规定了传输数据的格式。
像SPI协议、IIC协议、CAN总线协议都是既有物理层的协议也有应用层的东西。所以,对于这三种协议,不用额外的物理层支持,因为他们不像MODBUS协议一样与物理层脱离的干干净净(这里也体现出了MODBUS协议的优点,通信的时候不需要考虑硬件层),自身包括了物理层的基础,所以也不会有这种什么基于RS485的SPI协议。
IIC协议。IIC总线只使用两条双向漏极开路的信号线(串行数据线:SDA,及串行时钟线:SCL),并利用电阻上拉。
SCL(Serial Clock):串行时钟线,传输CLK信号,一般是主设备向从设备提供;
SDA(Serial Data):串行数据线,传输通信数据 I2C使用一个7bit的设备地址,
关于SPI协议。
SPI四根信号线
设备选择线:NSS
时钟线:SCL
串行输出数据线:MOSI
串行输入数据线:MISO
CAN总线协议。CAN技术规范主要主要对OSI基本参考模型中的物理层(部分)、数据链路层和传输层(部分)进行了定义。
上文,只是我对于这些协议的一些理解,只是记录学习中过程。
补充:
电平标准是数据 1 和数据 0 的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
1)TTL 电平(最常见): +3.3V 或 +5V 表示【 1】 , 0V 表示【 0】
2)RS232 电平(负逻辑): -3~-15V 表示【 1】 , +3~+15V 表示【 0】
3)RS485 电平:两线压差 +2~+6V 表示【 1】 , -2~-6V 表示【 0】 (差分信号)(距离超远)
附录:
笔试常考:嵌入式5大常用协议(UART、RS232、RS485、IIC、SPI) (baidu.com)
【USART】串口协议_Pray_Me的博客-CSDN博客
【总线】Modbus、I2C、SPI - 不溯流光 - 博客园 (cnblogs.com)
UART(RS232、RS485)、IIC、SPI、USB、CAN、DMA、Modbus通讯协议_usb协议和串口协议_学海无涯_come on的博客-CSDN博客
UART协议讲解_uart通信协议_Polaris!的博客-CSDN博客
串口协议简介_嵌入式小宁的博客-CSDN博客
USB协议入门_赏善罚饿的博客-CSDN博客
简单说说USB协议(一)_usb u盘协议_五月525的博客-CSDN博客
嵌入式物联网常用的通信协议UART、RS-232、RS-422、RS-485、CAN、IIC、SPI (eepw.com.cn)