总线、UART、IIC、SPI
一图流

总线
概念
连接多个部件的信息传输线,是各部件共享的传输介质
类型
片内总线:连接处理器内核和外设的总线,在芯片内部
片外总线:连接芯片和其他芯片或者模块的总线
总线的通信
总线通信的方式

串行通信
-
数据按位顺序传输,同一时刻只能收或发1bit位信息,因此只用1根信号线
-
优点:占用引脚资源少
-
缺点:速度相对较慢
并行通信
-
数据各个位同时传输,同一时刻可以收或发多个bit位的信息,因此需要多根信号线
-
优点:速度快
-
缺点:占用引脚资源多
通信的类型
-
单工:只能收或者只能发,只有一条单向管道
-
半双工:可以收,也可以发,但不能同时收发,只有一条双向管道
-
全双工:同一时刻既接收,又发送,有两条相反的管道
同步通信和异步通信
同步通信
一般情况下,同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方会存在一个时钟线用于传输时钟信号,大家根据时钟信号的变化进行通信
异步通信
指数据传输速度匹配依赖于通信双方自己独立的系统 时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同步
不同种类的串口有不同的通信类型
-
UART属于串行全双工异步通信
-
IIC串行半双工同步通信
-
SPI串行全双工同步通信
UART
概念
UART(Universal asynchronous receiver/transmitter):通用异步接收发送器
串口用于两个模块之间进行异步全双工串行通信
特点
两个芯片各有一个RXD、一个TXD、一个GND接口,一个芯片的RXD连接另一个芯片的TXD
RXD:数据接收引脚
TXD:数据发送引脚
GND:接地引脚
这抗干扰能力弱,旁边有干扰源就会对收发的电平数据造成干扰,进而导致数据失真
一般适用于一块板子上面的两个芯片之间进行数据传输
由于数异步通信,所以需要再发送数据前先约定传输速度——波特率(bit/s)
串口数据帧格式
由于双方时钟不一样,就算提前约定好了波特率,随着传输数据量的增加,双方数据收发就会累计一定的误差,为了规避这个误差,我们需要对传输收发的数据进行约定,规范好收发的格式来消除误差
数据帧
空闲位:当不进行数据收发时,数据线处于高电平状态
起始位:1bit 低电平 一帧数据传输的开始
数据位:5-8位数据位,进行传输的数据
校验位:1bit 可有可无
奇校验:一帧数据传输后保证数据位和校验位1的个数是一个奇数
X51->0101 0001 此时校验位为0
0X53->0101 0011 此时校验位为1
偶校验:一帧数据传输后保证数据位和校验位1的个数是一个偶数
0X51->0101 0001 此时校验位为1
0X53->0101 0011 此时校验位为0
停止位:1-2bit 高电平,一帧数据传输结束的标志,在停止位器件重新校准时钟,清除累计的误差
一般数据格式常设置为8N1:8bit数据位,没有校验位,1bit停止位
IIC
概念
I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工总线,主要用于连接整体电路
I2C总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是 时钟线SCL
IIC支持多主机多从机通信和一主机多从机通信
硬件连线
SCL:时钟线,用于传输时钟信号
SDA:数据线,用于传输数据
寻找从机
每一个设备都会有一个自己的从机地址,这个从机地址就是设备的ID号
主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)
总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器
信号
概念
iic总线是一种同步通信总线,也就表示通信双方的通信过程要在各种时钟信号的作用下实现:起始信号、终止信号、应答信号、非应答信号、数据接收和发送信号
起始信号
时钟线为高电平时,数据线由高电平变成低电平

终止信号
时钟线为高电平时,数据线由低电平变成高电平

数据接收和发送

-
时钟信号为高电平期间,数据线上的数据必须保持稳定
-
只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化
-
一个时钟周期,接收方和发送发完成了一位数据的接收和发送
应答和非应答

-
发送方在发送完数据,接收方都会反馈一个反馈信号,这个信号就是应答信号和非应答信号
-
应答信号:接收方收到数据,继续进行下一个8bit数据的接收
-
非应答信号:接收方接收到数据,不进行下一次数据的接收
IIC主机和从机通信过程
主机给从机发送多个字节的数据
主机发送起始信号
主机发送7bit从机地址+1bit写标志
从机回应应答
主机发送8bit从机寄存器地址
从机回应应答
主机发送8bit数据
从机应答
主机再次发送8bit数据
从机应答
。。。。
主机发送终止信号
主机读取从机多个字节的数据
主机发送起始信号
主机发送7bit从机地址+1bit写标志
从机回应应答
主机发送8bit从机寄存器地址
从机回应应答
主机发起重复起始信号
主机发送7bit从机地址+1bit读标志
从机回应应答信号
从机发送8bit数据
主机回应应答信号
从机发送8bit数据
主机回应应答
。。。。
主机回应非应答信号
主机发起终止信号
iic总线通信的速率
100K
400K
1M
3.4M
SPI
概念
SPI(Serial Peripheral interface)串行外围设备接口
是一种高速的,全双工,同步的通信总线
在芯片的管脚上只占用四根线,节约了芯片的管脚,为PCB的布局上节省空间,提供方便
SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间,OLED 数码管、LCD
SPI总线支持一主机多从机通信
接线方式
基本接线方式
MISO:数据输入/输出引脚,用于从模式发送数据,主模式接收数据
MOSI:数据输入/输出引脚,用于主模式发送数据,从模式接收数据
SCK:串口时钟,作为主设备的输出,从设备的输入
CSN:从设备选择,用来选择主/从设备
四线制
-
一主机多从机时会使用CSN来选择从机

三线制
-
一主机一从机时可以去掉CSN

时序分析
时钟极性
-
时钟极性为1:空闲状态下时钟线保持高电平
-
时钟极性为0:空闲状态下时钟线保持低电平
时钟相位
-
以时钟极性为起始标记的每一个周期内,在第一次变化的为0,第二次变化的为1

-
时钟相位为1:在时钟后沿进行数据采样,时钟前沿进行数据输出
-
时钟相位为0:在时钟前沿进行数据采样,时钟后沿进行数据输出
相关文章:
总线、UART、IIC、SPI
一图流 总线 概念 连接多个部件的信息传输线,是各部件共享的传输介质 类型 片内总线:连接处理器内核和外设的总线,在芯片内部 片外总线:连接芯片和其他芯片或者模块的总线 总线的通信 总线通信的方式 串行通信 数据按位顺序传…...
戴尔电脑设置u盘启动_戴尔电脑设置u盘启动多种方法
最近有很多网友问,戴尔台式机怎么设置u盘启动,特别是近两年的戴尔台式机比较复杂,有些网友不知道怎么设置,其实设置u盘启动有两种方法,下面小编教大家戴尔电脑设置u盘启动方法。 戴尔电脑设置u盘启动方法一、戴尔进入b…...
【python】四帧差法实现运动目标检测
四帧差法是一种运动目标检测技术,它通过比较连续四帧图像之间的差异来检测运动物体。这种方法可以在一定的程度上提高检测的准确性。 目录 1 方案 2 实践 ① 代码 ② 效果图 1 方案 具体的步骤如下: ① 读取视频流:使用cv2.VideoCapture…...
JVM学习指南(48)-JVM即时编译
文章目录 即时编译(Just-In-Time Compilation, JIT)概述为什么JVM需要即时编译?即时编译与传统的静态编译的区别JVM中的即时编译器HotSpot VM中的C1和C2编译器编译器的作用和位置即时编译的工作流程代码的加载和解释执行热点代码检测编译优化编译优化技术公共子表达式消除循…...
office 2019 关闭word窗口后卡死未响应
最近关闭word文件总是出现卡死未响应的状态,必须从任务管理器才能杀掉word 进程,然后重新打开word再保存,很是麻烦。(#其他特征,在word中打字会特别变慢,敲击键盘半秒才出现字符。) office官网…...
[操作系统] 深入进程地址空间
程序地址空间回顾 在C语言学习的时,对程序的函数、变量、代码等数据的存储有一个大致的轮廓。在语言层面上存储的地方叫做程序地址空间,不同类型的数据有着不同的存储地址。 下图为程序地址空间的存储分布和和特性: 使用以下代码来验证一下…...
CVE-2025-0411 7-zip 漏洞复现
文章目录 免责申明漏洞描述影响版本漏洞poc漏洞复现修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 此漏洞 (CVSS SCORE 7.0) 允许远程攻击者绕…...
leetcode151-反转字符串中的单词
leetcode 151 思路 时间复杂度:O(n) 空间复杂度:O(n) 首先将字符串转为数组,这样可以方便进行操作,然后定义一个新的数组来存放从后到前的单词,由于arr中转换以后可能会出现有些项是空格的情况,所以需要判…...
若依 v-hasPermi 自定义指令失效场景
今天使用若依跟往常一样使用v-hasPermi 自定义指令的时候发现这个指令失效了,原因是和v-if指令一块使用,具体代码如下: <el-buttonsize"mini"type"text"icon"el-icon-edit-outline"v-hasPermi"[evalu…...
vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定
1. 基础用法 在 Vue3 中,v-model 在组件上的使用有了更灵活的方式。默认情况下,v-model 使用 modelValue 作为 prop,update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…...
使用 Python 和 Tesseract 实现验证码识别
验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源 OCR(Optical Character Recognition,光学字符识别)工具 Tesseract,结合 Python 的强大生态,我们可以高效实现验证码识…...
谈一谈前端构建工具的本地代理配置(Webpack与Vite)
在Web前端开发中,我们在本地写代码经常遇到的一件事情就是代理配置。代理配置说简单也简单,配置一次基本就一劳永逸,但有时候配置不对,无论如何也连不上后端,就成了非常头疼的一件事。在这本文中,我们讨论一…...
CentOS7非root用户离线安装Docker及常见问题总结、各种操作系统docker桌面程序下载地址
环境说明 1、安装用户有sudo权限 2、本文讲docker组件安装,不是桌面程序安装 3、本文讲离线安装,不是在线安装 4、目标机器是内网机器,与外部网络不连通 下载 1、下载离线安装包,并上传到$HOME/basic-tool 目录 下载地址&am…...
Alibaba Spring Cloud 十三 Nacos,Gateway,Nginx 部署架构与负载均衡方案
在微服务体系中,Nacos 主要承担“服务注册与发现、配置中心”的职能,Gateway(如 Spring Cloud Gateway)通常负责“路由转发、过滤、安全鉴权、灰度流量控制”等功能,而 Nginx 则常被用作“边缘反向代理”或“统一流量入…...
+-*/运算符优先级计算模板
acwing3302 知识点一:有关unordered_map的优先级 头文件<unordered_map>,然后进行符号优先级定义 定义方式unordered_map<char,int>pr{ {,1},{-,1},{*,2},{/,2}};其余没定义的默认为0 知识点二:头文件<cctype>中的isdigit()是判断…...
GPT 结束语设计 以nanogpt为例
GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候,可能会遇到一些性能问题,即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制,…...
FastDFS的安装及使用
分布式存储发展历程 前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电 商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图 片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此 大体量的…...
C++ lambda表达式
目录 1.lambda表达式 1.1什么是Lambda表达式? 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式? Lambda表达式是C11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码…...
react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求
为了实现一个React页面使用定时器调用一组多个接口,并在任意一个接口请求返回令牌失效时清除定时器且不再触发这一组请求,可以遵循以下步骤: 1. 定义API调用函数:创建一个函数来处理一组API调用。每个API调用都应该检查响应状态以…...
Python的泛型(Generic)与协变(Covariant)
今天咱们聊聊Python类型标注中的泛型(Generic),与协变(Covariant)。 不了解类型标注的小伙伴,可以先看一看我的上一篇文章 “Python类型检查” Python 类型检查-CSDN博客 例子 这次我开个宠物商店。看下面代码。 class Animal:passclass Dog(Animal):passclass Cat(A…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...
【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...
Web APIS Day01
1.声明变量const优先 那为什么一开始前面就不能用const呢,接下来看几个例子: 下面这张为什么可以用const呢?因为复杂数据的引用地址没变,数组还是数组,只是添加了个元素,本质没变,所以可以用con…...
结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案
以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...







