协议速攻 IIC协议详解

news2024/9/23 5:15:46

介绍

IIC是一种 同步 半双工 串行 总线

同步
指的是同一根时钟线(SCL)

半双工
可以进行双向通信,但是收发不能同时进行,发的时候禁止接收,接的时候禁止发送

串行
数据是一位一位发送的

总线
两根线(SCL SDA)可以接多个IIC类型器件,如AT24CXX,四针OLED,SHT30,AHT10

如何识别每个器件?
通过从机地址与每个器件通信 IIC玩的就是地址

不过实际开发中 我使用的是模拟IIC 两个IO口对应一个IIC器件

协议详解一 看懂时序图

献上一张让人懵逼的时序图 时序图来自AT24C02手册 需要手册的可以在评论区获取

SDAIN表示单片机给AT24C02发送数据
在这里插入图片描述
现在我们先去掉符号 是不是舒服了一些?
在这里插入图片描述
现在我们把他拆分成三部分

在这里插入图片描述

详解开始部分

SCL保持高电平
SDA从高电平低电平(下降沿)
在这里插入图片描述
详解数据发送部分

SCL为高电平的时候 SDA数据不允许变化 (时钟线的上升沿 发送了一位有效数据)
SCL为低电平的时候 SDA数据允许变化

在这里插入图片描述
详解结束部分

SCL保持高电平
SDA从低电平高电平(下降沿)

在这里插入图片描述

协议详解二 对照代码看时序图

对照开始时序图看代码
在这里插入图片描述
在这里插入图片描述

通过以上代码 可以看出
1 SDA SCL一开始都是高
2 SDA从高变成了低 (下降沿)
那么他是符合时序图的
但是可以看到 SDA SCL都为高电平期间 经过4us的延时 SDA才变为低电平 带着这个问题引出没有去掉符号的开始时序图

在这里插入图片描述
SCL和SDA想要改变电平 并不是一瞬间就能改变的 需要延时
tCHCL表示 SCL的高电平保持时间至少4us

在这里插入图片描述

tDLCL表示 SDA高电平保持时间(开始部分)至少4us

在这里插入图片描述

tCHDX表示 SDA拉低后 经过至少4us数据才能开始改变
在这里插入图片描述

看完上面三个参数 再看启动时序的代码 就能对应上了

对照结束时序图看代码
在这里插入图片描述

在这里插入图片描述
TCHDH SCL和SDA同时拉低后 经过至少4.7us SDA才能拉高 考虑SCL的低电平保持 这里应该取5us (停止部分)
在这里插入图片描述

TDHDL SDA的高电平至少保持(数据发送部分) 4.7us 才表示结束信号

在这里插入图片描述

代码里面是4us 这里考虑芯片厂家手册的延时差异 那么他是符合时序图的

对照数据发送代码看时序图

在这里插入图片描述
在这里插入图片描述

SCL拉低 经过TCLDX段时间 SDA可以进行数据改变 由于这个时间段手册值为0 所以SCL拉低 SDA可以马上改变
在这里插入图片描述
SDA数据保持稳定后 经过至少250ns 时钟线才能置高
在这里插入图片描述
且SCL的低电平保持时间是TCLCH 和TDXCX存在包含关系 所以取TCLCH段时间即可 也就是5us
在这里插入图片描述
代码取自正点原子的IIC例程 时序图来自ST官方手册 可以看到除了延时时间 其它是符合时序的 这里考虑各家芯片的延时存在差异

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

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

相关文章

《统计学习方法》——逻辑斯蒂回归和最大熵模型

参考资料: 《统计学习方法》李航通俗理解信息熵 - 知乎 (zhihu.com)拉格朗日函数为什么要先最大化? - 知乎 (zhihu.com) 1 逻辑斯蒂回归 1.1 逻辑斯蒂回归 输入 x ( x ( 1 ) , x ( 2 ) , ⋯ , x ( n ) , 1 ) T x(x^{(1)},x^{(2)},\cdots,x^{(n)},1…

【动态规划算法练习】day11

文章目录 一、1312. 让字符串成为回文串的最少插入次数1.题目简介2.解题思路3.代码4.运行结果 二、1143. 最长公共子序列1.题目简介2.解题思路3.代码4.运行结果 三、1035. 不相交的线1.题目简介2.解题思路3.代码4.运行结果 总结 一、1312. 让字符串成为回文串的最少插入次数 1…

DevOps系列文章之 设计一个简单的DevOps系统

前置条件 gitlab gitlab-runner k8s docker 1. gitlab创建群组 创建群组的好处是,对项目进行分组,群组内的资源可以共享,这里创建了一个tibos的群组 2. 在群组创建一个项目 这里创建一个空白项目,项目名为Gourd.Test,将项目克隆到本地,然后在该目录下创建一个.net core3.1的w…

Spring Cloud Alibaba Seata源码分析

目录 一、Seata源码分析 1、Seata源码入口 1.1、2.0.0.RELEASE 1.2、2.2.6.RELEASE 2、Seata源码分析-2PC核心源码 3、Seata源码分析-数据源代理 3.1、数据源代理DataSourceProxy 4、Seata源码分析- Seata服务端(TC)源码 一、Seata源码分析 Sea…

P1dB、IIP3、OIP3、IMD定义及关系

P1dB 1分贝压缩输出功率。放大器有一个线性动态范围,在这个范围内,放大器的输出功率随输入功率线性增加。随着输入功率的继续增加,放大器进入非线性区,其输出功率不再随输入功率的增加而线性增加,也就是说,…

【新星计划·2023】Linux文件权限讲解

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 这篇文章,将带你详细的了解一下 Linux 系统里面有哪些重要的文件?。 不过,每个文件都有相当多的属性…

ROS学习篇之传感器(二)IMU(超核IMU HI266)

文章目录 一.确定IMU型号二.安装驱动1.找到驱动的包2.解压该压缩包3.安装步骤说明4.具体安装5.检查IMU的usb接口是否插到电脑 三.在RVIZ中的显示1.复制示例下的src里的文件复制到自己的src下2.自己的文件目录3.尝试编译一下4.示例的文件说明5.运行Demo6.配置Rviz 四.查看IMU的实…

【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)

全方面带你透彻探索服务优化技术方案(服务器系统性能调优) 调优意义计划分析 流程相关分析优化分析Nginx请求服务日志将请求热度最高的接口进行优化异步调用优化方式注意要点 分析调用链路追踪体系建立切面操作分析性能和数据统计存储相关的调用以及耗时…

Pycharm中画图警告:MatplotlibDeprecationWarning

前言: \textcolor{Green}{前言:} 前言: 💞这是由于在python中画图出现的问题,一般不会有错。因为它只是个警告,但是我们也可以知道解决这个问题的方法,防止后面出问题的时候知道怎么解决。 前因…

窗口函数 OVER(PARTITION BY ...)

开窗函数的语法结构:分析函数() over(partition by 分组列名 order by 排序列名 rows between 开始位置 and 结束位置) over()函数中包括三个函数:分区partition by 列名、排序order by 列名、指定窗口范围rows between 开始位置 and 结束位置 rows bet…

Win10共享文件|文件夹 电脑之间快速传输文件的方法

一、设置共享的文件或文件夹 1、A电脑上的文件要共享 进行如下设置: 右击要共享的就文件或文件夹->属性->"共享 "选项卡->"共享"按扭->选择共享的用户 下拉选择"Everyone"->单击"添加"按扭->根据需要设…

PVE8.0内核构建支持IOMMU拆分

PVE直通SATA控制器给群晖的时候,发现网卡、USB、SATA控制器都在一个IOMMU上。 直通完了,PVE直接失联了。这肯定不行。百度了一下说是要编译内核把IOMMU拆开。下面记录一下编译内核的过程。 准备编译环境 我直接用pve物理机编译,怕破坏环境的…

【Spring/Java项目】如何利用swagger-parser解析yaml中的api请求类型、注释、接口名等等(含示例代码)

手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/129167371 目录 前言 官方文档 项目配置 示例代码 测试文件 解析代码 运行结果 前言 用到这个工具是因为项目需要&#xff0…

构造函数与成员变量初始化

1 为何需要定义构造函数? 构造函数的主要目的在于对成员变量进行初始化,确保类对象具有良好的初始状态。 2 构造函数对成员变量的初始化 接下来,我们将完善前文中提到的几个构造函数,使其能够有效地完成成员变量的初始化工作。 …

【趣说冒泡排序】

前言 在计算机科学中,排序算法是一种常见且重要的算法。排序算法的目标是将一组无序的数据按照一定的规则进行重新排列,以便更方便地进行搜索、查找或其他操作。 冒泡排序(Bubble Sort)是最简单的排序算法之一,它的原…

软件测试技能,JMeter压力测试教程,统一随机定时器/高斯随机定时器(十九)

目录 前言 一、统一随机定时器 1、统一随机定时器(Uniform Random Timer) 2、设置延迟时间 二、高斯随机定时器 1、高斯随机定时器Gaussian Random Timer 2、设置延迟时间 前言 如果想加个随机等待时间可以用到 jmeter 里面的统一随机定时器&…

WPF 样式设计总结

文章目录 行内样式页内样式样式继承控件样式只能继承一个 局部样式窗口控件和用户控件直接的区别使用代码用户控件引用 全局样式 行内样式 我们新建一个简单的样式 <Grid><TextBox Text"我是样式" FontSize"100" /></Grid>这种属性直接…

【QT】常用组件及其用法总结

前面我们看了如何用QT实现纯代码和纯Designer工具的图形化的页面设计&#xff0c;下面我们来看看如何用QT结合两者实现混合界面设计&#xff0c;主要是学习使用一些常用的组件。 目录 信号和槽 菜单栏、状态栏和工具栏 QLabel setGeometry Button pushbutton CheckBox…

SSMP整合案例(10) vue端调整项目环境 发送请求 基本界面编写

好 之前我们已经将后端服务整个写好了 然后 我们就继续回来写我们前端的项目 之前文章SSMP整合案例(1) 构建 Spring Boot Vue MySql项目环境中我们顺手搭建了前端的项目环境 我们打开它 在终端输入 npm i axios0.21.0引入 axios 它是一个专门用来发请求的第三方插件 一定要注…

Nginx(4)nginx的反向代理

反向代理 正向代理反向代理的常用指令反向代理实战 Nginx的安全控制使用SSL对流量进行加密nginx添加SSL的支持Nginx的SSL相关指令生成证书 反向代理系统调优 正向代理代理的对象是客户端&#xff0c;反向代理代理的是服务端&#xff0c;这是两者之间最大的区别。Nginx即可以实现…