通信篇
1. 关于通信
1.1 串行/并行通信
简单地说,串行通信是数据依次传输,并行通信是几个数据一起传输。
串行通信占用的通信线更少,成本低,通信速度相对较慢,受干扰影响较小。
并行通信占用的通信线多,成本高,通信速度相对较快,受干扰影响较大。
1.2 全双工/半双工/单工传输
全双工指双方都可以同时收发信息;半双工双方都可以收发信息,但同一时刻只能一方发送信息;单工指只能一方发信息,一方接受信息,通信是单向的。
1.3 同步/异步通信
数据在双方之间传输时,需要制定规则保证数据传输的准确。同步/异步可以根据是否有时钟信号判断是哪种通信方式。
同步通信是加一个时钟信号,发送方和接收方在这个时钟的节拍下传输数据,比如SPI 和 I2C。
异步通信是对数据进行封装,在数据开头加上起始信号,在数据结尾加上终止信号,双方按照规定传输数据,比如UART、l-Wire。
1.4 通信速率
对于同步通信,通信速率由时钟信号决定,时钟信号越快,传输速度就越快。
对于异步通信,需要收发双方提前统一通信速率,这也就是我们串口调试时,波特率不对显示乱码的原因。
1.5 常见通信协议
2. 通信 - 调试串口
常见通信接口标准:
通信接口 | 电平标准 | 特点 |
TTL | 逻辑1: 2.4V至5V 逻辑0: 0V至0.4V | 无需额外电路,引脚直连即可 |
RS232 | 逻辑1: -3V至-15V 逻辑0: 3V至15V | 需电平转换电路,传输距离大约15m |
RS422/RS485 | 逻辑1: 两线压差为2V至6V 逻辑0: 两线压差为-2V至-6V | 需电平转换电路,传输距离大约1200m |
嵌入式的MCU和外设模块中都集成有通用同步异步收发器(USART)和通用异步收发器(UART)。常见用途如下:
- 作为调试口,打印程序运行的状态信息;
- 连接串口接口的模块(比如GPS模块),传输数据;
- 通过电平转换芯片变为RS232/RS485电平,连接工控设备;
USART内部结构如图:
可以把USART分为四个部分:
- USART引脚
- 波特率发生器
- 发送器/接收器控制单元
- 数据收发寄存器单元
3. RS232通信
最简单的
RS232
通信由三条数据线组成,即
TXD
、
RXD
和
GND
。
RS232
采用负逻辑电平,即
-15V ~ -3V 代表逻辑“1
”,
+3V ~ +15V
代表逻辑“
0
”。这里的电平,是
TxD
线(或者
RxD
线)相对于
GND
的电压。
RS232
最长传输距离为
15
米,通常采用
DB9
接口,有公母之分
。
DB9有9个针脚,通常RS232只需要TXD、RXD和GND即可。
4. RS485通信
RS485
具有支持多节点(
32
个节点)、传输距离远(最大
1219m
)、接收灵敏度高(
200mV
电压)、连接简单(在构成通信网络时,仅需要一对双绞线作传输线)、能抑制共模干扰(差分传输)、成本低廉等特点,在多站、远距离通信等多种工控环境中获得了广泛应用。
在
RS485
通信网络中,通常使用
485
收发器将
TTL
电平转换成
RS485
的差分信号。
MCU
的串口控制器
TxD
发送数据,经
485
收发器转换成差分信号,传输到总线上。接收数据时,
485
收发器将总线上的差分信号转化 成TTL
信号由
RxD
到串口控制器。整个通信网络中,通常只有一个主机,剩下的全部为从机。在
RS485
总线中,通常还需要在总线起止端分别加上约120
Ω的终端匹配电阻,以保证
RS485
总线的稳定性。
5. I2C通信
I2C是一种多主从架构串行通信总线,常用于MPU/MCU与外部设备连接通信、数据传输。
I²C
由两条线组成,一条双向串行数据线
SDA
,一条串行时钟线
SCL
。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。因为I²C
协议比较简单,常常用
GPIO
来模拟
I²C
时序,这种方法称为模拟I²C
。如果使用
MCU
的
I²C
控制器,设置好
I²C
控制器
, I²C
控制器就自动实现协议时序,这种方式称为硬件I²C
。因为
I²C
设备的速率比较低,通常两种方式都可以,模拟
I²C
方便移植,硬件
I²C
工作效率相对较高。
6. SPI通信
SPI是一种全双工同步串行通信接口,用于MCU和各种外围设备以串行方式进行通信以交换信息,主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。
SPI通常由四条线组成,一条主设备输出与从设备输入(Master Output Slave Input,MOSI),一条主设备输入与从设备输出(Master Input Slave Output,MISO),一条时钟信号(Serial Clock,SCLK),一条从设备使能选择(Chip Select,CS)。
7. CAN通信
CAN通信的特点是可拓展性好、可承受大量数据的高速通信、高度稳定可靠。
高速
CAN
主要应用在发动机、变速箱等对实时性、传输速度要求高的场景。低速
CAN
主要应用在车身控制系统等可靠性要求高的场景,低速CAN
在断掉其任一导线后,仍可以继续接收数据,因此在汽车发生交通事故时,使用低速CAN
能更大提高设备正常接收数据工作的可能性,提高安全性。
CAN
也使用差分信号传输数据。
CAN
总线使用
CAN_H
和
CAN_L
的电位差来表示数据电平。电位差分为显性电平和隐性电平,分别表示逻辑0
和
1
。
CAN
是一种基于消息广播模式的串行通信总线,即在同一时刻网络上所有节点监测到的数据是一致的,各节点根据报文ID
来甄别是否是发给自己的报文。CAN总线以“帧”(
Frame
)的形式进行通信。
CAN
总线协议规定了
5
种帧,分别是数据帧、远程帧、错误帧、超载帧以及帧间隔,其中数据帧最常用。
8. DMA