当前位置: 首页 > java >正文

江协科技STM32学习笔记补充之002 对比介绍 I²C 和 SPI 两种常见的串行总线接口

简要对比介绍 I²CSPI 两种常见的串行总线接口:


1. I²C(Inter-Integrated Circuit)

  • 结构:双线制

    • SCL(时钟线)

    • SDA(数据线)

  • 拓扑:多主多从,可在一条总线上挂很多设备(每个设备有唯一 7/10 位地址)。

  • 传输方式:半双工,基于时钟同步,数据一位一位在 SDA 上传输。

  • 速度

    • 标准模式:100 kbps

    • 快速模式:400 kbps

    • 高速模式:3.4 Mbps

    • (部分 MCU/器件支持 5 Mbps+)

  • 优点

    • 接线少(两根线搞定多个设备)

    • 节省 IO 口

  • 缺点

    • 速度相对较慢

    • 需要上拉电阻,通信距离有限

    • 协议相对复杂(起始/停止、应答 ACK 等)

常见应用:EEPROM、RTC、温湿度传感器、触摸屏控制器等。


2. SPI(Serial Peripheral Interface)

  • 结构:四线制(最基本)

    • SCLK(时钟)

    • MOSI(主机输出/从机输入)

    • MISO(主机输入/从机输出)

    • CS/SS(片选信号,可有多个)

  • 拓扑:1 主多从,但每个从设备要单独的 CS 片选引脚。

  • 传输方式:全双工,主机和从机可同时发送和接收数据。

  • 速度:几 Mbps 到几十 Mbps(常见 10–50 Mbps,部分可达百兆)。

  • 优点

    • 速度快,效率高

    • 硬件简单,协议灵活

  • 缺点

    • 引脚多(每加一个从机就需要一个片选线)

    • 没有标准化的寻址机制

    • 不适合挂太多设备

常见应用:Flash 存储、显示屏驱动、ADC/DAC、无线模块(nRF24L01、ESP8266)等。


3. 简单对比表

特性I²CSPI
线数2 根4 根以上
通信模式半双工全双工
速度较低 (≤3.4 Mbps)较高 (10–100 Mbps)
多设备支持好(地址寻址)一般(需多片选引脚)
硬件复杂度较复杂(需协议控制)简单(移位寄存器)
常见用途低速传感器高速外设、显示、存储

一句话总结

  • I²C —— 用两根线挂一堆“低速传感器”。

  • SPI —— 用高速全双工线挂“高速外设”。

I²C 与 SPI 对比分析表

特性I²CSPI
全称Inter-Integrated CircuitSerial Peripheral Interface
发明者/设计公司飞利浦 (Philips, 现 NXP),1982 年提出,用于芯片间低速通信摩托罗拉 (Motorola),1980 年代设计,用于 MCU 与外设高速通信
线数2 根(SCL 时钟 + SDA 数据)4 根起(SCLK 时钟 + MOSI + MISO + CS/SS),多从机需更多 CS 引脚
拓扑结构多主多从,共享总线,依靠设备地址区分1 主多从,靠独立的片选线选择从机
通信模式半双工,同一时刻只能单向传输全双工,主从可同时收发
速度100 kbps(标准)、400 kbps(Fast)、3.4 Mbps(High-Speed)常见 10–50 Mbps,部分器件可达 100+ Mbps
数据完整性有应答位(ACK/NACK),协议相对复杂没有标准应答机制,协议简单但需应用层保证可靠性
硬件复杂度控制逻辑复杂,需要起始/停止条件、应答机制硬件移位寄存器实现即可,逻辑简单
资源消耗占用少 IO 口(只需 2 根线,可挂很多设备)占用较多 IO(从机数量多时,需要多个 CS 引脚)
常见用途低速传感器(EEPROM、RTC、温湿度、触摸屏控制器)高速外设(Flash、LCD 显示屏、ADC/DAC、无线模块)
优点接线简单、节省引脚、易于扩展速度快、全双工、时序简单
缺点速度较低、距离有限、需要上拉电阻占用引脚多、扩展性差、缺乏统一寻址机制

总结

  • I²C:由 Philips (NXP) 发明,主打 简洁、节省引脚、适合低速多设备

  • SPI:由 Motorola 设计,主打 高速、全双工、简单可靠,适合 高速外设通信

要不要我再帮你扩展一列,加入 应用案例(典型芯片型号),比如 I²C 的 DS1307 RTC、SPI 的 W25Q64 Flash

http://www.xdnf.cn/news/19663.html

相关文章:

  • hive udf 执行一次调用多次问题
  • 鸿蒙开发5.0【鸿蒙开发实践】
  • 算法模板(Java版)_前缀和与差分
  • win10虚拟机报错打不开和ubuntu空间不足
  • 深度学习中的数据增强实战:基于PyTorch的图像分类任务优化
  • 【音视频】WebRTC-NetEQ 分析
  • flutter踩坑插件:Swift架构不兼容
  • 深度学习篇---Pytorch常用优化器
  • 网络安全A模块专项练习任务十解析
  • 数据结构:单链表的应用(力扣算法题)第三章
  • ANTD-TABLE表格字段明细展示
  • (MySQL)分布式锁
  • k8s知识点汇总2
  • 【 HarmonyOS 】错误描述:The certificate has expired! 鸿蒙证书过期如何解决?
  • K8S-etcd数据库的相关操作
  • 吴恩达机器学习补充:决策树和随机森林
  • 中越跨境物流管理系统的设计与实现(原创)
  • DiffusionGPT-LLM驱动的文本生成图像系统
  • 【高等数学】第十章 重积分——第五节 含参变量的积分
  • 焦耳热技术助力顶刊研究:薄层质子交换膜实现高效水电解制氢
  • 【STM32】在链接脚本中指定DMA Buffer的地址
  • 智慧班牌系统基于Java+Vue技术栈构建,实现教育信息化综合管理。
  • shell脚本编辑(小白基础学习)
  • 从拿起简历(resume)重新找工作开始聊起
  • 【算法】算法题核心类别与通用解题思路
  • git基础命令
  • React中纯 localStorage 与 Context + useReducer + localStorage对比
  • HTML应用指南:利用GET请求获取MSN财经股价数据并可视化
  • IDEA Spring属性注解依赖注入的警告 Field injection is not recommended 异常解决方案
  • 【0426】insert into 内核实现之 找到 buffe, 插入 tuple (2)