一篇文章彻底理解嵌入式UART、RS232、RS485、CAN协议
我以前分享过一些使用UART、RS232、RS485、CAN传感器数据读取和伺服电机控制协议的文章,但是很有必要总结一下这些协议的区别,工作原理是什么。
UART
UART又称通用异步接收/发送装置,简称串口,是一种需要完成特定功能的硬件。它本身不是协议。一般可用于调试(打印调试信息)和各种外部模块。串口结构简单,稳定可靠。发送线有三条线(TXD)、接收线(RXD)、地线(GND)。连接硬件时,连接方式如下:
串口参数包括:波特率、起始位、数据位、验证位、停止位。
波特率:一般波特率为9600、19200、115200等,表示每秒能传输多少个比特位数(bits)。
起始位置:发出一个逻辑0信号,表示数据传输的开始个逻辑0对不同的协议有不同的含义。下面将在具体协议中讨论。
数据位:可以是5~8位逻辑0或1ASCII码(7位),扩展BCD码(8位)。采用小端传输。
验证位:数据位加上此位后,1位数应为偶数(偶验证)或奇数(奇验证),以验证数据传输的正确性。
停止:它是字符数据的终结标志。
我认为UART串口是一个总称,包括TTL、RS232、RS这些通信协议的最基本特征是485,它们有自己的特征,如逻辑电平。
UART串行通信包括串行通信和并行通信,是指同时传输多个数据的通信方式;串行通信是指数据传输的通信方式。
串行通信可分为同步通信和异步通信两类:
同步通信:指使用同时钟源同步发送器和接收器。I2C、SPI。
异步通信:收发双方的时钟不是同一时钟,而是由各自的时钟发送和接收数据,但需要使用相同的频率(相同的波特率)。典型的是UART。
串行通信的传输方式有3类:单工、全双工、半双工。
单工:数据传输是单向的,一端是发送端,另一端是接收端,即只有一条数据线和一条地线。
全双工:数据传输是双向的,可以同时接收和发送数据,除地线外,还需要两条数据线。
半双工:数据传输也是双向的。一条数据线和两条数据线都可以。在任何时候,一方只能发送数据,另一方可以接收数据,而不能同时收发。
RS232
为了进一步传输信号,美国电子工业协会EIA制定串行物理接口标准RS-232C。下面是RS9芯串行接口排列图232:
9芯串行接口1-9引脚的含义如下表所示:
在RS我们常用的232串行通信接口只有2或3个引脚,即接收数据线和发送数据线。在与硬件通信时,硬件连接可以参考我之前分享的一篇关于串口编程读取倾角传感器的文章,但这篇文章是RS这里给出485接口RS232接口硬件连接示意图:
下面介绍RS232的特别之处,RS-232采用负逻辑,即-3~-12V3-12逻辑1V为了逻辑0TTL逻辑电平不同。下面分别给出TTL和RS逻辑电平示意图232:
下面是TTL逻辑电平:
在xV至5V之间,逻辑1被认为是0V至yV之间是逻辑0。
下面是RS232逻辑电平:
在-12V至-3V之间,它被认为是逻辑1 3V至 12V之间是逻辑0。
由此可见,RS232的电平比TTL高,所以可以传输更远的距离(高电平不是传输距离的唯一指标),在工业上应用更多。
RS485
由于RS232接口只能实现点到点的通信模式,不能实现网络功能,因此出现了RS485。RS485有两线系统和四线系统。四线系统只能实现点对点通信模式,现在很少使用。主要采用两线系统接线模式。该接线模式为总线拓扑结构,最多可在同一总线上连接32个节点。
RS与串行通信协议相比,485通信协议是一种串行通信协议RS232通信协议通信距离短低,RS485传输距离较长,最高传输速率可达10Mbit/s。RS485通信协议采用半双工作模式,只能处于发送状态。因此,在程序或电路设计中应有一个切换发送状态和接收状态的标志。
RS485与RS还有不同的232,RS485的工作模式是差异化工作模式。所谓差异化工作模式,是指在一堆双绞线中定义为A,一条定义为B。通常,发送驱动器A、B正电平在之间 2 6V,负电平为-2-6V,另一个逻辑状态是0(和RS232是相反的),另一个引脚信号接地。
硬件连接图如下:
CAN通信协议
(1)CAN(Controller Area Network)又称局域网控制器,基本用于汽车CAN通信,CAN通信协议稳定准确,传输速率比RS485还高。
(2)多主控制:总线空闲时,所有单元都可以发送消息,但当两个以上单元同时开始发送消息时,总线会根据标识符号ID决定优先级。CAN协议是串行异步通信,同一时刻只能有一个发送或接收信息,由CAN_High和CAN_Low两条信号线以差异信号的形式通信,这是和谐的RS485是一样的。
(3)CAN通信协议通信速度快,通信距离长,具有错误检测、错误通知和恢复功能。
(4)CAN总线报文结构:CAN数据帧、远程帧、错误帧帧、远程帧、错误帧、过载帧四种不同的帧类型。我们主要介绍从发送器到接收器的数据帧。这种帧大多在总线上传输。数据帧也可以分为标准帧(11) 扩展帧(29) 位标识符)。数据帧由 7 帧开始、仲裁场、控制场、数据场、CRC 场、应答场、帧结束。其中,数据场的长度为 0~8 个字节。标识符位于仲裁场,报文接收节点通过标识符过滤报文。
(5)Linux系统中CAN总线配置:在Linux系统中,CAN作为网络设备,总线接口设备在控制台下被系统管理,CAN总线配置与以太网配置使用相同的命令。有三个命令:关闭、设置波特率和启动。
CAN总线通信接口如下:
关于CAN通讯编程在linux系统中的应用可以参考我之前的文章:嵌入式开发板CAN通信编程-伺服电机驱动。
至此,关于嵌入式UART、RS232、RS485、CAN通信协议的基本原理和应用基本完成。还有一些缺点,以后有更深入的了解再补充。
我是河边爬乌龟的小学生,在学习嵌入式软件开发的路上。欢迎大家互相交流。微信官方账号:河边爬乌龟。