嵌入式开发必备:I2C、SPI、UART通信协议实战对比与选型指南

单片机通信协议全解析:从UART、I2C到SPI的实战指南 通信协议是嵌入式系统中设备间数据交换的基础规则,它定义了数据传输的格式、时序和错误处理机制。从原理层面理解,通信协议可分为并行与串行、同步与异步等不同类型,每种方式都有其特定的应用场景和技术特点。在单片机开发中,掌握通信协议的技术价值在于能够实现可靠的数据传输、多设备协同工作和系统扩展性。常见的应用场景包括传感器数据采集、显示驱动、存储器访问以及设备间的控制指令传递。UART作为基础的异步串行通信协议,适用于点对点通信和与PC机的数据交互;I2C凭借其两线制和多设备支持特性,在传感器网络中广泛应用;SPI则 阅读详情

嵌入式开发必备:I2C、SPI、UART通信协议实战对比与选型指南

在嵌入式系统的世界里,微控制器(MCU)与外部世界对话的“语言”至关重要。无论是读取一个温湿度传感器的数据,驱动一块OLED显示屏,还是与上位机进行调试通信,选择合适的通信协议往往是项目成功的第一步。然而,面对I2C、SPI、UART这三种最常用的串行通信协议,许多开发者,尤其是刚入行的工程师,常常会感到困惑:它们到底有何不同?我的传感器该用哪种协议连接?在PCB布线紧张时,哪种协议能帮我节省引脚?这些问题看似基础,却直接关系到系统的稳定性、成本和开发效率。

这篇文章将从一线工程师的实际项目视角出发,抛开教科书式的理论罗列,深入对比I2C、SPI和UART的核心特性、电气连接和实战应用。我们会结合STM32和经典51单片机的具体场景,分析在连接传感器、存储器、显示屏等常见外设时,如何做出最明智的协议选型。目标很明确:当你完成阅读后,面对一个具体的硬件设计任务,能够清晰地知道“我该用哪种协议,以及为什么”。

1. 协议基石:理解通信的基本分类

在深入三种具体协议之前,有必要快速回顾几个决定协议特性的基础概念。这些概念是理解后续所有对比的钥匙。

串行 vs. 并行:这是数据传输的根本方式。并行通信如同一条宽阔的多车道高速公路,多位数据(例如8位、16位)通过多根数据线同时传输,速度极快,但代价是占用大量I/O引脚和PCB走线空间,且线间干扰(串扰)严重。串行通信则像一条单车道,数据位一位接一位地在同一根线上顺序传输。它节省了引脚和布线空间,抗干扰设计更灵活,已成为现代嵌入式系统芯片间通信的绝对主流。我们讨论的I2C、SPI、UART都属于串行通信。

同步 vs. 异步:这关乎通信双方的时钟如何协调。

  • 同步通信:通信双方共享一个时钟信号。发送方在时钟信号的边沿(上升沿或下降沿)输出数据,接收方在对应的边沿采样数据。时钟像节拍器一样,确保了收发双方步调一致。SPI和I2C都是同步通信,它们有独立的时钟线(SCLK或SCL)。
  • 异步通信:没有共享的时钟线。通信双方依靠预先约定好的速率(波特率)各自计时。数据帧中包含起始位和停止位来界定一个字符的边界。UART就是典型的异步通信。它的优势是只需要两根数据线(TX和RX),但要求双方波特率设置必须高度一致,否则会产生累积误差导致数据错乱。

全双工、半双工与单工:这描述了数据传输的方向性。

  • 单工:数据只能单向流动,如A永远发,B永远收(如早期的电视信号)。
  • 半双工:数据可以双向流动,但同一时刻只能朝一个方向。就像对讲机,说话时不能听,收听时不能说。I2C就是半双工。
  • 全双工:数据可以同时双向传输。就像电话通话,双方可以同时说和听。SPI和UART都是全双工。

为了更直观地对比这些基础特性在三大协议中的体现,我们可以看下面这个表格:

特性维度UART (Universal Asynchronous Receiver/Transmitter)I2C (Inter-Integrated Circuit)SPI (Serial Peripheral Interface)
通信类型异步、串行同步、串行同步、串行
双工模式全双工半双工全双工
典型线数2 (TX, RX) + GND2 (SDA, SCL) + GND3 或 4 (MOSI, MISO, SCLK, [CS]) + GND
时钟信号无(依赖波特率)有(SCL,由主机提供)有(SCLK,由主机提供)
数据速率较低(常用9600 - 115200 bps)标准模式100kbps,快速模式400kbps,高速模式3.4Mbps很高(可达数十Mbps甚至上百Mbps)
寻址方式点对点,无需寻址7位/10位从机地址广播硬件片选(CS)信号
主要优势简单、通用、点对点可靠引脚少、支持多主机多从机、有应答机制速度极快、协议简单灵活、全双工
典型应用调试输出、PC通信、GPS模块传感器(如BMP280)、EEPROM、RTC时钟芯片Flash存储器、ADC/DAC、显示屏驱动(如OLED)、SD卡

提示:上表中的“线数”是最小配置。实际项目中,UART可能需要额外的流控信号(RTS/CTS),SPI在多从机时需要多个片选线,I2C总线通常需要上拉电阻。

2. I2C协议深度解析:优雅的总线管理者

I2C(读作“I方C”)由飞利浦公司(现恩智浦)发明,是一种设计非常精巧的多主机、半双工、同步串行总线。它的核心思想是用最少的连线(仅两根:串行数据线SDA和串行时钟线SCL)连接总线上的多个设备。

2.1 核心工作机制与帧结构

I2C通信就像一场精心组织的会议。总线上有主机(Master)和从机(Slave)。主机负责发起和终止一次传输,并产生时钟信号。每个从机都有一个唯一的7位或10位地址。通信总是由主机发起,过程如下:

  1. 起始条件:主机在SCL为高电平时,将SDA从高拉低。这个独特的信号告诉总线上所有设备:“注意,我要开始讲话了”。
  2. 地址帧:主机发送一个字节,其中高7位(或高10位中的一部分)是目标从机地址,最低位(R/W位)指示方向:0表示主机要写数据到从机,1表示主机要读数据从从机。
  3. 应答位:所有从机将收到的地址与自己的地址比较。匹配的从机在第9个时钟周期将SDA拉低作为应答。如果主机没收到应答(SDA仍为高),说明寻址失败。
  4. 数据帧:在收到应答后,发送方(可能是主机或从机,由R/W位决定)开始逐个字节发送数据。每个字节(8位)传输后,接收方都必须回应一个应答位。
  5. 停止条件:通信结束后,主机在SCL为高电平时,将SDA从低拉高,表示“会议结束,总线释放”。
// 一个模拟I2C写操作的伪代码逻辑,帮助理解时序
void I2C_WriteByte(uint8_t slaveAddr, uint8_t regAddr, uint8_t data) {
    StartCondition();          // 发出起始信号
    SendByte(slaveAddr << 1);  // 发送从机地址 + 写位(0)
    CheckAck();                // 检查从机应答
    SendByte(regAddr);         // 发送要写入的寄存器地址
    CheckAck();
    SendByte(data);            // 发送要写入的数据
    CheckAck();
    StopCondition();           // 发出停止信号
}

2.2 优势、局限与实战场景

I2C的优势非常突出:

  • 极简布线:只需两根线,即可连接大量设备,非常适合PCB空间紧凑的设计。
  • 多主机支持:理论上允许多个MCU共享同一总线,通过仲裁机制避免冲突。
  • 软件友好:地址寻址方式使得软件层面管理多个设备非常清晰。
  • 内置应答:每个字节后的应答位提供了基础的错误检测机制。

然而,其局限性也同样明显:

  • 速度较慢:标准模式仅100kbps,即便快速模式400kbps,在传输大量数据(如图像)时也显得力不从心。
  • 总线电容限制:总线上每个器件都会增加等效电容,过大的总线电容会扭曲信号边沿,限制通信距离和挂载设备数量。通常要求在板级范围内使用。
  • 需要上拉电阻:SDA和SCL线是开源输出,必须通过上拉电阻接到正电源,电阻值需要根据总线速度和电容仔细计算。

实战选型建议:

  • 何时选用I2C?
    • 当你需要连接多个低速传感器时,如温湿度计(SHT3x)、气压计(BMP280)、环境光传感器等。
    • 当你需要访问小容量非易失存储器时,如EEPROM(AT24Cxx系列)。
    • 当你需要驱动简单的IO扩展芯片或**实时时钟(RTC)**模块时。
    • 当你的MCU引脚资源非常紧张,希望用最少连线控制多个外设时。
  • 经典案例:STM32读取MPU6050陀螺仪。MPU6050使用I2C接口,STM32作为主机,通过I2C总线配置其寄存器并读取角速度和加速度数据。接线仅需连接STM32的PB6(SCL)、PB7(SDA)到MPU6050对应引脚,并加上两个4.7kΩ的上拉电阻到3.3V。

3. SPI协议深度解析:速度至上的点对点专家

如果说I2C是善于管理多人的会议主持人,那么SPI就是追求极致效率的点对点高速通道。它由摩托罗拉公司推广,是一种全双工、同步、串行的通信接口。

3.1 四线制与工作模式

SPI通常需要4根线:

  • SCLK (Serial Clock):时钟信号,由主机产生。
  • MOSI (Master Out Slave In):主机输出,从机输入的数据线。
  • MISO (Master In Slave Out):主机输入,从机输出的数据线。
  • CS/SS (Chip Select / Slave Select):片选信号,低电平有效。每个从机都需要独占一根CS线。

SPI的通信过程比I2C更“粗暴”直接:主机拉低某个从机的CS线选中它,然后立即在SCLK的节拍下,通过MOSI发送数据,同时通过MISO接收数据。没有起始、停止、地址和应答位,数据传输是连续且高速的。

SPI有一个关键概念:时钟极性(CPOL)和时钟相位(CPHA),它们共同定义了4种工作模式。主从设备必须配置为相同的模式。

模式CPOL (时钟极性)CPHA (时钟相位)时钟空闲状态数据采样时刻
000低电平在第一个时钟边沿(上升沿)
101低电平在第二个时钟边沿(下降沿)
210高电平在第一个时钟边沿(下降沿)
311高电平在第二个时钟边沿(上升沿)

注意:在查阅外设芯片数据手册时,务必找到其SPI模式要求(如Mode 0, Mode 3等),并将MCU的SPI控制器配置为相同模式,否则无法通信。

3.2 优势、局限与实战场景

SPI的压倒性优势是速度,它可以轻松跑到几十甚至上百Mbps,是三种协议中最快的。

  • 全双工高速:同时收发,吞吐量巨大。
  • 协议简单:硬件实现简单,软件驱动开销小。
  • 灵活性高:数据位宽可以是8位、16位等,时钟频率可灵活配置。

其主要局限在于:

  • 引脚占用多:每增加一个从机,就需要多一根CS线。连接多个设备时,引脚消耗很快。
  • 无硬件应答:协议层面没有错误确认机制,可靠性依赖应用层或完美的物理连接。
  • 通信距离短:通常也是板级应用,高速信号不适合长距离传输。

实战选型建议:

  • 何时选用SPI?
    • 当你需要极高的数据传输速率时,如读写大容量SPI Flash、驱动高分辨率显示屏、传输音频数据。
    • 当你连接对实时性要求高的高速ADC/DAC时。
    • 当你的外设只提供SPI接口时,如很多型号的SD卡、以太网控制器(W5500)。
    • 当你进行**芯片内编程(ICP)**或调试时,很多MCU的调试接口基于SPI变种。
  • 经典案例:STM32驱动SSD1306 OLED显示屏。这是一个典型的SPI应用。STM32的SPI主机通过MOSI发送显示数据(命令和图形数据),CS引脚控制通信使能,还有一个额外的D/C引脚区分数据与命令。由于OLED刷新需要一定数据量,SPI的高速特性确保了画面更新的流畅性。
// 一个简单的SPI发送函数示例(基于STM32 HAL库)
void SPI_SendData(uint8_t* pData, uint16_t Size) {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 拉低CS,选中从机
    HAL_SPI_Transmit(&hspi1, pData, Size, HAL_MAX_DELAY);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // 拉高CS,释放从机
}
// 注意:这是一个阻塞式发送。实际项目中常使用DMA或中断以提高效率。

4. UART协议深度解析:异步通信的常青树

UART是我们常说的“串口”,它是一种异步、全双工、串行通信协议。其最大特点是不需要时钟线,仅依靠双方约定的波特率进行通信。

4.1 帧格式与电气标准

一个UART数据帧由以下部分组成:

  1. 起始位:1位逻辑0,标志一个帧的开始。
  2. 数据位:5-9位(通常为8位),即实际传输的数据,先发送最低位。
  3. 校验位:可选(奇校验、偶校验或无校验),用于简单的错误检测。
  4. 停止位:1位、1.5位或2位的逻辑1,标志一个帧的结束。

通信双方必须预先严格约定波特率、数据位、停止位和校验位。常见的配置是“8-N-1”(8位数据,无校验,1位停止位)。

原始的UART使用TTL电平:高电平(通常3.3V或5V)代表逻辑1,低电平(0V)代表逻辑0。这种电平抗干扰能力弱,传输距离极短(通常不超过1米)。因此,在实际工业或长距离应用中,UART通常与RS-232、RS-485等电气标准结合使用。

  • RS-232:使用正负电压(如+3V至+15V表示逻辑0,-3V至-15V表示逻辑1)来提高抗干扰能力和通信距离(典型15米)。需要专用的电平转换芯片(如MAX232)。
  • RS-485:使用差分信号(两根线A和B的电压差表示逻辑),具有极强的抗共模干扰能力,支持多点通信(一主多从),距离可达上千米。需要485转换芯片(如MAX485),且为半双工。

4.2 优势、局限与实战场景

UART的核心优势在于其简单和通用:

  • 接口极简:最少只需TX、RX、GND三根线。
  • 广泛支持:几乎所有的MCU、CPU、PC都具备UART接口。
  • 软件简单:协议简单,易于用软件模拟(“bit-banging”)。
  • 距离可扩展:通过RS-485可以满足长距离工业通信需求。

其主要问题是:

  • 相对低速:虽然波特率可达数Mbps,但在高速持续数据传输上不如SPI。
  • 效率较低:每字节有额外的起始位和停止位开销。
  • 依赖精确时钟:双方波特率误差需控制在很小范围内(通常<3%)。

实战选型建议:

  • 何时选用UART?
    • 系统调试与日志输出:这是UART最经典的应用,通过串口打印信息到PC终端。
    • 与PC或蓝牙/Wi-Fi模块通信:许多模块(如HC-05蓝牙、ESP8266)使用AT指令通过UART与MCU交互。
    • GPS模块、GSM模块:这些设备通常提供UART接口输出NMEA语句或进行AT指令控制。
    • 工业现场总线:当需要长距离、多节点、高抗干扰通信时,选择UART+RS-485的组合,如Modbus RTU协议就是跑在RS-485物理层上的。
    • MCU之间的简单通信:当两个板载MCU需要交换数据,且对速度要求不高时,UART是最直接的选择。
  • 经典案例:51单片机通过CH340G芯片与PC通信。51单片机的TX/RX引脚是TTL电平,通过CH340G转换为USB接口,在PC上识别为虚拟串口(COM口)。开发者可以通过串口助手软件发送指令或接收单片机上传的传感器数据,这是学习和调试的黄金组合。

5. 综合对比与终极选型决策矩阵

理论分析之后,让我们进入最实用的环节:面对一个具体项目,如何做出选择?下面的决策流程和矩阵或许能给你一个清晰的思路。

首先,问自己以下几个问题,按顺序判断:

  1. 通信距离?

    • 板内(<10cm):三种皆可,进入下一步判断。
    • 板间/机箱内(<1米):优先UART(TTL)或I2C/SPI(若通过连接器可靠连接)。
    • 长距离(>1米):必须选择UART + RS-485。I2C和SPI基本出局。
  2. 速度要求?

    • 低速(<100kbps):三种皆可。
    • 中速(100kbps - 1Mbps):SPI或UART(较高波特率)。
    • 高速(>1Mbps):首选SPI,其次是高速UART。
  3. 要连接多少个同类型设备?

    • 1个设备:三种皆可。
    • 多个设备,且希望节省MCU引脚:首选I2C(共用总线)。
    • 多个设备,且要求各自独立高速通信:考虑SPI(但需多个CS引脚)或UART+RS-485(多节点网络)。
  4. 通信的确定性/可靠性要求?

    • 一般要求:三种皆可。
    • 需要硬件级应答确认:首选I2C(内置ACK)。
    • 高可靠性长距离:UART+RS-485(差分信号抗干扰强)。
  5. MCU和外设的引脚/资源限制?

    • 引脚极度紧张:首选I2C(2线)。
    • 有足够引脚,且外设只支持某种接口:没得选,遵循外设要求。

为了更直观,我们将常见的外设类型与推荐协议总结如下:

外设类型典型型号示例推荐协议核心理由
温湿度/气压传感器SHT30, BMP280I2C低速、多传感器可挂同一总线、节省引脚
RTC时钟芯片DS3231, PCF8563I2C低速、典型I2C外设、电路成熟
EEPROM存储器AT24C02, AT24C256I2C典型应用、寻址方便
OLED显示屏SSD1306 (128x64)SPI 或 I2C小尺寸/低刷新率可用I2C;大尺寸/高刷新率必选SPI
Flash存储器W25Q64, GD25Q127SPI需要极高读写速度
SD卡微SD卡SPI (或SDIO)SPI模式兼容性好,软件驱动成熟
ADC/DAC芯片ADS1115 (高精度ADC)I2C低速高精度
ADC/DAC芯片MCP3008 (高速ADC)SPI需要高速采样
电机驱动/扩展IOPCA9685 (舵机驱动)I2C控制多路,节省引脚
蓝牙/Wi-Fi模块HC-05, ESP-01SUART标准AT指令接口,简单通用
GPS模块NEO-6M, NEO-8MUART标准NMEA语句输出
工业传感器/执行器支持Modbus的变送器UART+RS-485工业标准,长距离抗干扰

在我的项目经验中,最容易出错的地方不是协议本身,而是电平匹配和上拉电阻。例如,一个3.3V的STM32与一个5V的Arduino通过I2C通信,如果不做电平转换,可能会损坏STM32。再比如,I2C总线的上拉电阻值选得太大,会导致上升沿过慢,通信失败;选得太小,会增加功耗。一个实用的技巧是:在布板时,即使暂时只用到一个I2C设备,也把SDA和SCL的上拉电阻焊盘留出来,电阻值可以先使用4.7kΩ(3.3V系统)或2.2kΩ(5V系统)作为起点,然后用示波器观察波形,根据实际情况调整。

最后,别忘了软件复杂度。UART的驱动最简单,几乎无需配置。I2C需要处理起始、停止、应答,软件模拟时序稍有繁琐。SPI的驱动也不难,但要小心处理CPOL/CPHA模式。好在,对于STM32这类现代MCU,其硬件外设(USART, I2C, SPI)都有完善的HAL库或LL库支持,大大降低了开发门槛。当你犹豫不决时,不妨看看你的MCU哪个通信外设资源更丰富、哪个库函数用起来更顺手,这也可能成为决定因素。

嵌入式开发必知:SPI、I2C、UART三大串行通信协议核心原理与实战选型 串行通信是嵌入式系统与智能硬件中实现芯片、传感器、外设间数据交换的基础技术。其核心原理在于通过单根或少数几根数据线,按位顺序传输数据,相较于并行通信,极大地节省了硬件引脚与PCB布线资源。从技术价值看,串行通信协议是构建复杂电子系统的“血管”,决定了模块间协作的效率和可靠性。在嵌入式开发、单片机编程、传感器应用等场景中,开发者需要根据速度、复杂度、连接数量等需求,选择合适的通信协议。其中,SPI以其高速全双工特性,常用于驱动TFT液晶屏、Flash存储等;I2C凭借极简的两线制和地址寻址,适合连接温湿度传感 阅读详情

相关推荐

嵌入式开发必备:UART、SPI、I2C通信协议全对比(附典型应用场景)

本文深度解析嵌入式开发中UART、SPI、I2C三大通信协议的架构差异、传输效率及典型应用场景,提供实战选型指南。通过对比电气特性、协议开销和优化技巧,帮助工程师在板内板间通信中做出高效决策,提升系统稳定性和开发效率。

soda5的博客 1113

嵌入式开发必备:UART、SPI、IIC通信协议对比与实战选型指南

本文深入对比了嵌入式开发中UART、SPI、IIC三大核心通信协议,从同步机制、拓扑结构、数据流向等本质差异出发,结合STM32实战配置案例,提供了清晰的多维度选型指南。文章重点分析了各协议在速度、硬件复杂度、多设备支持等方面的优劣,并给出从通信距离、设备数量、速率需求出发的实战决策树,帮助工程师根据具体场景选择最合适的通信协议。

mars5的博客 1018

单片机通信协议详解:UART、I2C、SPI原理与应用实践

通信协议是嵌入式系统中设备间数据交换的核心规则,定义了物理连接、数据格式和时序同步等关键技术要素。其工作原理基于串行通信技术,通过单根数据线顺序传输比特位,相比并行通信具有接线简单、成本低的优势。在技术价值层面,通信协议实现了单片机与传感器、显示屏等外设的高效协同,是构建复杂嵌入式系统的基石。典型应用场景包括环境监测、智能家居和工业控制等领域,其中UART、I2C和SPI作为最常用的三种串行协议各有特点:UART采用异步通信适合调试接口,I2C凭借多设备寻址能力广泛连接传感器,SPI则以全双工高速传输见长。

weixin_30945039的博客 388

嵌入式开发必备:UART、SPI、I2C通信协议实战对比(附电路图)

本文深入对比了嵌入式开发中三种核心通信协议UART、SPI和I2C的技术特性与应用场景,提供详细的电路设计指南和实战优化技巧。通过协议特性对比表、典型代码示例和故障排查方案,帮助开发者根据传输速率、设备数量和功耗需求选择最佳方案,提升嵌入式系统通信可靠性。

book8的博客 679

嵌入式工程师必备:UART/SPI/I2C三种串口通信协议到底怎么选?实测对比告诉你答案

本文深入对比了UART、SPI、I2C三种串口通信协议的核心特性与性能差异,通过STM32平台实测数据揭示选型要点。针对串口通信场景,详细分析物理层差异、协议栈结构及抗干扰能力,并提供典型应用案例与选型决策树,帮助嵌入式工程师优化通信方案设计。

weixin_29231027的博客 376

嵌入式开发必备:I2S、UART、SPI、I2C四大低速协议核心原理与实战避坑指南

在嵌入式系统与硬件交互领域,串行通信协议是连接微控制器与各类外设的基础。其核心原理在于通过特定的时序和电气规范,在有限的引脚上实现可靠的数据交换。从异步通信的UART到同步高速的SPI,再到简洁的总线型I2C和专精音频的I2S,每种协议都在速度、复杂度与引脚效率上做出了不同权衡,为传感器、存储器、显示驱动及音频编解码器等设备提供了关键的技术价值。掌握这些协议对于嵌入式开发至关重要,例如,正确配置SPI的时钟极性与相位(CPOL/CPHA)是通信成功的前提,而合理选择I2C总线的上拉电阻则是保障系统稳定性的基

weixin_31774841的博客 367

嵌入式软件必备知识--通讯协议(UART、I2C、SPI、CAN)

UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。UART全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它通常称作UART,是一种异步收发传输器, 是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;

m0_73482095的博客 3677

单片机通信技术详解:UART、I2C、SPI原理与应用场景

单片机通信是嵌入式系统实现设备间数据交换的核心技术,其本质是通过特定协议建立可靠的数据传输通道。从原理层面看,通信协议定义了数据传输的时序、格式和电气特性,确保不同设备能够正确解析信息。在技术价值上,通信能力决定了单片机能否从独立单元升级为智能系统的组成部分,实现传感器数据采集、多设备协同控制等关键功能。UART串口通信作为最基础的异步串行通信方式,适用于简单的点对点数据传输场景;I2C协议通过地址寻址机制支持多设备连接,特别适合传感器网络构建;SPI则以全双工高速传输见长,广泛应用于显示屏、存储器等对速度

weixin_30764771的博客 384

对比SPI、UART、I2C通信的区别与应用

SPI通信是一种单主多从的通信方式,通信时需要指定从机地址。UART通信只需要两根线(TX、RX)实现即可,其中TX线是发送方向,RX线是接收方向。I2C通信采用两根线(SDA、SCL)实现,其中SDA线是数据线,SCL线是时钟线。I2C通信一般用于多主多从的通信方式,由于它采用了“主从”结构,可以实现多个主机在总线上进行数据通信。SPI、UART、I2C通信是常用的数字通信协议,它们在不同的场景下有不同的应用。UART通信的应用场景主要集中在需要点对点通信,数据传输速率较低的场合。

weixin_46094676的博客 1370

嵌入式开发必知:UART、I2C、SPI、CAN等核心通信总线原理与应用全解析

在嵌入式系统与微控制器(MCU)开发中,通信总线是实现CPU核心、内存及各类外设间高效数据交换的基础架构。其工作原理定义了数据传输的协议、时序与物理连接,如同芯片内部的交通规则,是提升系统效率与可靠性的关键。从技术价值看,深入理解总线机制能帮助开发者从单纯调用库函数进阶为系统设计者,有效解决通信不稳定、数据丢失等底层问题,并优化系统性能与功耗。在应用场景上,UART、I2C和SPI作为经典的近距离串行总线,广泛用于连接传感器、存储器和显示模块;而CAN、LIN和FlexRay等总线则构成了汽车电子与工业自动

weixin_34161064的博客 412

比例导引算法详解:从理论到Matlab实现(含3D轨迹可视化)

本文深入解析比例导引算法(PNG)的数学原理与Matlab实现,涵盖3D轨迹可视化技术。从基础运动学模型到导航比优化,详细讲解导弹拦截系统的核心算法,并提供Matlab代码示例,帮助读者掌握从理论到实战的全流程。

weixin_33725722的博客 543

嵌入式通信协议深度解析:从UART、SPI、I2C到CAN的实战选型指南

嵌入式通信协议是嵌入式系统实现设备间数据交换的核心技术基础。其本质是通过定义物理层、数据链路层等规范,解决设备间可靠、高效的信息传输问题。从原理上看,协议设计需要在速度、复杂度、可靠性和成本之间进行权衡,例如采用同步或异步时钟、单端或差分信号等不同机制。这些协议的技术价值在于,它们为嵌入式开发提供了标准化的通信框架,极大简化了硬件连接与软件驱动开发,是构建复杂嵌入式系统的基石。在应用场景上,不同协议各有侧重:UART以其简单异步特性广泛用于调试接口和模块通信;SPI凭借高速同步优势主导板级高速外设连接;I2

weixin_34294649的博客 326

Android音频混音器AudioMixer实战:从多路输入到设备播放的完整流程解析

本文深入解析了Android平台上音频混音器AudioMixer的完整工作流程,涵盖从多路音频输入、轨道创建与配置、AudioBufferProvider数据源接入,到核心混音处理与最终设备播放的全过程。文章重点探讨了如何高效管理音频数据流、配置音量与重采样参数,并提供了缓冲区管理与性能优化的实战技巧,帮助开发者构建稳定、低延迟的音频应用。

l3m4n的博客 337

嵌入式开发必备:SPI、IIC、RS232/485通信协议对比与实战选型指南

本文深入对比了嵌入式开发中四种主流通信协议SPI、IIC、RS232和RS485的核心特性与适用场景,包括传输方式、速率、距离及硬件设计要点。通过实战案例和选型决策树,帮助工程师根据项目需求(如速度、距离、设备数量)科学选择最佳通信协议,提升系统性能和成本效益。

weixin_29285605的博客 388

深入解析Cuk、Zeta和Sepic拓扑:非隔离型开关电源的设计奥秘

本文深入解析了Cuk、Zeta和Sepic三种非隔离型开关电源拓扑的设计奥秘。它们均能实现升降压转换,但特性各异:Cuk拓扑输出反向电压,输入输出纹波极低;Sepic拓扑输出同极性电压,应用广泛;Zeta拓扑输出纹波小,适合精密供电。文章详细对比了其电路结构、工作原理、核心公式及选型指南,帮助工程师根据输入电压范围、输出极性及纹波要求,灵活选择最合适的拓扑方案。

weixin_28308325的博客 465

手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。

a3b4c5的博客 695

ESP32外设接口硬件原理:SPI/I2C/UART集成分析

深入剖析ESP32的SPI、I2C和UART三大外设接口的硬件工作原理,帮助开发者更好地理解esp32在多协议通信中的集成能力与应用优势。

weixin_35294091的博客 1053

YOLOv11 改进 - 注意力机制 | HaloNet 局部自注意力 (Local Self-Attention) 以分块交互策略实现高效全局上下文建模

本文介绍了局部自注意力机制(HaloAttention)在YOLOv11中的结合应用。局部自注意力通过关注输入数据局部区域来捕捉特征关系,能降低计算复杂度、增强局部特征捕捉,且可与CNN结合。其计算时先定义局部窗口,再计算注意力权重并加权求和。我们将HaloAttention集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,改进后的模型在目标检测和实例分割等任务中表现更佳,证明了自注意力模型在传统卷积主导领域的有效性。

魔改工程师的博客 1134

嵌入式开发必知:12种核心通信协议详解与实战选型指南

通信协议是嵌入式系统中实现设备间数据交换的底层规则,它定义了电气特性、数据格式和时序等关键要素。其核心原理在于根据不同的应用需求,在通信距离、速度、系统复杂度、成本和抗干扰能力等维度上进行权衡与设计。掌握通信协议的技术价值在于能够为芯片、传感器和模块选择最合适的“对话语言”,从而构建稳定可靠的嵌入式系统。在应用场景上,UART常用于调试和简单模块通信,I2C适合连接多个低速传感器以节省引脚,SPI则服务于需要高速数据传输的Flash存储器和显示屏,而CAN和Ethernet则在汽车电子、工业控制等对可靠性和

weixin_33727510的博客 350

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1209

28_Spring AI 干货笔记之 OpenAI 聊天功能

本文详细介绍了在Spring AI框架中集成OpenAI聊天模型的方法。内容涵盖API密钥配置、通过starter依赖启用自动配置、连接与模型参数的详细设置,并重点说明了运行时选项的动态覆盖机制。文章还深入讲解了多模态处理(图像与音频)、结构化输出、函数调用等高级功能,提供了示例控制器和手动配置指南,并讨论了与OpenAI兼容服务器的适配与推理模型思维链的获取。

在科技的浪潮中,我们寻找着创新的火种,在代码的海洋里,我们编织着智慧的网。腾飞开源,就是这样一个由技术精英汇聚而成的博客平台,我们致力于分享在Java、Python、IoT和人工智能等领域的最新研究成果和实战经验。 在腾飞开源的博客上,你会看到紧跟技术前 1644

嵌入式开发必备:I2S、UART、SPI、I2C四大低速协议核心解析与实战

在嵌入式系统开发中,串行通信协议是连接微控制器、传感器、存储器和外设的核心技术。其基本原理是通过单根或少数几根数据线,在时钟信号协调下逐位传输数据,分为同步和异步两种主要方式。这些协议在硬件资源占用、通信速率和系统复杂度之间取得了平衡,技术价值在于为资源受限的嵌入式设备提供了可靠、低成本的芯片间互联方案。它们广泛应用于从简单的传感器数据采集到复杂的音频处理、显示控制等场景。本文聚焦于嵌入式领域最核心的四种低速串行协议:用于音频流传输的I2S、用于调试和简单通信的UART、用于高速设备连接的SPI,以及用于多

weixin_31815843的博客 244

基于YOLOv11的工业零件表面缺陷检测系统:从原理到实现

工业质量控制是制造业的核心环节,表面缺陷检测作为其中重要组成部分,直接关系到产品质量和企业效益。本文详细介绍了一种基于YOLOv11深度学习算法的工业零件表面缺陷检测系统,包含完整的算法原理分析、数据集构建方法、模型训练策略以及用户界面设计。通过大量实验验证,该系统能够高效准确地检测零件表面的划痕、凹陷、锈蚀等多种缺陷,检测精度达到96.2%,满足工业实时检测需求。本文还提供了完整的代码实现和详细的技术文档,为相关领域的研究者和工程师提供参考。关键词:表面缺陷检测;YOLOv11;深度学习;工业视觉;

YOLO 562

RS485 CAN SPI IIC UART RS232这些通信协议传输距离、传输速度对比给出比较顺序-笔记(面试必备)

传输距离排序(长到短)传输速度排序(快到慢)根据具体应用场景和需求,可以选择合适的通信协议来实现有效的通信。

qq_58662017的博客 3398

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

STM32开发必备:USART、I2C、SPI通信协议实战配置与调试指南

在嵌入式系统开发中,通信协议是实现微控制器与外部设备数据交换的核心技术。其工作原理定义了数据传输的时序、格式和电气特性,是确保硬件间可靠“对话”的基础。掌握通信协议的技术价值在于能够根据应用场景(如传感器数据采集、存储器扩展或人机交互)灵活选择最合适的方案,从而优化系统性能与成本。本文聚焦于STM32开发中三种最常用的通信协议:USART、I2C和SPI。通过对比其特性(如速度、引脚占用和拓扑结构),并结合HAL库的配置实例,深入剖析了从CubeMX初始化到代码实现的完整流程。针对实际开发中常见的调试难题,

weixin_29188043的博客 231

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: genhtml 高级定制:打造专业级代码覆盖率报告
下一篇: Redis连接问题排查:虚拟机NAT模式下端口无法访问的5个常见原因及解决方案
gitlab7runner
博客等级 码龄4年 78粉丝 1747原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值