【【STM32----I2C通信协议】】

news2024/12/23 4:52:23

STM32----I2C通信协议

在这里插入图片描述
我们会发现I2C有两根通信线: SCL和SDA
同步 半双工
带数据应答
支持总线挂载多设备(一主多从,多主多从)
硬件电路
所有I2C设备的SCL连在一起,SDA连在一起
设备的SCL和SDA均要配置成开漏输出模式
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
在这里插入图片描述
在这里插入图片描述
左边的CPU就是主机,他的权力很大包含了对SCL线的完全控制,任何时候都是主机完全掌控SCL线

从机的权利比较小,不允许任何时刻控制SCL总线

另外在空闲状态下,主机可以主动发起对SDA的控制.
从机 不允许主动发起对SDA的控制

只有在从机发送数据和从机应答的时候主机才会转交SDA的控制权给从机
在这里插入图片描述
就好比这些是挂在在I2C总线上的从机

我们在观察这个图中可以看出这几个特点

假设我们没有这两个电阻
在这里插入图片描述
对于SCL端 其实是非常容易控制的
因为主机掌控了对SCL端的完全控制权
但是对于SDA 并不是很好的处理
因为有些时候从机会发送 主机会接收
从机接收 主机发送
所以如果仅此而已 可能会在某些形式上
为了避免主线没协调好导致短路的问题
I2C的设计是禁止所有设备输出强上拉的高电平
采用外置弱上拉电阻和开漏输出的电路结构
就是怎么通俗易懂的解释呢 ,
在这里插入图片描述
这属于是强上拉和强下拉的输出模式
直接接入地和电源Vcc 那么直接接入的上拉 和下拉就会直接沟通电源或者是地 这样来说并不安全
那么我们如果把上拉的电源切断 换成浮空态的话 那么就会对我们的电路 产生一个保护作用
简称浮空态
在这里插入图片描述
我们会发现这样的做法会对我们的电路起到一定的保护作用

我们现在增加一个上拉电阻 就会实现其他不一样的功能
就像是一根杆子但是上面增加了一个弹簧
我们规定所有人只能向下拉杆子
或者放手(放手就相当于给置为低电位0)输出高电平 因为有根弹簧的存在它会自己回弹到悬空态 这相对于低电位0 肯定是高的,但是又不是很高 所以我们称其为弱上拉
这样就完全杜绝了短路的现象
第二 避免了引脚模式的频繁更换
在这里插入图片描述
起始条件:
SCL高电平期间,SDA从高电平切换到低电平
在这里插入图片描述
终止条件:
SCL高电平期间,SDA从低电平切换到高电平
在这里插入图片描述•发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

在这里插入图片描述
因为就像是上面所说的 主机牢牢把控着SCL 在SCL低电平的时候 ( 主机控制的) 然后主机在将数据依次放到SDA线上 再释放SCL 像弹簧一样回弹到高电平 从机会自动读取SDA的数据 所以这里就要求我们SCL为高 SDA不允许有数据变化
在这种情况下,SCL与SDA全部由主机控制

接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
在这里插入图片描述
在我们这里是这个意思
首先我们需要明白一个道理 我们总是控制着主机的 考虑也是基本上只说主机
我们先把SCL拉至低电平(完全由主机控制) 然后从机会把数据依次放到SDA线上 再释放SCL 释放的意思就是我不用手拉着了 嗖的一声回弹上去了 变成了高电位 这就是所说的释放的概念 主机接着会在SCL高电平期间进行数据读取 在SCL为高 就是主机读取的阶段并不允许 数据有所变化
另外注意点是 主机在开始接收之前,需要提前释放掉SDA 因为对我们来说 因为是一根线线与的关系 你放手了 让别人拉这根杆子 他才会传递不同的信息给你

发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
•接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
在这里插入图片描述
怎么解释呢
我们首先需要明确的观点是
当SCL拉低时候 是在传输数据 (不管是主机把数据传送到SDA上,还是从机把数据放到SDA上 ,这里我们可以在具体实践中通过代码控制)
在SCL为高的时候 ,总是在读取数据(要么是主机读取SDA 要么是从机读取SDA)

我们现在以接收应答为例
就像是我们发送一个东西 之后马上判断是否有人收到了
就是这样我们先把SCL拉低(主机 开始操作发送数据) 接下来需要释放掉SDA 因为只有释放掉SDA 从机才能操作SDA 接下来SCL为高进入读取阶段 那么我们如果SDA响应了被拉下那么是不是 相当于我们读取到的是数据0 应答成功 如果是没有接收到就会处于拉高模式就是1 表示非应答

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

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

相关文章

MySQL— 基础语法大全及操作演示!!!(下)

MySQL—— 基础语法大全及操作演示(下)—— 持续更新 三、函数3.1 字符串函数3.2 数值函数3.3 日期函数3.4 流程函数 四、约束4.1 概述4.2 约束演示4.3 外键约束4.3.1 介绍4.3.2 语法4.3.3 删除/更新行为 五、多表查询5.1 多表关系5.1.1 一对多5.1.2 多对…

hdu8-Congruences(中国剩余定理)

Problem - 7363 (hdu.edu.cn) 参考:2023杭电暑假多校8 题解 3 5 7 10 | JorbanS_JorbanS的博客-CSDN博客 题解:(中国剩余定理 增量法) 注意验证和特判,此题中 pi 两两互质,可用CRT和增量法,当…

ipkvm之RK3568高温测试

1. 简介 KVM高温测试描述: 将KVM主板放入50℃的温箱中放置4个小时。四个小时后记录VGA小板的温度以及SOC温度和外壳温度。 测试仪器: 两块KVM主板,温度记录仪,两个串口,笔记本,电源 KVM主板上电和串口 …

【回溯】总结

1、 组合和子集问题 组合问题需要满足一定要求才算作一个答案,比如数量要求(k个数),累加和要求(target)。 子集问题是只要构成一个新的子集就算作一个答案。 进阶:去重逻辑。 一般都是要对同…

星际争霸之小霸王之小蜜蜂(二)--类的使用

目录 前言 一、将设置内容写在一个类里 二、设置小蜜蜂的造型 三、设置猫蜜蜂的参数 四、绘制猫蜜蜂到窗口 总结 前言 昨天我们设置好了窗口,下面我们需要向窗口中添加元素了。 一、将设置内容写在一个类里 我个人理解书上的意思是要创建一个类,将所有需…

厘米级定位技术主要有以下几种

厘米级定位技术主要有以下几种: 1.UWB (Ultra-Wideband) 定位技术:UWB技术使用一组频带非常宽的无线电脉冲来实现高精度定位,可以实现亚米级的定位精度,甚至在理想条件下可以达到厘米级的定位精度。 2.RTK (Real-Time Kinematic…

python3 0基础学习----基本知识

0基础学习笔记之基础知识 📚 基础内容1. 条件语句 if - elif - else2. 错误铺捉try - except(一种保险策略)3. 四种开发模式4. 函数:def用来定义函数的5. 最大值最小值函数,max ,min6. is 严格的相等,is no…

Vault主题 - UiCore多用途Elementor WordPress主题

你可以使用Vault主题 – UiCore多用途Elementor WordPress主题构建什么? Vault主题拥有专业、像素级完美且干净的现代布局,几乎适合您需要的任何网站: 小型企业网站企业网站着陆页面权威博客销售和营销页面网上商店 自由职业者的最佳选择 …

VM——流程自动连续运行

1、需求:使用一个流程连续运行,充当独立线程,监控外部IO输入。 2、方法:某个流程连续运行,需要在界面设置控制按钮,这不符合要求。需要程序启动后自动连续运行。咨询海康技术人员、网上查资料后&#xff0…

JS逆向-某招聘平台token

前言 本文是该专栏的第56篇,后面会持续分享python爬虫干货知识,记得关注。 通常情况下,JS调试相对方便,只需要chrome或者一些抓包工具,扩展插件,就可以顺利完成逆向分析。目前加密参数的常用逆向方式大致可分为以下几种,一种是根据源码的生成逻辑还原加密代码,一种是补…

双向-->带头-->循环链表

目录 一、双向带头循环链表概述 1.什么是双向带头循环链表 2.双向带头循环链表的优势 3.双向带头循环链表简图 二、双向带头循环链表的增删查改图解及代码实现 1.双向带头循环链表的头插 2.双向带头循环链表的尾插 3.双向带头循环链表的头删 4.双向带头循环链表的尾删…

使用Pillow对图像进行变换

使用Pillow对图像进行变换 from PIL import Image, ImageEnhance# 原图 image Image.open("1.jpg") image.show()# 镜像 mirrored_image image.transpose(Image.FLIP_LEFT_RIGHT) mirrored_image.show() mirrored_image.save(mirror_image.jpg)# 旋转 rotated_imag…

day12 13-牛客67道剑指offer-JZ83、70、63、47、48、46、21、81

1. JZ83 剪绳子&#xff08;进阶版&#xff09; class Solution { public:int jumpFloorII(int number) {if(number < 1) return number;int temp 1;int res 0;/*2级台阶 23级台阶 44级台阶 65级台阶 16*/for(int i2; i<number; i){res 2 * temp;temp res;}return re…

ts与vue

ts与Vue 如果你已经学习了typeScript,但不知道如何在vue项目中使用&#xff0c;那么这篇文章将会很适合你。参考千峰教育 kerwin视频 1.会自动推导&#xff0c;隐士推导。提示 类型系统。 独立模块。 isolatedModules选项&#xff1a;是否配置为独立的模块。 减少报错 let …

innodb索引与算法

B树主键插入 B树在innodb的插入有三种模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B树就是page_N_direction,如果是自增主键的话&#xff0c;就是上面这样的插入法 FIC优化 (DDL) 选择性统计 覆盖索引 MMR ICP优化 自适应hash 全文索引

乖宝宠物上市,能否打破外资承包中国宠物口粮的现实

近日&#xff0c;乖宝宠物上市了&#xff0c;这是中国宠物行业成功挂牌的第三家公司。同时&#xff0c;昨日&#xff0c;宠物行业最大的盛事“亚洲宠物展”时隔3年&#xff0c;于昨日在上海成功回归。 这两件事情的叠加可谓是双喜临门&#xff0c;行业能够走到今天实属不易&…

09- DMA(DirectMemoryAccess直接存储器访问)

DMA 09 、DMA(DirectMemoryAccess直接存储器访问)DMA配置流程 09 、DMA(DirectMemoryAccess直接存储器访问) DMA配置流程 dma.c文件 main.c文件 详见《stm32中文参考手册》表57。

c++--SLT六大组件之间的关系

1.SLT六大组件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函数&#xff0c;适配器&#xff0c;空间配置器 2.六大组件之间的关系 容器&#xff1a;容器是STL最基础的组件&#xff0c;没有容器&#xff0c;就没有数据&#xff0c;容器的作用就是用来存…

java版本spring cloud 企业工程系统管理 工程项目管理系统源码em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

打印出二进制的奇数位和偶数位

void print(int a) {int i0;printf("奇数位&#xff1a;");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶数位&#xff1a;");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …