总线、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…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...