Linux学习-硬件(串口通信)
一、通信方式:串行与并行
- 串行通信:
- 传输形式:数据通过1条(或2条,如UART的TX/RX)信号线逐位传输,每次仅传1 bit。
- 特点:线路少、成本低、抗干扰性强,但传输速度慢。
- 典型应用:UART串口、SPI、I2C等。
- 并行通信:
- 传输形式:数据通过多条信号线同时传输,每次传多位(如8位、16位)。
- 特点:传输速度快,但线路多、成本高、长距离抗干扰性弱。
- 典型应用:早期计算机内部总线、打印机LPT接口等。
二、通信方向:单工、半双工、全双工
- 单工通信:数据仅能单向固定传输(发送方→接收方,不可逆)。
- 例子:收音机(只收不发)、红外遥控器。
- 半双工通信:数据可双向传输,但同一时间只能单向(发送和接收不能同时进行)。
- 例子:对讲机(一方说话时另一方需等待)、RS485总线(半双工模式)。
- 全双工通信:数据可双向同时传输(发送和接收独立进行)。
- 例子:电话(双方可同时说话)、USB通信、UART串口(TX/RX双工线)。
三、串口通信核心(时序、速率、同步/异步归属)
- 串口通信(UART):
- 本质:一种串行异步通信方式,通过单条(或两条)线传输数据,常用于设备短距离通信(如单片机与传感器、PC与开发板)。
- 通信时序(异步UART为例):
- 空闲:信号线保持高电平(逻辑1)。
- 起始位:发送1个低电平(逻辑0),标记数据开始。
- 数据位:传输实际数据(5 - 8位,如8位,低位在前)。
- 校验位(可选):奇/偶/无校验,用于数据正确性校验。
- 停止位:发送1 - 2个高电平(逻辑1),标记一帧数据结束。
时序流程:空闲 → 起始位 → 数据位 → 校验位(可选)→ 停止位 → 空闲
。
- 速率决定因素:由**波特率(Baud Rate)**决定,即单位时间传输的二进制位数(bit/s)。通信双方需预先约定一致,否则数据错误。
- 常见波特率:300、600、1200、2400、4800、9600(最常用默认值)、19200、38400、57600、115200等。
- 同步/异步归属:串口(UART)属于异步通信——发送方和接收方用独立时钟,通过起始/停止位标识数据帧,无需物理时钟线,灵活性高但效率较低。
四、同步通信 vs 异步通信
- 同步通信:
- 同步方式:发送方和接收方用同一时钟信号同步传输,数据连续发送(无起始/停止位)。
- 特点:效率高,但需额外时钟线。
- 典型应用:SPI、I2C、CAN总线。
- 异步通信:
- 同步方式:发送方和接收方用独立时钟,通过起始/停止位标识数据帧边界。
- 特点:无需时钟线,灵活性高但效率较低。
- 典型应用:UART串口。
五、电平标准:TTL、RS232、RS485
- TTL(Transistor-Transistor Logic):
- 适用场景:短距离(≤1米)通信。
- 电平定义:逻辑1为3.3V/5V,逻辑0为0V。
- 应用:单片机内部、芯片间通信(如传感器与MCU的UART接口)。
- RS232:
- 适用场景:中短距离(≤15米)通信。
- 电平定义:逻辑1为-3V ~ -15V,逻辑0为+3V ~ +15V(与TTL反相)。
- 连接要求:需电平转换芯片(如MAX232)与TTL设备对接,常见于PC的DB9串口。
- RS485:
- 适用场景: 长距离(≤1200米)、多设备(最多32节点)通信。
- 传输方式:采用差分信号(A、B线),抗干扰能力强,支持半双工/全双工。
- 应用:工业现场总线(如传感器网络、楼宇自动化)。
六、UART(通用异步收发器)细节
- 信号逻辑:
- 空闲时:高电平;
- 起始位:低电平;
- 数据传输:低位先行;
- 校验位:奇校验(Odd)、偶校验(Even)、无校验(None)可选;
- 停止位:高电平(1位或多位)。
- 波特率:即传输效率(bit per second,bps),常见值1200、2400、4800、9600、115200等;波特率越小,传输速率越慢(如115200 bps比9600 bps快)。
- 示例解析:
9600, n, 8, 1
:波特率9600 bps、无校验、8位数据位、1位停止位。115200, e, 7, 2
:波特率115200 bps、偶校验、7位数据位、2位停止位。
- 数据位计算:
8位数据 + 1起始位 + 校验位(0或1) + 停止位(1或多)
,总长度≤10位。 - 传输效率示例:波特率9600 bps时,1秒可发 ( 9600 \div 10 = 960 ) 字节(按10位/字节算)。
- BSP:板级支持包,用于硬件层数据封装。
七、51单片机串口(以SCON为例)
-
控制寄存器SCON:
SM0/SM1
:串口工作模式选择(如模式1为8位UART,波特率由定时器1溢出率决定)。SM2
:多机通信控制位。REN
:接收使能位,REN=1
时允许接收。TI
:发送中断请求标志位,TI=1
表示发送完成(需手动软件复位)。RI
:接收中断请求标志位,RI=1
表示接收完成(需手动软件复位)。
-
波特率计算:
公式:2^8 - 2 ^smod * focs /32/bps/12
(focs为晶振频率,TH1
为定时器1初值,SMOD
用于波特率加倍)。 -
数据模式:
- 文本模式:
#
对应0x23
; - 二进制(HEX)模式:
0xFF
对应数值255。
- 文本模式:
八、自定义协议与主从总线模式
- 主从总线模式:主机发命令,从机执行并返回响应(如“China”命令,从机回“OK”)。
- Modbus类自定义协议帧结构(示例):
字段 内容 示例(十六进制) 起始字节 帧起始标识 0xAA 设备地址 从机地址(低位在前) 0x01(低)、0x00(高) 功能码 命令功能标识 0x03 数据段 传输数据 0x04、0xD2(数据1、数据2…) 校验码 累加和校验(低字节在前) 0x05(低)、0x20(高) 结束字节 帧结束标识 0x0D
(注:累加和校验为各字节累加后取低字节,用于帧完整性验证)