通俗易懂:I2c总线

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的博客-CSDN博客_i2c
  • 一文看懂I2C协议 - 知乎
  • I2C总线_百度百科
  • 侵删

    

       

 

 

 

版权声明:本文为CSDN博主「赖神 | 嵌入式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_58155747/article/details/122245078

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的博客-CSDN博客_i2c
  • 一文看懂I2C协议 - 知乎
  • I2C总线_百度百科
  • 侵删

    

       

 

 

 

版权声明:本文为CSDN博主「赖神 | 嵌入式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_58155747/article/details/122245078

生成海报
点赞 0

赖神 | 嵌入式

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

串口不定长接收

一、保留接收区和开启接收的语句    uint8_t buffer[5];HAL_UART_Transmit_IT(&huart1,buffer,3); 二、写入开启空闲中断的语句    __HAL_UART_ENABLE_IT(&huart

基于STM32单片机的电子密码锁设计

一.硬件方案 本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警