拓冰建站拓冰建站
首页 / 资讯中心 / 正文

从半部电台到万物互联:通信原理与嵌入式协议全解析

1. 从一次红色通信寻访说起前两天看到北邮学子走进中国工农红军通信学校的消息心里很有感触。很多做嵌入式、做网络、做软件开发的同学每天都在和 UART、SPI、CAN、TCP/IP 打交道却不一定知道人民军队的通信事业是从“半部电台”起家的。在红军通信学校旧址学生们看到的那些老照片、老设备正是中国通信事业从无到有、从弱到强的缩影。这次“跨时空赴约”其实是一个特别好的技术视角通信的本质从来没有变过——把信息从一端可靠地送到另一端。变化的只是载体、速率、编码方式和安全机制。从当年通信兵手摇发电机、用无线电波传递情报到今天嵌入式工程师用 STM32 通过 CAN 总线控制汽车电子、用 TLS 保护 Web 传输底层要解决的核心问题始终是信息的编码、传输、同步、差错控制和安全保障。这篇文章就以这次红色通信寻访为引子系统梳理通信技术的基本原理和现代工程实践内容包括通信系统的基本组成与分类嵌入式开发中最常用的 UART、SPI、I2C、CAN、RS-485 通信协议网络通信中的 TCP/IP 与 TLS 安全传输LoRa、D2D、量子通信等前沿方向一个可以直接上手的 STM32 串口通信实战软件层面的进程通信与组件通信通信工程师考证与学习路线常见通信故障的排查思路。不管你是刚接触通信的初学者还是已经在做嵌入式、网络开发的老手这篇文章都值得收藏备查。2. 通信系统的基本概念与体系2.1 通信系统的组成任何通信系统都可以抽象成五个部分信源、发送设备、信道、接收设备、信宿。信源 → 发送设备 → 信道 → 接收设备 → 信宿这里有一个容易被忽略的概念信道不只是网线或空气它包含传输介质以及介质上承载信号的所有物理特性。比如 CAN 总线使用的双绞线串口通信使用的铜线Wi-Fi 使用的空间电磁波都是信道。现代通信系统通常还会加入两个重要模块编码/解码信源编码负责压缩和数字化信道编码负责抗干扰和纠错调制/解调把数字比特流映射到适合信道传输的模拟信号上。在红军通信校的年代通信兵面对的是电台、手键、电码。今天做嵌入式通信本质上还是在做同一件事把数据变成信号从信道发出去再在另一端恢复成数据。2.2 模拟通信与数字通信按信号形式划分通信系统分为模拟通信和数字通信。模拟通信的典型例子是早期的电话系统语音直接通过电流的幅度变化传输。优点是实现简单缺点是抗干扰能力差、难以加密和压缩。数字通信则将信息离散化为 0 和 1再进行编码传输。数字通信的优势非常明显抗干扰能力强可以通过再生中继消除噪声积累便于加密TLS、AES 等算法都能直接作用在比特流上便于压缩和存储易于与计算机系统集成。当前主流的通信系统基本都是数字通信。即使是 4G/5G 无线通信也是在数字基带处理之后才通过调制器把信号搬移到射频载波上发送。2.3 有线通信与无线通信按传输介质划分通信分有线通信和无线通信。有线通信常见介质包括双绞线、同轴电缆、光纤。RS-485、CAN、以太网都属于有线通信。有线通信的优点是信道稳定、带宽大、安全性相对高缺点是布线成本高、灵活性差。无线通信则利用电磁波在自由空间传播典型应用包括 Wi-Fi、蓝牙、LoRa、4G/5G、卫星通信。无线通信方便灵活但更容易受到干扰、衰减和窃听因此需要更复杂的调制、编码和加密机制。模块选型时这条原则很重要能用有线解决的可靠性问题不要轻易用无线无线方案必须做好链路预算和干扰评估。2.4 单工、半双工与全双工按数据传输方向通信方式分为三种。单工数据只能单向传输比如遥控器到电视机的红外信号。半双工数据可以双向传输但同一时刻只能一个方向发送。比如 RS-485 总线、对讲机。全双工数据可以同时双向传输。比如 UART 的 TX/RX、以太网。硬件设计和协议选择时必须先明确通信模式。比如 CAN 总线本质上是半双工的所有节点共享一条总线同一时刻只能有一个节点发送但通过仲裁机制实现优先级调度。设计时不要把 CAN 当全双工用。3. 嵌入式通信的硬核基础从 UART 到 CAN嵌入式开发中UART、SPI、I2C、CAN 是出现频率最高的几种通信协议。很多初学者搞不清楚它们的区别和适用场景下面逐一拆解。3.1 UART 串口通信UARTUniversal Asynchronous Receiver/Transmitter通用异步收发器是最基础的串行通信方式。UART 通信特点异步传输不需要时钟线全双工TX 发送、RX 接收点对点通信只能连接两个设备通过波特率Baud Rate约定每一位的时长。典型连接方式设备A TX ── 设备B RX 设备A RX ── 设备B TX 设备A GND ── 设备B GNDUART 的帧格式通常包含起始位、数据位5~8 位、可选的校验位、停止位。发送前双方必须约定一致波特率 9600、数据位 8、无校验、停止位 1也就是常说的9600-8-N-1。在 STM32 开发中UART 常用于调试日志输出、与蓝牙模块、4G 模块、GPS 模块通信。比如 STM32F103C8T6 通过 A7670C 4G 模块连接 OneNET 平台时AT 指令就是通过 UART 发送的。3.2 SPI 通信SPISerial Peripheral Interface串行外设接口是一种高速同步串行通信协议。SPI 需要 4 根线SCK时钟线由主机产生MOSI主机输出、从机输入MISO主机输入、从机输出CS/SS片选线主机通过拉低某个从机的 CS 来选择通信对象。SPI 的优点传输速率高可达几十 Mbps全双工通信协议简单硬件开销小。缺点是没有内置应答机制主设备无法确认从设备是否真的收到数据。SPI 常用于 Flash 存储芯片、SD 卡、TFT 屏幕、传感器等外设。一个常见误区SPI 的从机不能主动发送数据只能等主机发起通信。设计多从机系统时要合理规划 CS 引脚。3.3 I2C 通信I2CInter-Integrated Circuit是另一种常用的同步串行协议只需要两根线SCL时钟线SDA数据线。I2C 是半双工通信所有设备并联在总线上通过设备地址寻址。每个设备有 7 位地址或 10 位地址主机发送起始条件后先发送地址和读写位从机应答后开始数据传输。I2C 的优缺点接线少支持多主机多从机速度相对较慢标准模式 100 kbps快速模式 400 kbps需要上拉电阻阻值选择对通信质量影响很大。I2C 常用于 EEPROM、温湿度传感器、加速度计等低速率外设。比如 HUS238 与 MCU 的 IIC 通信就属于典型应用。I2C 排查中最常见的问题是总线卡死原因是 SDA 被某个从机拉低一直不释放。这时可以尝试器件复位或重新上电必要时用示波器抓 SCL 和 SDA 波形检查 ACK 位是否正常。3.4 CAN 通信CANController Area Network控制器局域网是汽车电子和工业控制中最常用的总线协议。CAN 的特点半双工、多主通信基于报文标识符ID的优先级仲裁差分信号传输抗干扰能力强支持错误检测和自动重发通信距离可达数千米低速时速率可达 1 Mbps。CAN 总线的物理层使用 CAN_H 和 CAN_L 两根差分线终端需要在总线两端各接一个 120Ω 终端电阻。在 STM32 中使用 CAN需要配置波特率通过分频和位时间量化TQ计算过滤器决定接收哪些 ID 的报文工作模式回环模式Loopback或正常模式Normal。很多开发者会遇到一个典型问题CAN 回环测试正常但标准模式正常模式无法发送。这个问题在搜索中出现频率很高原因通常包括没有正确配置收发器芯片如 TJA1050的 STB 引脚波特率不匹配总线终端电阻缺失或重复CAN_H 和 CAN_L 接反没有配置过滤器导致发送失败或接收不到。排查 CAN 通信问题时示波器观察总线波形是第一步。好的 CAN 波形显性电平Dominant和隐性电平Recessive分界清晰位宽稳定波特率检测一致。如果波形畸变严重优先检查终端电阻和线缆质量。3.5 RS-485 通信RS-485 是一种差分串行通信标准广泛应用于工业现场。与 RS-232 相比RS-485 的优点差分传输抗干扰能力强支持多点通信一条总线可挂接 32 个以上节点传输距离远1200 米内可达 10 Mbps 以下速率。RS-485 是半双工通信通常使用 Modbus RTU 等协议。使用 RS-485 时要注意总线两端必须接 120Ω 终端电阻A、B 线不能接反收发切换需要控制方向引脚DE/RE在发送完成后及时切回接收。汇川 SV660P 使用 Modbus RTU 通信时就属于 RS-485 的典型应用。3.6 以太网与 TCP/IP从嵌入式到通用网络以太网和 TCP/IP 协议栈是绕不开的一环。与 UART、CAN 相比TCP/IP 的核心优势是分层设计应用层HTTP、MQTT、Modbus TCP 等传输层TCP 保证可靠传输UDP 提供低延迟传输网络层IP 负责寻址和路由链路层以太网帧封装和物理传输。在 STM32 上通过以太网通信时常规做法是使用 W5500 这类硬件协议栈芯片或者使用带 MAC 控制器的 MCU 搭配 PHY 芯片再运行 lwIP 协议栈。如果要做工业设备联网Modbus TCP、CANopen、EtherCAT 都是常见选择。比如三菱 QJ71E71 与上位机通信、汇川伺服与 PLC 通信本质上都是通过工业以太网协议实现。3.7 通信协议对比协议通信方式时钟/同步接线典型速率典型场景UART全双工点对点异步TX/RX/GND9600~几 Mbps调试、蓝牙/4G 模块SPI全双工主从同步SCK/MOSI/MISO/CS几十 MbpsFlash、屏幕、SD 卡I2C半双工多设备同步SCL/SDA100~400 kbps传感器、EEPROMCAN半双工多主异步差分CAN_H/CAN_L最高 1 Mbps汽车、工业控制RS-485半双工多点异步差分A/B通常 9600~10 Mbps工控、ModbusEthernet全双工同步RJ45/光口10 Mbps~10 Gbps网络、工业以太网4. 现代通信关键技术TLS、LoRa、D2D 与量子通信4.1 TLS为通信提供保密性和数据完整性TLSTransport Layer Security安全传输层协议是目前互联网通信中最重要的安全协议之一。它在两个通信应用程序之间提供保密性通过加密算法对数据加密防止窃听数据完整性通过消息认证码检测数据是否被篡改身份认证通过数字证书验证通信双方身份。TLS 握手过程可以简单概括为客户端发送 ClientHello包含支持的 TLS 版本和加密套件服务端返回 ServerHello、证书和密钥交换参数客户端验证证书合法性双方协商出会话密钥后续通信使用会话密钥进行对称加密。在嵌入式设备接入云平台时MQTT over TLS 是常见做法。比如 STM32 4G 模块连接 OneNET如果使用 TLS 加密需要关注内存占用、证书存储和握手时间。4.2 LoRa 与低功耗广域网LoRa 是一种低功耗广域网LPWAN无线通信技术特点是传输距离远开阔环境可达数公里功耗低适合电池供电设备数据速率低通常只有几 kbps 到几十 kbps工作在 Sub-GHz 频段穿透能力强。LoRa 适用于智慧农业、智能抄表、环境监测等场景。使用 LoRa 时要注意频段合规、扩频因子SF、带宽和编码率之间的权衡扩频因子越大灵敏度越高但速率越慢。4.3 D2D 通信D2DDevice-to-Device设备到设备通信是蜂窝网络中的一种直连通信技术允许相邻终端直接传输数据而不必经过基站转发。D2D 的优势降低基站负载降低传输时延提高频谱利用率支持邻近发现和公共安全通信。D2D 在 5G 时代有更广的应用空间比如车联网中的 V2V 通信、社交应用中的近距离文件传输。4.4 量子通信量子通信是利用量子态进行信息传输的通信方式最成熟的应用是量子密钥分发QKD。QKD 的核心优势是任何对量子态的窃听都会留下痕迹从而保证密钥分发过程的安全性。需要说明的是量子通信目前不等于“超光速通信”也不替代经典通信网络而是为经典通信提供更安全的密钥分发手段。对大多数开发者而言了解其原理即可不必神化。4.5 通信仿真与网络数据分析通信系统设计阶段仿真验证非常重要。常用工具包括 MATLAB/Simulink、NS-3、OMNeT。比如评估不同调制方式在 AWGN 信道下的误码率可以用 MATLAB 快速完成仿真。基于 Python 的通信网络流量数据分析与可视化同样是热点方向。通过分析数据包长度、协议分布、流量时序特征可以辅助网络排障和容量规划。典型的 Python 库包括 Scapy、Pandas、Matplotlib。5. 完整实战STM32CubeMX 配置 UART 串口通信理论知识说再多不如一个可以运行的小实验实在。下面以 STM32 为例演示从 CubeMX 配置到代码编写、再到上位机验证的完整流程使用 UART 实现开发板与 PC 的通信。5.1 环境准备硬件STM32 开发板如 STM32F103C8T6 最小系统板USB-TTL 串口模块软件STM32CubeMX、Keil MDK 或 STM32CubeIDEPC 串口调试助手。版本不需要完全一致配置流程是通用的。重点理解配置思路再根据实际芯片型号做调整。5.2 CubeMX 配置步骤打开 STM32CubeMX新建工程选择芯片型号。在SYS中配置 Debug 为 Serial Wire。在USART1中设置模式为Asynchronous。配置参数Baud Rate: 115200 Word Length: 8 Bits Parity: None Stop Bits: 1在Clock Configuration中确认系统时钟比如 72 MHz。在Project Manager中设置工程名称和工具链生成代码。5.3 编写核心代码在生成代码的基础上发送数据可以重写fputc来支持printf重定向。/* 文件路径Core/Src/main.c */ #include main.h #include usart.h #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 0xFFFF); return ch; }主循环中实现串口回显功能接收到一个字节后把它原样发送回去。uint8_t rx_data; HAL_UART_Receive(huart1, rx_data, 1, HAL_MAX_DELAY); HAL_UART_Transmit(huart1, rx_data, 1, HAL_MAX_DELAY);也可以加入简单判断实现 LED 控制if (rx_data 1) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); } else if (rx_data 0) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); }5.4 运行与验证使用 USB-TTL 模块将开发板的 USART1 TX、RX、GND 连接到 PC。打开串口调试助手选择对应 COM 口。设置波特率 115200数据位 8停止位 1无校验。发送1观察 LED 状态变化发送0LED 熄灭。发送任意字符串口助手应收到相同字符说明回显功能正常。这个实验虽然简单但覆盖了 UART 通信的核心流程初始化、发送、接收、串口参数匹配。实际项目中Modbus RTU 报文解析、GPS NMEA 语句处理、AT 指令交互都是在这个基础上扩展的。5.5 常见问题如果串口助手收不到数据按以下顺序排查TX/RX 是否交叉连接GND 是否共地波特率是否一致串口模块驱动是否安装MCU 是否正确运行。6. 从硬件到软件组件通信与进程通信通信不只发生在硬件层面。在软件系统中进程之间、模块之间同样需要通信这就是常说的 IPC 和组件通信。6.1 进程间通信IPCLinux 下常见的 IPC 方式包括管道Pipe适用于父子进程消息队列适合小数据量、异步通信共享内存适合大数据量、高性能通信信号量用于同步套接字Socket可用于本机和跨主机通信。选择 IPC 方式时一个基本参考思路方式优点缺点场景管道简单单向、容量小父子进程消息队列支持多进程大小受限解耦通信共享内存速度快需要同步机制大数据量Socket跨网络开发复杂度高分布式系统6.2 前端组件通信前端开发中的组件通信也是“通信”的一种具体表现。Vue 和 React 中常见的通信方式包括父组件向子组件传值通过 props子组件向父组件传值通过事件回调或自定义事件兄弟组件通信通过共同的父级或状态管理工具跨层级组件通信使用 Provide/Inject 或 Context全局状态管理Vuex、Pinia、Redux。组件通信的设计原则是单向数据流、状态提升、避免过度共享。管理状态时优先考虑是否需要全局共享不要把所有数据都塞进全局 Store。6.3 分布式组件通信微服务架构下服务之间常用的通信方式有HTTP/REST 同步调用gRPC 高性能 RPC消息队列异步解耦Kafka、RabbitMQ事件驱动架构。分布式通信的难点在于部分失败、消息幂等、超时控制、链路追踪。这些都需要在实际工程中专门设计不能简单理解为“调一个接口”就行。7. 通信工程师考证与学习路线7.1 通信工程师考试简介通信专业技术人员职业水平考试是国内通信行业的重要认证分为初级、中级、高级。其中中级又分为交换技术、传输与接入、互联网技术、动力与环境等方向。“通信工程师互联网技术”方向涉及的内容包括数据通信基础TCP/IP 协议路由与交换网络安全操作系统云计算与大数据基础。如果你正在做通信或者准备进入通信行业这个证书可以作为系统梳理知识体系的方式但要注意考试通过不等于工程能力强真正的能力来自项目实践。7.2 学习路线建议通信技术学习路线可以按“从物理层到应用层”的思路展开先掌握通信原理基础信号、调制、编码、信道容量再学嵌入式接口UART、SPI、I2C、CAN 动手调通学习网络协议TCP/IP、HTTP、MQTT、TLS做一个小项目比如 STM32 采集传感器数据通过 4G 模块上传云平台如果有余力可以深入射频、5G、量子通信等方向。每一步都强调动手实践。只看书很难理解 CAN 仲裁和波特率更不会知道 I2C 总线卡死时有多痛苦。8. 常见通信问题排查与调试技巧通信调试是嵌入式开发中最耗费时间的环节。这里整理一份通用排查清单。8.1 通用排查顺序检查物理连接引脚是否接对接线是否松动是否共地检查参数配置波特率、数据位、停止位、校验位是否一致使用示波器/逻辑分析仪抓波形确认是否有信号、时序是否正常简化系统去掉不必要的外设和代码做最小验证查看错误标志位如 UART ORE、CAN Error Passive 等寄存器软件分层调试先确认硬件层通再查协议层最后查应用层。8.2 典型问题定位问题现象常见原因解决思路UART 收到乱码波特率不匹配时钟配置错误确认双方波特率一致检查系统时钟树I2C 总线卡死SDA 被拉低从机异常重新上电检查上拉电阻和器件地址SPI 读回全 0MISO 接线错误从机未上电检查接线单独测试从机CAN 回环正常、正常模式发不出收发器配置错误无终端电阻检查 STB 引脚两端加 120Ω 电阻CAN 波形畸变终端电阻缺失线缆过长添加终端电阻降低波特率RS-485 收发异常A/B 接反方向切换不及时确认 A/B 极性调整 DE/RE 时序以太网 ping 不通IP 配置错误PHY 地址错误检查 PHY ID、网络参数FT232H 通信异常驱动问题接线电平不匹配重装驱动确认 3.3V/5V 电平连接超时网络不通防火墙拦截ping 网关检查端口和 MTU8.3 如何通过 CAN 总线波形判断通信好坏用示波器在 CAN_H 和 CAN_L 之间测量正常情况下可以看到差分信号。判断要点显性电平约 2V 差分电压隐性电平接近 0V位时间稳定与配置的波特率一致无毛刺、无严重的信号回勾如果波形上沿下沿平缓说明总线电容较大可考虑降低波特率。9. 最佳实践与工程建议通信开发中很多问题不是技术本身难而是工程习惯不到位。这里有几点值得长期坚持。9.1 命名与注释规范化通信协议涉及大量寄存器、引脚和数据结构。建议统一命名风格宏定义使用全大写下划线如CAN_ID_STD结构体使用驼峰命名如CanTxMsg每个协议数据字段都要注释单位、范围、大小端。9.2 配置管理通信参数波特率、IP 地址、设备 ID 等不要散落在业务代码里建议集中放到配置文件或独立头文件中。比如#define UART_BAUDRATE 115200 #define CAN_BITRATE 500000 #define SLAVE_ADDR 0x10改参数时只改一处避免多个文件维护同一常量。9.3 异常处理与日志通信模块必须有超时处理和错误恢复逻辑不能无限阻塞等待。一个可靠的做法是每次通信设定超时时间超时后重试 N 次仍然失败则上报错误状态。日志建议分级INFO正常状态变化WARN重试、参数异常等非致命问题ERROR通信失败、硬件异常。调试时把 UART 日志和逻辑分析仪波形结合起来看定位效率会高很多。9.4 安全边界无论是有线还是无线通信都要考虑数据安全问题。不要明文传输敏感数据优先使用 TLS设备接入云平台时使用设备证书和动态令牌固件中不要硬编码生产密钥通信协议设计时预留认证和授权字段。涉及数据库、生产环境、服务器操作时必须遵循最小权限原则先在测试环境验证再做变更。9.5 波形测试与文档记录每次通信问题定位后建议把现象、原因、解决方案记录下来。长期积累下来这会成为团队非常重要的资产。尤其是 CAN 波形、I2C 时序这类问题文字描述很难说清保存示波器截图非常有用。写在最后从红军通信学校的“半部电台”到今天的 5G、量子通信、万物互联通信技术的形态发生了翻天覆地的变化但信息可靠传输的本质没有变。对于正在学习通信的开发者来说理解底层原理、动手调试真实协议、积累排错经验是最扎实的成长路径。这次北邮学子走进中国工农红军通信校的活动与其说是一次历史寻访不如说是一次跨越时空的对话当年通信兵用生命维护电波畅通今天工程师用代码和硬件连接世界。红色通信基因中的那种“把问题解决在链路最后一公里”的精神放到今天的嵌入式开发、网络调优、协议分析中依然很受用。希望这篇长文能帮你把散落的通信知识点串成一条线从通信原理到 UART/SPI/I2C/CAN再到 TLS、LoRa、进程通信和工程排错。如果你刚刚接触通信先照着串口实验做一遍找一块开发板亲手调通一个协议再往深处走。技术这条路动手永远是第一位的。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门