常说的I2C协议是干啥的(电子硬件)

news2024/11/30 10:49:16

I2C(Inter-Integrated circuit)协议是电子传输信号中常用的一种协议。

它是一种两线式串行双向总线,用于连接微控制器和外部设备,也因为它所需的引脚数只需要两条(CLK和DATA),硬件实现简单,可扩展性强,所以被广泛应用于系统内多个集成电路IC间的通信。

图片

在硬件连接上,I2C协议的实现有分主设备和从设备,并且在主从上比SPI协议更好的一点是支持多个主设备或多个从设备(SPI仅支持单主多从)。

图片

在总线中,SCL和SDA都会接上拉电阻,通常情况下,3.3V系统上拉电阻取3.3KΩ,5V系统上拉电阻取4.7KΩ。所以当I2C设备空闲时,会输出高阻态,当所有设备都空闲,上拉电阻会把总线拉成高电平。

它的多主机多从机的实现原理主要有两点:

a, 每个连接到总线上的从设备都有一个独立的地址,主设备通过这个独立的地址访问到从设备。

b, 当有多个主设备同时使用同一条总线时,为了 防止数据产生冲突,就会利用仲裁的方式决定让哪个主设备先占用总线(同一时间段只能有一个主设备占用I2C总线)。

I2C工作中的整个流程:

1,Master(主设备)发送起始信号

2,Master发送7bit address地址加1bit Write信号

3,找到符合地址的Slaver(从设备)响应ACK

4,然后就可以正式发送数据了,Master发送8bit数据(数据帧大小为8位)

5,Slaver响应ACK

6,最后Master发送停止信号(若Master仅发送一个字节的数据)

图片

起始信号:SCL处于高电平,SDA从高电平向低电平转换。

停止信号:SCL处于高电平,SDA由低电平向高电平转换(与起始信号相反)。

帧地址:每个从属设备有唯一的7位或10位地址,用于主从设备之间的地址识别。一般地址的位长是7或10位,7位用的更广泛。

读/写位:1bit,一般会伴随着地址帧发送。如果主机是向从机发送数据(写)则为低电平,请求数据(读)则为高电平。

ACK/NACK:响应数据,确保数据有被正常发送且接受到。I2C的数据和地址传输都带有响应(先响应地址,后响应数据)。响应包括“应答(ACK)”和“非应答(NACK)”两种信号。ACK时DATA为低电平,NACK时DATA为高电平。

数据有效:数据的传输有分有效和无效,只有在SCL为高电平时,SDA的数据才有效,此时SDA高电平表示数据“1”,低电平表示数据“0”.当SCL为低电平时,数据无效,此时通常需要对SDA进行电平切换。

图片

I2C具有三种传输模式,对应的速率也会不同。

标志模式:100kbit/s

快速模式:400kbit/s

高速模式:3.4Mbit/s

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

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

相关文章

机器人入门(一)

机器人入门(一) 一、ROS是什么,能用来干什么?二、哪些机器人用到了ROS?三、ROS和操作系统是绑定的吗?四、ROS 1 和ROS 2的关系是什么?4.1架构中间件改变API改变数据格式改变 4.2特性4.3工具/生态…

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 🔥 优质竞赛项目系列,今天要分…

209. 长度最小的子数组(滑动窗口)

一、题目 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int left 0, right 0;int sum nums[right];int MinLength INT_MAX;while (left <nums.siz…

【React】React组件生命周期以及触发顺序(部分与vue做比较)

最近在学习React&#xff0c;发现其中的生命周期跟Vue有一些共同点&#xff0c;但也有比较明显的区别&#xff0c;并且执行顺序也值得讨论一下&#xff0c;于是总结了一些资料在这里&#xff0c;作为学习记录。 v17.0.1后生命周期图片 初始化阶段 由ReactDOM.render()触发 —…

openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置

文章目录 openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置86.1 总体原则86.2 重做日志&#xff08;MOT&#xff09;86.3 检查点&#xff08;MOT&#xff09;86.4 恢复&#xff08;MOT&#xff09;86.5 统计&#xff08;MOT&#xff09;86…

【C++】unordered_set、unordered_map的介绍及使用

unordered_set、unordered_map的介绍及使用 一、unordered系列关联式容器二、unordered_map and unordered_multimap1、unordered_map的介绍2、unordered_map的使用&#xff08;1&#xff09;定义&#xff08;2&#xff09;接口使用 3、unordered_multimap 二、unordered_set a…

集合在多线程下安全问题

如果在多线程下&#xff0c;同时操作同一个数据源&#xff0c;就会出现数据安全问题&#xff1a; A线程取出值为10&#xff0c;准备加5. 同时B线程也取出来10&#xff0c;减了5 C取出的时候有可能时15&#xff0c;也有可能时5。产生了数据安全问题。 方法有很多例如&#xff1a…

消息队列-RabbitMQ(二)

接上文《消息队列-RabbitMQ&#xff08;一&#xff09;》 Configuration public class RabbitMqConfig {// 消息的消费方json数据的反序列化Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){Simple…

redis解压+windows安装+无法启动:1067

Redis下载安装图文教程&#xff08;Windows版_超详细&#xff09; 标题若遇到安装后无法启动&#xff1a;1067 排查方法如下&#xff1a; 1.查询是否有服务占用端口 查看6379的端口也没有被占用&#xff08;netstat -ano | findstr :6379&#xff09; 若有&#xff0c;kill掉…

盛最多水的容器 接雨水【基础算法精讲 02】

盛雨水最多的容器 链接 : 11 盛最多水的容器 思路 : 双指针 &#xff1a; 1.对于两条确定的边界&#xff0c;l和r,取中间的线m与r组成容器&#xff0c;如果m的高度>l的高度&#xff0c;那么整个容器的长度会减小&#xff0c;如果低于l的高度&#xff0c;那么不仅高度可…

54、数组--模拟

LCR 146. 螺旋遍历二维数组 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完所有…

SpringBoot整合数据库连接

JDBC 1、数据库驱动 JDBC&#xff08;Java DataBase Connectivity&#xff09;&#xff0c;即Java数据库连接。简而言之&#xff0c;就是通过Java语言来操作数据库。 JDBC是sun公司提供一套用于数据库操作的接口. java程序员只需要面向这套接口编程即可。不同的数据库厂商&…

C++八股

1、简述一下C中的多态 在面向对象中&#xff0c;多态是指通过基类的指针或引用&#xff0c;在运行时动态调用实际绑定对象函数的行为&#xff0c;与之相对应的编译时绑定函数称为静态绑定。 静态多态 静态多态是编译器在编译期间完成的&#xff0c;编译器会根据实参类型来选择…

国庆10.1

用select实现服务器并发 ser #include <myhead.h> #define ERR_MSG(msg) do{\fprintf(stderr, "__%d__", __LINE__);\perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.1.205" //本机…

ARMv7-A 那些事 - 5.CP15协处理器

By: Ailson Jack Date: 2023.10.01 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/157.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

14:STM32-----看门狗

目录 一:看门狗 1:WDG 2:独立看门狗 (IWDG) A:IWDG框图 B:IWDG_KR键寄存器 C:IWDG超时时间 3:窗口看门狗 (WWDG) A:WWDG框图 B:WWDG工作特性 C:WWDG超时时间 4:独立看门狗和窗口看门狗的区别 5:数据手册 二:案例 A:独立看门狗 1:连接图 2:步骤 3:函数介绍 3:代…

网络爬虫——urllib(2)

前言&#x1f36d; ❤️❤️❤️网络爬虫专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Python网络爬虫_热爱编程的林兮的博客-CSDN博客 前篇讲解了urllib的基本使用、一个类型六个方法与下载相关内容&#xff0…

《深入浅出OCR》第二章:OCR技术发展与分类

✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨‍💻面向对象: 本篇前言知识主要介绍深度学习知识,全面总结知知识…

Python3数据科学包系列(一):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 认识下数据科学中数据处理基础包: (1)NumPy 俗话说: 要学会跑需先…