1. 通信协议基础概念解析
在电子系统和嵌入式开发中,通信协议就像设备之间的"语言规则"。想象两个人在打电话:需要约定好谁说、谁听、用什么语言、怎么开始和结束对话。通信协议就是为电子设备制定这样的规则。
现代电子系统中最常见的通信协议可以分为两大类:
- 同步通信:设备间共享时钟信号,如SPI、I²C
- 异步通信:设备各自使用独立时钟,如UART
每种协议都有其独特的"性格特征"和适用场景。理解它们的底层原理,能帮助我们在项目中选择最合适的通信方式,就像根据场合选择得体的交流方式一样重要。
2. SPI协议深度解析
2.1 SPI工作原理图解
SPI(Serial Peripheral Interface)是一种全双工同步通信协议,采用主从架构。它就像一场精心安排的四人会议:
- MOSI(Master Out Slave In):主机发言通道
- MISO(Master In Slave Out):从机回应通道
- SCLK(Serial Clock):会议节奏控制者
- SS/CS(Slave Select):决定谁可以发言的名单
实际项目中,我常用SPI连接显示屏和传感器。它的优势在于:
- 传输速度快(可达50MHz)
- 硬件实现简单
- 支持全双工通信
2.2 SPI时序关键点
注意:SPI有四种工作模式(CPOL/CPHA组合),配置错误会导致通信失败
典型SPI时序包含三个阶段:
- 片选拉低(SS→0):激活目标从机
- 时钟同步传输:在SCLK边沿采样数据
- 片选拉高(SS→1):结束通信
实测案例:使用STM32驱动SPI Flash时,发现写入后立即读取会失败。原因是Flash需要几毫秒的写入时间。解决方案是在写入命令后添加延时:
HAL_SPI_Transmit(&hspi1, write_cmd, 4, 100);
HAL_Delay(5); // 关键延时
HAL_SPI_Receive(&hspi1, read_data, 256, 100);
3. I²C协议详解
3.1 I²C总线架构
I²C(Inter-Integrated Circuit)是飞利浦开发的二线制协议,特别适合板内短距离通信。它像是一个高效的电话会议系统:
- SDA(数据线):传递实际信息
- SCL(时钟线):控制通信节奏
I²C的精妙之处在于:
- 通过7位地址可连接112个设备(理论值)
- 支持多主多从架构
- 内置冲突检测机制
3.2 I²C通信流程拆解
一次完整的I²C传输包含以下步骤:
- 起始条件(S):SCL高时SDA由高变低
- 地址帧:7位地址+1位读写标志
- 应答位(ACK/NACK)
- 数据帧(8位)
- 停止条件(P):SCL高时SDA由低变高
常见问题排查:
- 通信失败先检查上拉电阻(通常4.7kΩ)
- 长距离传输需降低时钟频率(标准模式100kHz)
- 多设备时注意地址冲突
4. UART串口通信
4.1 UART工作原理
UART(Universal Asynchronous Receiver/Transmitter)是最古老的串行通信协议之一,像两个人在约定时间打电话:
关键参数:
- 波特率(如9600bps)
- 数据位(通常8位)
- 停止位(1或2位)
- 校验位(可选)
实际应用技巧:
- 波特率误差应控制在2%以内
- 长距离传输建议使用RS-232/485电平
- 多设备通信需自定义协议
4.2 电平转换电路设计
MCU通常使用TTL电平(0-3.3V),而标准串口使用±12V。常用转换方案:
| 方案 | 芯片示例 | 特点 |
|---|---|---|
| TTL转RS232 | MAX3232 | 需外接电容 |
| USB转TTL | CH340G | 即插即用 |
| 隔离型 | ADM3251E | 抗干扰强 |
经验:工业环境推荐使用隔离型转换器,可有效避免地环路干扰
5. 红外通信技术
5.1 红外信号编码
红外通信本质上是通过LED的开关来传递信息,常见编码方式:
- NEC协议:38kHz载波,脉冲宽度编码
- RC5协议:曼彻斯特编码
- Sony SIRC:脉冲位置调制
典型红外接收电路包含:
- 红外接收管(如VS1838B)
- 带通滤波器(中心频率38kHz)
- 解调电路
- 信号整形电路
5.2 红外控制实战
制作智能鱼缸喂食器时,我使用红外遥控方案:
#include <IRremote.h>
IRrecv irrecv(11);
void setup() {
irrecv.enableIRIn();
pinMode(9, OUTPUT); // 继电器控制
}
void loop() {
if (irrecv.decode()) {
if(irrecv.decodedIRData.command == 0x45){ // NEC码
digitalWrite(9, HIGH);
delay(500);
digitalWrite(9, LOW);
}
irrecv.resume();
}
}
常见问题:环境光干扰会导致接收距离缩短,解决方法:
- 增加红外滤波片
- 调整接收管偏置电压
- 采用调制频率更高的协议
6. 串并转换技术
6.1 移位寄存器应用
74HC595是经典的串入并出芯片,使用SPI接口控制8位输出。它在LED点阵驱动中特别有用。
典型接线方式:
- DS(14脚):串行数据输入
- SHCP(11脚):时钟输入
- STCP(12脚):锁存信号
驱动代码示例:
void shiftOut(uint8_t data) {
for(int i=0; i<8; i++) {
digitalWrite(DS, data & (1<<(7-i)));
digitalWrite(SHCP, HIGH);
delayMicroseconds(1);
digitalWrite(SHCP, LOW);
}
digitalWrite(STCP, HIGH); // 更新输出
delayMicroseconds(1);
digitalWrite(STCP, LOW);
}
6.2 级联扩展技巧
当需要更多IO时,可以级联多个595芯片。我曾用4片595驱动32路LED,关键点:
- 前一片的Q7'接下一片的DS
- 所有芯片共享SHCP和STCP
- 传输时需要发送完整32位数据
7. 其他重要通信波形
7.1 PWM控制原理
PWM(Pulse Width Modulation)通过调节占空比来控制功率输出,就像快速开关水龙头调节水流大小。
重要参数关系:
平均电压 = Vcc × (Ton / T)
其中:
- Ton:高电平时间
- T:周期时间
应用场景:
- LED调光
- 电机调速
- 模拟信号生成
7.2 调制技术对比
常见无线通信采用的调制方式:
| 类型 | 特点 | 应用场景 |
|---|---|---|
| 调幅(AM) | 改变振幅 | 广播电台 |
| 调频(FM) | 改变频率 | FM广播 |
| 调相(PM) | 改变相位 | 数字通信 |
在开发2.4GHz无线模块时,我对比过FSK和OOK调制:
- FSK抗干扰强但功耗高
- OOK简单但易受干扰 最终根据传输距离需求选择了GFSK调制。

1803

被折叠的 条评论
为什么被折叠?



