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
暂无评论