I2C的学习

I2C通信的基本概念

  1. 双线制:I2C通信采用两条线进行数据传输:

    • SDA(Serial Data Line):数据线,用于传输数据。
    • SCL(Serial Clock Line):时钟线,用于同步数据传输。
  2. 主从结构:I2C通信采用主从(Master-Slave)结构,其中:

    • 主设备:发起通信的设备,负责生成时钟信号并控制通信流程。
    • 从设备:被主设备控制的设备,响应主设备的命令。
  3. 地址:每个从设备在总线上都有一个唯一的地址(通常是7位或10位),主设备通过地址选择特定的从设备进行通信。

SCL线控制

  1. 主设备生成时钟信号

    • 在I2C协议中,主设备负责生成时钟信号,并控制SCL线的状态。主设备通过拉高和拉低SCL线来提供时钟信号,从而同步数据传输。
  2. 数据传输与时钟的关系

    • 在数据传输过程中,主设备在每发送一个数据字节后,会生成一定数量的时钟脉冲(通常是8个脉冲对应一个字节的数据)。从设备在每个时钟脉冲的上升沿或下降沿(通常是上升沿)接收数据。
    • 主设备还会在每个字节后等待从设备发送的应答信号(ACK),并生成相应的时钟信号来进行数据的确认。

SDA线的控制

  1. 主设备的角色

    • 在开始通信时,主设备会首先控制SDA线,发送从设备的地址以及读/写位(0表示写,1表示读)。
    • 当主设备需要发送数据时,它会将数据放置在SDA线上,并在SCL线的每个时钟脉冲上升沿时,驱动SDA线的状态。
    • 主设备在发送完一个字节后,会释放SDA线,以便从设备发送应答信号(ACK)。
  2. 从设备的角色

    • 从设备在接收到其地址后,如果被选中,它会控制SDA线来发送ACK信号,表示准备好进行通信。
    • 在读操作时,当主设备发出读命令后,从设备会将数据放在SDA线上,主设备通过时钟脉冲读取这些数据。
    • 从设备在每个字节后也会发送ACK或NACK(不应答)信号,告诉主设备它是否准备好接收更多数据。
  • SDA线的控制是主设备和从设备的协作结果:
  • 主设备在发送数据和地址时控制SDA线。
  • 从设备在应答和读取数据时控制SDA线。

 I2C时序基本单元

起始条件:

SCL高电平期间,SDA从高电平切换到低电平

终止条件:

SCL高电平期间,SDA从低电平切换到高电平

发送一个字节:

SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化(在SCL低电平期间允许改变SDA的电平),依次循环上述过程8次,即可发送一个字节

 接收一个字节:

SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA,交由从机控制)(虚线部分表示从机控制的电平)

发送应答:

主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

接收应答:

主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA) 

I2C通信的基本步骤

发起通信的开始信号

主设备通过发送一个开始信号来初始化通信:

开始信号:主设备将SDA线从高电平拉低到低电平,同时保持SCL线为高电平。这标志着I2C通信的开始。

发送从设备地址

主设备在开始信号之后,发送从设备的地址加上读/写位:

地址是7位,读写位是1位,加起来就是一个字节8位

地址格式:从设备地址通常为7位或10位。主设备将地址放在SDA线上,并在SCL的上升沿时发送数据。

读/写位:0表示写(主设备将数据发送到从设备)。1表示读(从设备将数据发送给主设备)。

接收应答信号

从设备接收到地址后,会发送一个应答信号(ACK):

应答信号:在地址发送完成后,从设备将SDA线拉低,以表明它准备好进行数据交换。主设备在发送完地址后等待一个SCL时钟脉冲以接收ACK信号。

数据传输

数据的传输分为写操作和读操作,具体步骤如下:

写操作:

指定地址写 对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

  • 主设备将要发送的数据放在SDA线上,并产生时钟脉冲。
  • 从设备在每个字节之后发送ACK信号,告知主设备它已成功接收到数据。
读操作:

指定地址写 对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

  • 主设备发送读命令,并准备接收数据。
  • 从设备将数据放在SDA线上,主设备通过SCL时钟脉冲读取数据。
  • 在读取每个字节后,主设备需要发送ACK信号以继续读取下一个字节,或者发送NACK信号以结束读取。

指定读写标志位只能是跟着起始条件的第一个字节  

发送停止信号

通信结束时,主设备发送停止信号,标志着I2C通信的结束:

停止信号:主设备将SDA线从低电平拉高到高电平,同时保持SCL线为高电平。这表示总线空闲,可以进行下一次通信。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试工程师:如何写出好的测试用例?

软件测试用例(Test Case)是软件测试过程中的一种详细文档或描述,用于描述在特定条件下,对软件系统或组件进行测试的步骤、输入数据、预期输出和预期行为。编写高质量的测试用例是确保软件质量的关键步骤之一。以下是一些编写优秀测试用例的建议&#xff…

FLexsim 实体

发生器 属性列表 到达方式 ①到达时间间隔:根据数学分布,自定义到达时间间隔 ②到达时间表 到达时间:发生器产生实体的时间;实体名称:对应时间产生的临时实体的名字 ③到达序列:批量产生多少实体。 暂存区 …

【C++贪心 单调栈】1727. 重新排列后的最大子矩阵|1926

本文涉及知识点 C贪心 C单调栈 LeetCode1727. 重新排列后的最大子矩阵 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列。 请你返回最优方案下将 matrix 重新排列后,全是 1 的子矩阵面积。 示例…

计算机毕业设计 零食批发商仓库管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【CS常见问题】你用的是VS2019,最高支持.NET5.0,但是项目将.NET6.0设为目标无法运行,怎么办?

.NET版本问题 报错示例报错分析最简单的方法步骤 报错示例 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持 .NET 6.0 的 .NET SDK 版本。 ABFview C:\x…

计算机组成原理与系统结构——外部存储器

笔记内容及图片整理自XJTUSE “计算机组成原理与系统结构” 课程ppt,仅供学习交流使用,谢谢。 磁盘 磁盘是一个由非磁性材料构成的圆形盘片(称为基片),上面涂抹可磁化材料。传统的基片一直是铝制或铝合金的&#xff0…

【STL】string类的使用

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 string类的介绍--为什么学习string类 一、string类的默认成员函数 构造函数(constructor) 析构函数(destructor) 赋值运算符重载operator 二…

DAY38 ||62.不同路径 |63. 不同路径 II

62.不同路径 题目:62. 不同路径 - 力扣(LeetCode) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图…

李宏毅机器学习2022-HW7-BERT-Question Answering

文章目录 TaskBaselineMediumStrongBoss Code Link Task HW7的任务是通过BERT完成Question Answering。 数据预处理流程梳理 数据解压后包含3个json文件:hw7_train.json, hw7_dev.json, hw7_test.json。 DRCD: 台達閱讀理解資料集 Delta Reading Comprehension …

衡石分析平台系统分析人员手册-可视化报表仪表盘

仪表盘​ 仪表盘是数据分析最终展现形式,是数据分析的终极展现。 应用由一个或多个仪表盘展示,多个仪表盘之间有业务关联。 仪表盘编辑​ 图表列表​ 打开仪表盘后,就会看到该仪表盘中所有的图表。 调整图表布局​ 将鼠标移动到图表上拖动…

设计模式:类与类之间关系的表示方式(聚合,组合,依赖,继承,实现)

目录 聚合关系 组合关系 依赖关系 继承关系 实现关系 聚合关系 聚合是一种较弱的“拥有”关系,表示整体与部分的关系,但部分可以独立于整体存在。例如,部门和员工之间的关系,一个部门可以包含多个员工,但员工可以…

【大数据技术基础 | 实验四】HDFS实验:读写HDFS文件

文章目录 一、实验目的二、实验要求三、实验原理(一)Java Classpath(二)Eclipse Hadoop插件 四、实验环境五、实验内容和步骤(一)配置master服务器classpath(二)使用master服务器编写…

JOIN 表连接

1. 插入表测试数据 分别清空学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_course 数据,并分别插入测试数据。 1.1 清空表数据 分别清空学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_cours…

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇:网络安全基础 引言 在现代信息社会中,计算机网络无处不在,从互联网到局…

Atlas800昇腾服务器(型号:3000)—驱动与固件安装(一)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

0x3D service

0x3D service 1. 概念2. Request message 数据格式3. Respone message 数据格式3.1 正响应格式3.2 negative respone codes(NRC)4. 示例4.1 正响应示例:4.2 NRC 示例1. 概念 UDS(统一诊断服务)中的0x3D服务,即Write Memory By Address(按地址写内存)服务,允许客户端向服…

艺术家杨烨炘厦门开展,49只“鞋底倒计时”引轰动

艺术家杨烨炘 9,8,7,6,5,4,3,2,1,0………近日,一件名为《走向倒计时》的艺术作品在厦门引发讨论。艺术家杨烨炘邀请49位台湾同胞,将他们的鞋底拼成…

51单片机快速入门之 LCD1602 液晶显示屏2024/10/19

51单片机快速入门之 LCD1602 液晶显示屏 Proteus 电路图 : 74HC595 拓展电路可以不用,给 p0-p17 添加上拉电阻也可以!,我这里是方便读取和节省电阻线路 (因为之前不知道 在没有明确循环的情况下,Keil编译器可能会在main()中自动添加类似以下的汇编代码&#xff1a…

基于SpringBoot中药材进存销管理系统【附源码】

基于SpringBoot中药材进存销管理系统 效果如下: 系统注册界面 管理员主界面 员工界面 供应商界面 中药材类型界面 中药材界面 员工主界面 研究背景 随着中医药产业的快速发展,传统的管理方式已难以满足现代化、规模化的药材管理需求。中药材种类繁多&…

Vulnhub打靶-matrix-breakout-2-morpheus

基本信息 靶机下载:https://pan.baidu.com/s/1kz6ei5hNomFK44p1QT0xzQ?pwdy5qh 提取码: y5qh 攻击机器:192.168.20.128(Windows操作系统) 靶机:192.168.20.0/24 目标:获取2个flagroot权限 具体流程 …