0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPI、I2C、I2S、UART:通信协议解释

倚栏清风L 来源:倚栏清风L 作者:倚栏清风L 2025-11-18 10:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发中,最常用的几种通信接口无非就是SPI、I2C、I2S、UART。名字看起来差不多,但应用场景和特性却大不相同。为什么都叫串行通信,结构却不一样?为什么有的能传音频,有的不能?本文一次梳理清楚。

一、通信协议快速对照表

协议 全称 线数 通信方式 速率 应用场景 特点
SPI Serial Peripheral Interface 4根常用线(MOSI, MISO, SCLK, CS) 全双工、主从 高速(可达几十 MHz) Flash、传感器、显示屏 硬件简单、速率高,但线多,扩展性差
I2C Inter-Integrated Circuit 2根线(SDA, SCL) 半双工、多主多从 100 kbps ~ 3.4 Mbps EEPROM、传感器、RTC 线少,可挂多设备,但速率低,总线长时稳定性差
I2S Inter-IC Sound 3~4根线(SD, WS, SCK, MCLK 可选) 同步串行(专用于音频) 常见 44.1kHz、48kHz(音频采样率) 音频数据传输(DAC、Codec、耳机) 专为音频设计,不能传通用数据
UART Universal Asynchronous Receiver/Transmitter 2根线(TX, RX) 异步、点对点 常见 9600~115200 bps,可达 Mbps 调试串口、GPS、蓝牙模块 硬件简单,广泛使用,但速率低,不支持多机总线

二、协议特点解析与代码示例

1.SPI

点对点的速度王者,主从明确。

常用于高速传感器、Flash 存储器、LCD 屏幕。

缺点:需要一根片选线控制每个从设备,多设备布线复杂。

示例:STM32SPI 主机发送数据:

uint8_ttxData=0xA5;

HAL_SPI_Transmit(&hspi1,&txData,1,HAL_MAX_DELAY);

从设备接收数据:

uint8_trxData;

HAL_SPI_Receive(&hspi2,&rxData,1,HAL_MAX_DELAY);

2.I2C

只需两根线,就能挂多个设备,协议层自带地址机制。

常用于低速传感器、EEPROM、实时时钟(RTC)。

缺点:速率不高,总线电容大时稳定性下降。

示例:STM32 I2C 读取温度传感器数据:

uint8_treg=0x00;// 温度寄存器地址

uint8_ttemp;

HAL_I2C_Master_Transmit(&hi2c1,SENSOR_ADDR,®,1,HAL_MAX_DELAY);

HAL_I2C_Master_Receive(&hi2c1,SENSOR_ADDR,&temp,1,HAL_MAX_DELAY);

3.I2S

名字很像 I2C,但完全不同,这是音频传输专用协议。

常见于音频 Codec、功放、耳机 DAC。

优点:数据帧结构天然适配音频采样率。

缺点:不能传普通数据,只能用于音频传输。

示例:STM32 I2S 发送音频数据:

uint16_taudioData[256];

HAL_I2S_Transmit(&hi2s2,audioData,256,HAL_MAX_DELAY);

4.UART

最老牌串口,几乎所有MCU都支持。

常见于调试口、蓝牙模块、GPS 模块。

优点:实现简单,应用广泛。

缺点:不支持挂多设备,速率有限。

示例:STM32 UART 发送字符串:

charmsg[]="Hello UART!";

HAL_UART_Transmit(&huart1,(uint8_t*)msg,strlen(msg),HAL_MAX_DELAY);

接收数据:

uint8_trxBuffer[20];

HAL_UART_Receive(&huart1,rxBuffer,20,HAL_MAX_DELAY);

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信协议
    +关注

    关注

    28

    文章

    1100

    浏览量

    42454
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1907

    浏览量

    102460
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1566

    浏览量

    131976
  • uart
    +关注

    关注

    22

    文章

    1325

    浏览量

    107153
  • I2S
    I2S
    +关注

    关注

    1

    文章

    81

    浏览量

    44323
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Adafruit TCA9548A 1-to-8 I2C 多路复用器:解决 I2C 设备地址冲突的利器

    的问题:某个 I2C 传感器芯片具有固定的 I2C 地址,而 I2C 协议不允许在同一 SDA/SCL 引脚上连接两个具有相同地址的设备。这时,TCA9548A 多路复用器
    的头像 发表于 05-11 12:05 313次阅读

    基于友晶DE10-Nano的HDMI音频传输案例之I2S通信协议介绍

    I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。ADV7513可以支持2~8个I2S音频通道,采样率最高可达192KHz。
    的头像 发表于 03-19 15:20 9299次阅读
    基于友晶DE10-Nano的HDMI音频传输案例之<b class='flag-5'>I2S</b><b class='flag-5'>通信协议</b>介绍

    I2C 为什么只要两根线就能搞定通信

    到目前为止,我们已经讨论了SPI通信UART通信的基础知识,现在让我们讨论本系列的最后一个协议,即集成电路间
    的头像 发表于 01-04 09:14 2198次阅读
    <b class='flag-5'>I2C</b> 为什么只要两根线就能搞定<b class='flag-5'>通信</b>?

    P82B715:I2C总线扩展的得力助手

    P82B715:I2C总线扩展的得力助手 在电子设计领域,I2C总线是一种常用的通信协议,但它的总线电容限制往往会影响实际通信距离和系统设计。今天,我们就来详细了解一下德州仪器(TI
    的头像 发表于 12-26 10:20 1895次阅读

    基于FPGA的I2C控制模块设计

    I2C_WRITE_WDATA.v模块实现I2C写时序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的头像 发表于 12-26 09:48 6441次阅读
    基于FPGA的<b class='flag-5'>I2C</b>控制模块设计

    基于FPGA的I2C通信协议设计

    I2C(Inter-Integrated Circuit)是一种由飞利浦半导体(现为恩智浦半导体)在1980年代初开发的同步、串行、半双工的总线型通信协议。主要用于近距离(同一块印刷电路板(PCB
    的头像 发表于 12-26 09:44 6485次阅读
    基于FPGA的<b class='flag-5'>I2C</b><b class='flag-5'>通信协议</b>设计

    I2C的缺点介绍

    上升时间变慢和潜在的信号衰减。对于长距离通信,其他协议,如 UART(通用异步接收器/发送器)或 SPI(串行外设接口)可能更合适。 速度限制: 虽然
    发表于 11-27 06:10

    UARTSPII2C 实战对比:哪个更适合你的项目?

    在嵌入式开发中,设备之间的通信是绕不开的话题。常见的三种总线接口——UARTSPII2C——各有优缺点。不同项目需求决定了选择哪一种协议
    的头像 发表于 11-24 19:04 1796次阅读
    <b class='flag-5'>UART</b>、<b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b> 实战对比:哪个更适合你的项目?

    SPII2CUART三种串行总线的区别与对比

    Asynchronous Receiver Transmitter:通用异步收发器) 2通信方式 SPIUART可以实现全双工,但I2C
    发表于 11-20 07:19

    SPII2CI2SUART通信协议对比表

    在嵌入式开发中,最常用的几种通信接口无非就是SPII2CI2SUART。名字看起来差不多,但应用场景和特性却大不相同。很多初学者容易混
    的头像 发表于 11-17 10:53 2288次阅读
    <b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b>、<b class='flag-5'>I2S</b>、<b class='flag-5'>UART</b>:<b class='flag-5'>通信协议</b>对比表

    ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

    在这上一篇文章中,我们介绍了ESP32 I2S音频总线的相关知识,简要了解了什么是I2S总线、它的通信格式,以及相关的底层API函数,这篇文章将介绍一个小案例——ESP32驱动INMP441读取音频
    的头像 发表于 10-23 19:55 5158次阅读
    ESP32 <b class='flag-5'>I2S</b>音频总线学习笔记(二):<b class='flag-5'>I2S</b>读取INMP441音频数据

    串行通信相关的基础知识

    串行通信是电子设备中数据交换的基石。最常见的串行通信协议UARTSPII2C等。
    的头像 发表于 10-15 10:53 2257次阅读
    串行<b class='flag-5'>通信</b>相关的基础知识

    【干货】一文带你彻底搞懂I2S协议:从基础信号到主从模式的深度解析

    在电子开发领域,数字音频的处理与传输是音频类项目开发的核心环节。I2S(Inter-ICSound)协议作为业界通用的数字音频串行接口标准,凭借简洁稳定的设计,为音频数据在集成电路之间的高效传输提供
    的头像 发表于 10-09 19:35 2967次阅读
    【干货】一文带你彻底搞懂<b class='flag-5'>I2S</b><b class='flag-5'>协议</b>:从基础信号到主从模式的深度解析

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C
    的头像 发表于 08-21 15:10 4061次阅读
    深入剖析<b class='flag-5'>I2C</b><b class='flag-5'>协议</b>

    第十八章 I2C通信测试

    本章介绍了I2C协议,其物理层用SDA和SCL双线,支持多设备:协议层含起始/停止信号、应答机制等。还讲解W55MH32的I2C外设及初始化,并进行了
    的头像 发表于 06-19 17:07 1574次阅读
    第十八章 <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>测试