当前位置: 首页 > news >正文

I2C学习总结

i2c概述

I2C(Inter-Intergreted Circuit) 是一种串行通信协议,用于集成电路之间完成数据传输,i2c用广泛用以各种领域,包括电子设备、嵌入式系统、工业自动化等;

i2c仅仅只是一个数据传输的协议,具体传输的数据用途由上层决定;

针对i2c协议的一个小例子

该例子灵感出自参考文档;

针对上图中:我们类比单片机A为课堂中的老师,其它设备为学生;课堂上会有一些互动,如下流程说明,后面会针对例子和i2c中的通信做一些联系,这里有个大概流程即可;

  • 老师呼叫甲同学背诵课文
    1. 老师怒拍讲台,大喊安静;
    2. 点名甲同学,你给我背诵下《蜀道难》;
    3. 甲同学接收到请求,并回复收到;
    4. 此后开始背诵;“噫吁嚱,危乎高哉!蜀道之难,难于上青天!.....”
    5. 老师在甲同学背诵过程中不断的点头回应。
    6. 在甲同学背诵完成后,老师发话:“真不错,坐下吧”;(要不然甲同学会很尴尬)
  • 老师公布分数流程
    1. 老师又怒拍讲台,大喊安静,
    2. 老师点名:‘甲同学’;
    3. 甲同学回复:‘到’;
    4. 老师:‘我要告诉你分数了’;
    5. 甲同学回应:‘好的’;
    6. 老师:‘93分’;
    7. 甲同学:‘好的,我知道了’;
    8. 老师随即咳嗽一声,准备叫下一个同学;

协议特点

这里先抛出协议的特点,后续知识点说明部分会有针对性的说明;

  1. 仅需两根线即可完成通信(SDA、SCL);
  2. 均连接到总线上,无特定的主从之分,每个设备可访问总线上的其它设备;
  3. 串行通信,存在时钟线SCL用作接收指示;
  4. 总线上的设备既可以接收数据,也可以发送数据。但二者为互斥关系,所以为半双工通信方式;
  5. 存在应答机制,可实现接受侧的反压;

i2c重要知识点说明

SDA、SCL通信知识

  1. 默认情况下SDA、SCL的值均为1;
  2. 任何一个设备想要控制SDA、SCL输出0即可,输出1可通过外部的上拉完成输出1;
  3. 多个设备间的SDA、SCL为线与功能。当多个设备输出冲突时,将多个设备期望输出值进行与操作,即为最终SDA、SCL上的值;

i2c写操作

  1. 刚开始主机要发出一个start信号,然后发出一个设备地址(用来确定是往哪一个从机写数据),方向(读/写,0表示写,1表示读)。

  2. slave回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主机就会发送一个P停止信号。

白色背景:主→从

灰色背景:从→主

注意点:

  1. 写操作除了要指定设备地址,还需要指定对设备发生访问的地址,第一个数据为访问地址;;

带入前面的例子理解写过程

  • 老师公布分数流程

    1. 老师又怒拍讲台,大喊安静,(月考后,开始点名说分数);—发送start;
    2. 老师点名:‘甲同学’;—发送设备地址,指定甲同学;
    3. 甲同学回复:‘到’;—回应,代表从机存在并准备好了;
    4. 老师:‘我要告诉你分数了’;—指定要告知的是分数,也就是会知道写地址,指示从机该内容含义;
    5. 甲同学回应:‘好的’;—从机回应
    6. 老师:‘93分’; —发送数据;
    7. 甲同学:‘好的,我知道了’;—回应
    8. 老师随即咳嗽一声,准备叫下一个同学;— 发送P结束条件;

    以上例子i2c传输对应的其实就是教室里的声音,由于是单线的,所以也就是教室里只能存在一种声音,所以老师与同学之间的交流是串行执行的。当然可能我们人类由于存在某些潜规则,使得通信变的更简单了,但是电子设备中没有这种潜意识,所以需要再帧内指定地址、读写指示、从设备响应等动作完成一次通信;

i2c读操作

  1. 刚开始主机要发出一个start信号,然后发出一个设备地址(用来确定是从哪一个芯片读取数据),方向(读/写,0表示写,1表示读)。
  2. 回应(用来确定这个设备是否存在),然后就可以传输数据,传输数据之后,要有一个回应信号(确定数据是否接受完成),然后在传输下一个数据。
  3. 每传输一个数据,接受方都会有一个回应信号,数据发送完之后,主机就会发送一个P停止结束信号。

白色背景:主→从

灰色背景:从→主

说明:slave侧在完成一次传输后,需要master指示是否结束,或者进行下一次传输。slave默认会在当前地址进行递增动作进行下一次传输;读操作默认在上一写操作结束地址发生;

i2c读操作例子解读

  • 老师呼叫甲同学背诵课文
    1. 老师怒拍讲台,大喊安静;—start
    2. 点名甲同学;你给我背诵下《蜀道难》;—指定为读操作,并指定读的内容为《蜀道难》
    3. 甲同学接收到请求,并回复收到;—回应
    4. 此后开始背诵;“噫吁嚱,危乎高哉!蜀道之难,难于上青天!.....”—读数据
    5. 老师在甲同学背诵过程中不断的点头回应。—主机回应
    6. 在甲同学背诵完成后,老师发话:“真不错,坐下吧”;(要不然甲同学会很尴尬)—slave回应NACK,主机结束一次传输;

同写操作,人主观存在潜规则,通过例子理解I2c时注意需明确指定相关内容,电子设备才可以正确动作;

Start 和Pause条件

  1. 当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通信的起始。
  2. 当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通信的停止。

发送点、采样点

i2c总体的数据线与采样时钟线的配合为:

  1. 当SCL为低时完成数据的改变,此时不会发送采样动作;
  2. 当SCL为高时完成数据的采样,此时完成数据采样动作;

I2c其它特性

  1. 响应可分为ACK和NACK,用以指示是否继续传输还是结束传输;
    • ACK主要用以指示传输完成;
    • NACK主要用以传输的一些特殊情况,如下:
      • I2C总线上没有主机所指定地址的从机设备
      • 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯
      • 主机发送的一些控制命令,从机不支持
      • 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了
  2. i2c slave会记住上一次操作的地址。下一次发送读动作即从该地址开始;所以要进行读之前需有一个无写数据的写动作;
  3. SCL、SDA的默认值为高;
  4. SDA的控制用主机和从机交替控制,同一时间仅一个设备控制。读写操作中的主机发送完相关信息后,需释放SDA的控制,由Slave控制是否应答;

参考文档

以上仅解释了大体部分,但i2c的其它特点还可以从以下文章学习到:

一篇短文让你彻底理解什么是I2C通信-CSDN博客

一文看懂I2C协议 - 知乎 (zhihu.com)

4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili

相关文章:

I2C学习总结

i2c概述 I2C(Inter-Intergreted Circuit) 是一种串行通信协议,用于集成电路之间完成数据传输,i2c用广泛用以各种领域,包括电子设备、嵌入式系统、工业自动化等; i2c仅仅只是一个数据传输的协议&#xff0c…...

libcudart.so libcuda.so之间的关系

libcudart.so 和 libcuda.so 都是 NVIDIA CUDA 库的一部分,它们在 CUDA 平台上扮演不同的角色,但它们之间也存在一些关联。 libcudart.so: libcudart.so 是 CUDA Runtime 库的一部分,它包含了一系列的运行时函数和工具,用于管理和…...

STM32基本定时功能

1、定时器就是计数器。 2、怎么计数? 3、我们需要有一恒定频率的方波信号,再加上一个寄存器。 4、比如每来一个上升沿信号,寄存器值加1,就可以完成计数。 5、假设方波频率是100Hz,也就是1秒100个脉冲。…...

Linux学习:权限

目录 1. shell命令的工作原理与存在意义1.1 shell命令解释器存在的意义1.2 shell解释器的工作原理 2. Linux操作系统:用户2.1 什么是用户2.2 用户的切换操作2.3 用户权限划分的意义 3. Linux中权限的种类和意义3.1 什么是权限3.2 sudo指令与短暂提权 4. 文件类型与文…...

汉诺塔问题代码写法的详细解析

汉诺塔游戏规则: 规则: 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着…...

Python爬虫入门

什么是爬虫 爬虫就是程序,一个能获取互联网上的资源(文字、图片、音视频)数据的程序。 不用爬⾍, 打开浏览器, 输⼊百度的⽹址,就能在浏览器上看到百度的内容了。那换成爬⾍呢? 道理是⼀样的。只不过,是⽤…...

【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序 参考电子书:排序算法精讲 算法原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元…...

小资金适合做伦敦金的投资吗?

在回答这个问题之前,我们首先需要了解伦敦金是什么。伦敦金,也称为伦敦金市场交易的黄金,是一种国际性的金融交易产品,其价格受全球政治、经济、货币政策、供求关系等多种因素影响,波动性较大。因此,投资伦…...

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2…...

富格林:有效做单安全盈利方法

富格林悉知,在伦敦金的投资中,是否安全盈利很大一部分因素取决于是否有效做单,投资者在进入市场之后,需要学习了解伦敦金相关规则,学习一定的做单的技巧,这样有利于我们后续做单顺畅盈利。以下总结几点安全…...

二分查找的理解及应用场景。

一、是什么 在计算机科学中,二分查找算法,也称折半搜索算法,是一种在有序数组中查找某一特定元素的搜索算法 想要应用二分查找法,则这一堆数应有如下特性: 存储在数组中有序排序 搜索过程从数组的中间元素开始&…...

共创时代,品牌如何做好UGC营销?

在当下的互联网时代,众多品牌已经逐渐意识到“产品为重”的影响方式已经很难提升转化率,内容才是吸引用户的必胜法宝,然而当代人被海量信息裹挟,人们的注意力成为稀缺资源,在这个环境下,UGC成为品牌的营销方…...

华为三层交换机:ACL的基本实验

实验要求&#xff1a; PC1不允许访问PC3&#xff0c;PC3可以访问PC1 分析问题&#xff1a; PC1不允许访问PC3&#xff0c;问题中含有“目标地址”则我们需要设置目标地址&#xff0c;这样基本ACL是不行的&#xff0c;必须使用高级ACL [sw1]acl ? INTEGER<2000-2999>…...

基于springboot+vue的旅游管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

4. git 添加版本标签

要给某一分支的某一提交版本添加标签&#xff08;tag&#xff09;&#xff0c;你首先需要确定该提交版本在分支上的具体哈希值&#xff08;commit hash&#xff09;。 一旦你有了这个哈希值&#xff0c;你就可以像之前描述的那样使用 git tag 命令来创建标签。 以下是如何操作的…...

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…...

2419. prufer序列(prufer编码,模板题)

活动 - AcWing 本题需要你实现prufer序列与无根树之间的相互转化。 假设本题涉及的无根树共有 n 个节点&#xff0c;编号 1∼n。 为了更加简单明了的描述无根树的结构&#xff0c;我们不妨在输入和输出时将该无根树描述为一个以 n 号节点为根的有根树。 这样就可以设这棵无…...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…...

开源大数据集群部署(十五)Zookeeper集群部署

作者&#xff1a;櫰木 1、集群规划 主机版本角色系统用户hd1.dtstack.com3.7.1followerzookeeperhd2.dtstack.com3.7.1leaderzookeeperhd3.dtstack.com3.7.1followerzookeeper 2、zookeeper kerberos主体创建 在生产中zk服务端和客户端票据可以设置成不通名称或相同名称&am…...

服务器镜像是什么

镜像即镜像服务器。镜像服务器与主服务器的服务内容都是一样的&#xff0c;只是放在一个不同的地方&#xff0c;分担主服务器的负载量。 可以使用&#xff0c;但不是原版的。在网上内容完全相同而且同步更新的两个或多个服务器&#xff0c;除主服务器外&#xff0c;其余的都被称…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...