当前位置: 首页 > 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;其余的都被称…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...