通俗易懂:I2c总线_i2c接口图片_赖神 | 嵌入式的博客-程序员宅基地

技术标签: stm32  嵌入式硬件  单片机  

I2c:

  • 简介

  • 来源:I2C总线是一种简单、双向二线制同步串行总线。只有两条线
  • 作用:器件间近距离经常性数据通信(器件间:是在一块板子之内)
  • 比如hi3518ev200和外部的sensor传感器接口就是使用i2c总线的
  • 下图是使用i2c接口的OLED显示屏
  • 硬件IO

  • 两条线,分别是:
  • SDA(串行数据线):传输通信数据。
  • SCL(串行时钟线):传输CLK信号,一般是I2C主设备向从设备提供时钟的通道。
  • 特性

  • 串行:所有的数据以位为单位在SDA线上串行传输。(把数据拆分为一位一位传输)。
  • 同步。
  • 半双工
  • 低速率:I2C一般是用在同一个板子上的2个IC之间的通信,而且用来传输的数据量不大,所以本身通信速率很低,一般几百KHz
  • 采用主从模式(Master—Slave)架构,分主设备和从设备,既可以1个主设备对1个从设备,也可以1个主设备对多个从设备。
  • 主设备来负责调度i2c总线,决定某一时间和哪个从设备通信。
  • 注意:同一时间内,I2C的总线上只能传输一对设备(一个主设备和一个从设备)的通信信息,所以同一时间只能有一个从设备和主设备通信,其他从设备处于“冬眠”状态,不能出来捣乱,否则通信就乱套了。
  • I2C主设备怎么识别从设备的呢?
  • 每一个I2C从设备在通信中都有一个I2C从设备地址,这个设备地址是从设备本身固有的属性,然后通信时主设备需要知道自己将要通信的那个从设备的地址,然后在通信中通过地址来甄别是不是自己要找的那个从设备。
  • 通信时序

  • 起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。
  • 停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。
  • 重复起始条件:和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。
  • ACK:从设备在第9个clk,把SDA线拉低,表示响应
  • NACK:从设备在第9个clk,没有把SDA线拉低,SDA保持高电平,表示没有响应
  • 数据有效性:SCL处于高电平时数据有效,此时SDA必须保持稳定;SCL处于低电平时SDA才能变化
  • 通信过程

  • 主设备往从设备写数据
    • 主设备发起起始信号,然后从设备地址和写标志位一共8bit,需要8clk,到9clk,从设备回复应答信号或非应答信号,如果是非应答信号则主设备会发起停止信号停止通信;
    • 如果是应答信号,则主设备会继续发送从设备指定寄存器地址,从设备ask,之后主设备发送指定数据给指定到指定寄存器地址完成写数据,从设备ask
    • 最后主设备发送停止信号,停止通信
  • 主设备从从设备读数据
    • 主设备发起起始信号,发送从设备地址和写标志位,从设备回复应答信号或非应答信号,如果是非应答信号则主设备会发起停止信号停止通信
    • 如果是应答信号,则主设备会继续发送从设备指定寄存器地址,从设备ask;
    • 之后主设备重新发起一次起始信号,然后发送从设备地址和读标志位,从设备ask
    • 之后主设备读取从设备指定寄存器数据,然后主设备发起一个非应答信号,最后主设备发送停止信号,停止通信
  • 数据传输格式

  • 主设备在每个通信周期会先发送从设备地址和读写标志位
  • 从设备地址有7bit,首位是MSB;读写标志位是1-bit(R/W)的操作符,1表示读,0表示写
  • 发送方发送一段数据后,接收方需要回应一个ACK。这个响应本身只有1个bit位,不能携带有效信息,只能表示2个意思(要么表示收到数据,即有效响应;要么表示未收到数据,无效响应)
  • I2C控制器

  • 通信双方本质上是通过时序在工作,但是时序会比较复杂不利于SoC软件完成,于是乎解决方案是SoC内部内置了硬件的控制器来产生通信时序。这样我们写软件时只需要向控制器的寄存器中写入配置值即可,控制器会产生适当的时序在通信线上和对方通信。
  • 本文参考:I2C详解(一)_sternlycore的博客-程序员宅基地_i2c
  • 一文看懂I2C协议 - 知乎
  • I2C总线_百度百科
  • 侵删

    

       

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_58155747/article/details/122245078

智能推荐

win7下面vs2008试用版升级到正版步骤-程序员宅基地

win7下面vs2008试用版升级到正版步骤1、先安装试用版,然后在“添加或删除程序”里找到VS2008,点“更改/删除”就会看到一个输入序列号的地方,把序列号输进去,点“升级”按钮即可,Team Suite和Professional通用。  二、把ISO中的Setup/setup.sdb文件中的[ProductKey],由“T2CRQGDKBVW7KJR8C6CKXMW3D”修改为“

PCL学习笔记——点云滤波(三)_设置点云宽度或数量-程序员宅基地

五. 使用ExtractIndices滤波器从一个点云中提取一个子集基于某一分割算法提取点云中的一个子集代码如下:#include <iostream>#include <pcl/ModelCoefficients.h>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#incl..._设置点云宽度或数量

【Leetcode_easy】599. Minimum Index Sum of Two Lists-程序员宅基地

problem599. Minimum Index Sum of Two Lists题意:给出两个字符串数组,找到坐标位置之和最小的相同的字符串。计算两个的坐标之和,如果与最小坐标和sum相同,那么将这个字符串加入结果res中,如果比sum小,那么sum更新为这个较小值,然后将结果res清空并加入这个字符串。solution:class Solution {public...

idea actiBPM插件生成png文件_idea actnpm 生成png-程序员宅基地

idea actiBPM插件生成png文件 (解决没有Diagrams或Designer选项问题)传送门_idea actnpm 生成png

传感器的设计要点解析_传感器疑难问题-程序员宅基地

好的传感器的设计是经验加技术的结晶。一般理解传感器是将一种物理量经过电路转换成一种能以另外一种直观的可表达的物理量的描述。而下文我们将对传感器的概念、原理特性进行逐一介绍,进而解析传感器的设计的要点。1 传感器的概念传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记_传感器疑难问题

SQL避坑:当in,not in遇上null这种坑你避过吗?_not in null_莫叫石榴姐的博客-程序员宅基地

用in的时候一般问题不大,使用not in的时候需要特别主要,结合本文恰当使用,之所以造成如此大的差异原因是对NULL的判断上,NULL的判断本质上is null或is not null,in或not in的判断是等于(=),所以对NULL判断是无效的,需要谨记。........._not in null

随便推点

Try、catch和finally_try{if(i==1}-程序员宅基地

public class TryCatchFinally { public static String output =""; public static void foo(int i){ try{ System.out.println("try"); if(i == 1){ throw _try{if(i==1}

Android R 护眼模式 选择日落到日出期间开启失败_twilightmanager-程序员宅基地

测试描述:前提条件:设置-系统-时间和日期,调节时间为(夜间模式时间大约17:45-6:35)操作步骤:设置-显示-夜间模式,设定时间在日落到日出期间开启,调节时间问题点:调节时间为(夜间模式时间大约17:45-6:35),没有成功开启夜间模式预期结果:调节时间为(夜间模式时间大约17:45-6:35),成功开启夜间模式备注:谷歌机11.0可以成功开启分析过程:(1)对代码添加log:1)frameworks/base/services/core/java/com/..._twilightmanager

上帝视角看 TypeScript-程序员宅基地

点击蓝色“脑洞前端”关注我哟加个“星标”,带你揭开大前端的神秘面纱!❝这是脑洞前端第「99」篇原创文章TypeScript 的学习资料非常多,其中也不乏很多优秀的文章和教程。但是目前为止..._typescript 是如何与 react,vue,webpack 集成的 lucifer

uC/OS-III之定时器管理-程序员宅基地

1.所谓定时器本质上是递减计数器,当计数器减到零时可以出发某种动作的执行。这种动作可以通过回调函数(callback funtion,简称回调)来实现。需要注意的是,一定要避免在回调函数中使用阻塞调用。 注:定时器在一些协议栈的实现中很有用,也可以用来定期轮训IO设备。2.定时器任务的频率通过宏定义OS_CFG_TMR_TASK_RATE_HZ来实现,单位是Hz。 该宏定义位于文件os_cfg_

pycharm恢复出厂设置(最简单方式)_重置pycharm_想清楚再敲的博客-程序员宅基地

File-->Manage IDE Settings-->Restore Default Settings点击后,一直确定,之后会自动退出重新进去,就恢复出厂设置了。_重置pycharm

(转)SIGINT、SIGQUIT、 SIGTERM、SIGSTOP区别_sigterm和sigabort区别-程序员宅基地

2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。15) SIGTERM 程序结束(terminate)信号, 与SI..._sigterm和sigabort区别