I²C、SPI、UART、CAN 通信协议详解

一、协议基本特性对比

特性I²CSPIUARTCAN
通信类型同步、半双工同步、全双工异步、全双工异步、多主多从
信号线SDA(数据)、SCL(时钟)MOSI、MISO、SCK、SS(片选)TX(发送)、RX(接收)CAN_H、CAN_L(差分信号)
拓扑结构多主多从(总线式)主从式(需片选)点对点多主多从(总线式)
最大速率标准模式 100kbps,高速模式 3.4Mbps可达 100Mbps+通常 ≤ 115200bps(部分可达 1Mbps)1Mbps(短距离)或 125kbps(长距离)
错误检测奇偶校验(可选)CRC、ACK、错误帧自动重传
典型应用传感器、EEPROM存储器、显示屏调试接口、简单设备通信汽车电子、工业控制

二、实现方式与工作原理

1. I²C(Inter-Integrated Circuit) 

        实现方式:  

                主设备控制时钟线(SCL),通过 SDA 发送地址和数据。  

                7/10 位地址寻址,支持广播模式。  

                开漏输出,需外接上拉电阻(通常 4.7kΩ)。  

        时序特点:  

                起始条件(SDA 下降沿时 SCL 高电平)、停止条件(SDA 上升沿时 SCL 高电平)。  

                每个字节后需接收方发送 ACK/NACK。  

2. SPI(Serial Peripheral Interface) 

        实现方式:  

                主设备通过 SCK 提供时钟,MOSI 发送数据,MISO 接收从设备数据。  

                每个从设备需独立 SS 线,片选信号低电平有效。  

        时序特点:  

                时钟极性(CPOL)和相位(CPHA)需主从一致。  

                全双工传输,数据在时钟边沿采样。  

3. UART(Universal Asynchronous Receiver/Transmitter) 

        实现方式:  

                无时钟线,依赖双方约定波特率(如 9600、115200)。  

                数据帧包括起始位(低电平)、数据位(5-9 位)、校验位(可选)、停止位(高电平)。  

        扩展协议:  

                RS232(电平转换,±3~15V)、RS485(差分信号,支持多点通信)。  

4. CAN(Controller Area Network) 

        实现方式:  

                差分信号(CAN_H 和 CAN_L),总线两端需 120Ω 终端电阻。  

                基于消息优先级(ID 仲裁)的非破坏性冲突解决机制。  

        帧结构:  

                数据帧(ID、数据长度、数据域)、远程帧、错误帧、过载帧。  

三、优缺点对比

协议优点缺点
I²C引脚少、支持多设备、成本低速度低、总线电容限制距离(通常 < 1m)
SPI高速、全双工、无地址冲突引脚多(每个从设备需 SS 线)、不支持多主
UART简单、点对点、广泛支持速率低、无多设备支持、易受干扰
CAN高可靠性、抗干扰、支持多主硬件复杂、成本高、速率受限

四、电路设计注意事项

1. I²C 设计要点

        上拉电阻:根据总线速度和电容选择阻值(4.7kΩ~10kΩ),确保上升时间满足要求。  

        地址冲突:避免从设备地址重复,必要时使用地址扩展芯片(如 PCA9548)。  

        总线电容:总线上设备过多时,需降低速率或分段设计。  

2. SPI 设计要点 

        信号完整性:  

                短距离布线,避免时钟偏移(SCK 与数据线长度匹配)。  

                高速场景使用阻抗控制走线(如 50Ω 单端)。  

                片选管理:多从设备时,使用 GPIO 扩展芯片或译码器减少引脚占用。  

3. UART 设计要点 

        电平转换:  

                TTL 电平(3.3V/5V)需通过 MAX3232 等芯片转换为 RS232 电平。  

                长距离通信使用 RS485(差分信号,需 SN65HVD72 收发器)。  

        抗干扰:  

                添加 TVS 二极管(如 SMAJ5.0A)防护 ESD。  

                使用屏蔽双绞线(RS485)减少共模干扰。  

4. CAN 设计要点  

        终端电阻:总线两端必须接 120Ω 电阻,消除信号反射。  

        布线规范:  

                双绞线布线(CAN_H 和 CAN_L 绞合),长度差 < 1cm。  

                避免分支(“T”型连接),采用菊花链拓扑。  

        共模滤波:添加共模扼流圈(如 WE-CMB)抑制高频噪声。  

五、应用场景推荐

        I²C:传感器网络(如温度传感器、加速度计)、低复杂度多设备控制。  

        SPI:高速数据传输(如 Flash 存储器、TFT 显示屏)、ADC/DAC 接口。  

        UART:设备调试日志输出、GPS 模块通信、简单主从控制。  

        CAN:汽车电子(ECU 通信)、工业自动化(PLC 网络)、机器人控制。  

六、总结

        I²C:低成本、多设备场景的首选,但需注意总线负载和速度限制。  

        SPI:追求高速和全双工时的最佳选择,但引脚资源消耗较大。  

        UART:简单点对点通信的理想方案,适合调试和短距离传输。  

        CAN:高可靠性和抗干扰需求的工业、汽车领域标配,但需复杂硬件支持。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法

系列文章目录 【diffusers 极速入门&#xff08;一&#xff09;】pipeline 实际调用的是什么&#xff1f; call 方法!【diffusers 极速入门&#xff08;二&#xff09;】如何得到扩散去噪的中间结果&#xff1f;Pipeline callbacks 管道回调函数【diffusers极速入门&#xff0…

第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》

第十三章 持久化存储 一、Kubernetes存储设计核心概念 &#xff08;1&#xff09;存储抽象模型 PersistentVolume (PV)&#xff1a;集群级别的存储资源抽象&#xff08;如NFS卷/云存储盘&#xff09;PersistentVolumeClaim (PVC)&#xff1a;用户对存储资源的声明请求&#…

以太网安全

前言&#xff1a; 端口隔离可实现同一VLAN内端口之间的隔离。用户只需要将端口加入到隔离组中&#xff0c;就可以实现隔离组内端口之间的二层数据的隔离端口安全是一种在交换机接入层实施的安全机制&#xff0c;旨在通过控制端口的MAC地址学习行为&#xff0c;确保仅授权设备能…

跨域问题前端解决

由于浏览器的同源策略&#xff0c;前后端分离的项目&#xff0c;调试的时候总是会遇到跨域的问题&#xff0c;这里通过修改前端代码解决跨域问题。 首先先查看前端代码的根目录下&#xff0c;有没有vue.config.js文件, 若有&#xff0c;使用方法1&#xff0c;若没有此文件&…

Elasticsearch 报错index_closed_exception

index_closed_exception 是 Elasticsearch 中的一个异常类型&#xff0c;它通常发生在尝试对一个已经被关闭&#xff08;closed&#xff09;的索引执行搜索、写入或其他操作时。在 Elasticsearch 中&#xff0c;索引是用来存储和检索数据的逻辑命名空间&#xff0c;可以将其类比…

LearnOpenGL-笔记-其九

今天让我们完结高级OpenGL的部分&#xff1a; Instancing 很多时候&#xff0c;在场景中包含有大量实例的时候&#xff0c;光是调用GPU的绘制函数这个过程都会带来非常大的开销&#xff0c;因此我们需要想办法在每一次调用GPU的绘制函数时尽可能多地绘制&#xff0c;这个过程就…

PDF预览-搜索并高亮文本

在PDF.js中实现搜索高亮功能可以通过自定义一些代码来实现。PDF.js 是一个通用的、基于Web的PDF阅读器&#xff0c;它允许你在网页上嵌入PDF文件&#xff0c;并提供基本的阅读功能。要实现搜索并高亮显示文本&#xff0c;你可以通过以下几个步骤来完成&#xff1a; 1. 引入PDF…

二叉树——队列bfs专题

1.N叉树的层序遍历 我们之前遇到过二叉树的层序遍历&#xff0c;只需要用队列先进先出的特性就可以达到层序遍历的目的。 而这里不是二叉树&#xff0c;也就是说让节点的孩子入队列时不仅仅是左右孩子了&#xff0c;而是它的所有孩子。而我们看这棵多叉树的构造&#xff0c;它…

Python高级爬虫之JS逆向+安卓逆向1.1节-搭建Python开发环境

目录 引言&#xff1a; 1.1.1 为什么要安装Python? 1.1.2 下载Python解释器 1.1.3 安装Python解释器 1.1.4 测试是否安装成功 1.1.5 跟大神学高级爬虫安卓逆向 引言&#xff1a; 大神薯条老师的高级爬虫安卓逆向教程&#xff1a; 这套爬虫教程会系统讲解爬虫的初级&…

Windows 安装和使用 ElasticSearch

SpringBoot3 整合 Elasticsearch 1. ElasticSearch 1.1 ES &#xff08;1&#xff09;ES 是一个开源的分布式搜索和分析引擎&#xff0c;专为处理大模型数据而设计&#xff0c;它能够实现近乎实时的数据检索、分析和可视化&#xff0c;广泛用于全文搜索、日志分析和监控&…

matplotlib初探

库引入 import matplotlib.pyplot as pltpyplot.figure 创建新图形或激活现有图形

NVM 多版本Node.js 管理全指南(Windows系统)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

实验室预约|实验室预约小程序|基于Java+vue微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)

实验室预约小程序 目录 基于微信小程序的实验室预约管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;管理员登录 &#xff08;2&#xff09;实验室管理 &#xff08;3&#xff09;公告信息管理…

SpringBoot底层-数据源自动配置类

SpringBoot默认使用Hikari连接池&#xff0c;当我们想要切换成Druid连接池&#xff0c;底层原理是怎样呢 SpringBoot默认连接池——Hikari 在spring-boot-autoconfiguration包内有一个DataSourceConfiguraion配置类 abstract class DataSourceConfiguration {Configuration(p…

面试算法高频03-递归

认识递归 递归的概念与特性&#xff1a;递归本质类似循环&#xff0c;是通过函数体进行的循环操作。借助电影《盗梦空间》类比&#xff0c;递归如同主角在不同梦境层穿梭&#xff0c;向下进入不同递归层&#xff0c;向上能回到原来一层&#xff0c;每一层环境和周围元素相似&a…

linux Gitkraken 破解

ubuntu 安装 Gitkraken 9.x Pro 版本_gitcracken.git-CSDN博客

设计模式简述(十一)装饰器模式

装饰器模式 描述基本使用使用 描述 装饰器模式是一种功能型模式 用于动态增强对象的功能 这么一说感觉上和代理模式有些类似 抽象装饰器 要实现原有业务接口&#xff0c;并注入原有业务对象 至于对原有业务对象的调用&#xff0c;可以采用private业务对象 实现业务接口方法的…

【NetCore】ControllerBase:ASP.NET Core 中的基石类

ControllerBase:ASP.NET Core 中的基石类 一、什么是 ControllerBase?二、ControllerBase 的主要功能三、ControllerBase 的常用属性四、ControllerBase 的常用方法2. 模型绑定与验证3. 依赖注入五、ControllerBase 与 Controller 的区别六、实际开发中的最佳实践七、总结在 …

DE2-115分秒计数器

一、模块设计 如若不清楚怎么模块化&#xff0c;请看https://blog.csdn.net/szyugly/article/details/146379170?spm1001.2014.3001.5501 1.1顶层模块 module top_counter(input wire CLOCK_50, // 50MHz时钟input wire KEY0, // 暂停/继续按键out…

ubuntu git cola gui

直接的方法&#xff0c; samba&#xff0c; win 里用 tortoiseSVN 需要先在命令行&#xff0c;运行 git 命令&#xff0c;看到操作提示&#xff0c; 按照提示做 然后右键看 git diff 其它的方法 linux下可视化git工具git-cola安装与使用&#xff08;HTTP方式&#xff09;_git…