gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档总线

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  嵌入式
  • 分类归档: "总线"
总线 3月 9,2025

UART、SPI 和 I2C深度探索

通信接口是电子设备之间数据交换的基础,常见的接口如 UART、SPI 和 I2C 各有独特的技术特性和适用场景。以下是对这些接口的详细技术分析。

UART(通用异步收发传输器)

UART 是一种异步串行通信协议,广泛用于简单的点对点通信。

  • 波特率
    波特率是 UART 通信的核心参数,表示每秒传输的位数,常见值包括 9600、19200、38400、57600 和 115200 bps。波特率的选择需要权衡传输速度和可靠性。例如,低波特率(如 9600 bps)适用于长距离通信,因为信号衰减和噪声干扰较少;而高波特率(如 115200 bps)适合短距离高速传输,但对时钟精度要求更高。
  • 数据帧格式
    UART 的数据帧由以下部分组成:
    • 起始位:1 位,标志数据帧开始,通常为低电平。
    • 数据位:5 到 8 位,承载实际数据,8 位最为常见。
    • 奇偶校验位:可选,用于错误检测,可以是奇校验、偶校验或无校验。
    • 停止位:1 或 2 位,标志数据帧结束,通常为高电平。
      例如,一个典型配置可能是“8N1”,即 8 位数据、无校验、1 位停止位。
  • 流控制
    UART 支持两种流控制机制:
    • 硬件流控制:使用 RTS(请求发送)和 CTS(允许发送)信号线,避免数据溢出。
    • 软件流控制:使用 XON/XOFF 字符控制数据流,适用于无额外引脚的场景。
  • 错误检测
    UART 的错误检测主要依赖奇偶校验,但仅能发现错误,无法纠正。对于更高可靠性需求的应用,可引入 CRC(循环冗余校验)等机制。

SPI(串行外设接口)

SPI 是一种同步串行通信协议,以其高速度和简单性著称,适用于主从架构。

  • 时钟极性和相位
    SPI 有四种工作模式,由时钟极性(CPOL)和时钟相位(CPHA)定义:
    • CPOL=0, CPHA=0:时钟空闲为低电平,数据在上升沿采样。
    • CPOL=0, CPHA=1:时钟空闲为低电平,数据在下降沿采样。
    • CPOL=1, CPHA=0:时钟空闲为高电平,数据在下降沿采样。
    • CPOL=1, CPHA=1:时钟空闲为高电平,数据在上升沿采样。
      这些模式需在主从设备间保持一致。
  • 传输模式
    SPI 支持:
    • 全双工:MOSI(主出从入)和 MISO(主入从出)同时传输数据。
    • 半双工:MOSI 或 MISO 交替传输。
    • 单工:仅使用一条数据线传输。
  • 片选信号
    SPI 通过片选信号(SS/CS)选择从设备。主设备拉低 SS 激活从设备,拉高 SS 释放从设备。多从设备场景下,每个从设备需独立 SS 引脚。
  • 数据传输
    SPI 以字节为单位传输,SCLK(时钟信号)控制传输速率,无需帧间间隔,适合高速连续数据传输。

I2C(内部集成电路)

I2C 是一种多主多从的串行通信协议,以引脚少和灵活性著称。

  • 总线结构
    I2C 使用两条线:
    • SDA(数据线):传输数据。
    • SCL(时钟线):同步时钟。
      两者采用开漏设计,需上拉电阻维持高电平。
  • 地址机制
    I2C 支持:
    • 7 位地址:范围 0x00 到 0x7F,支持 128 个设备。
    • 10 位地址:范围 0x000 到 0x3FF,支持更多设备。
      主设备通过地址帧选择从设备。
  • 通信过程
    • 起始条件:SDA 从高到低跳变,SCL 保持高电平。
    • 数据传输:每字节后,从设备发送 ACK(应答位,低电平表示成功)。
    • 停止条件:SDA 从低到高跳变,SCL 保持高电平。
  • 时钟同步
    I2C 支持多主竞争,总线上的主设备通过拉低 SCL 同步时钟,确保通信稳定。
  • 错误检测
    通过 ACK 机制检测传输错误,若从设备未应答(NACK),主设备可重试或中止通信。
作者 east

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.