linux i2c驱动协议

1、I2C

I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接

2、硬件连接

I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接,上拉电阻阻值大小有最大值和最小值的限制。

3、硬件拉低(Open-Drain Pulling Low)

        下图代表了总线电平拉低过程,当总线要传输低电平0时,Logic会控制FET使其导通VBUS总线连接到地,将总线拉低,注意在快速模式下最大的灌电流不超过3mA,这限制了上拉电阻的最小值。

4、硬件拉高(Open-Drain Releasing Bus)

        下图代表了总线电平高电平过程,当总线要传输高电平1时,Logic会控制FET使其关断VBUS总线上拉到电源,将总线拉高。

5、软件通讯协议

        I2C是串行传输总线,按照下面格式进行一位一位传输

6、总线速度

双向传输总线:

  1. 标准模式(Standard-mode):速率高达100kbit/s
  2. 快速模式(Fast-mode):速率高达400kbit/s
  3. 快速模式+(Fast-mode Plus):速率高达1Mbit/s。
  4. 高速模式(High-speed mode):速率高达3.4Mbit/s

单向传输总线:

  1. 超快速模式(Ultra Fast-mode):速率高达5Mbit/s

7、起始和停止条件及重复起始条件

起始和终止条件都是由主机(master)发起产生。总线在起始条件之后处于忙碌状态,在停止条件之后又处于空闲状态。

  1. 起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。
  2. 停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。
  3. 重复起始条件:和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。

8、字节格式

        SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。

9、响应ACK和非响应NACK

        每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输101010101为例,SCL第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。

当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:

  1. 接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
  2. 由于接收机正在忙碌处理实时程序导致接无法接收或者发送
  3. 传输过程中,接收机识别不了发送机的数据或命令
  4. 接收机无法接收
  5. 主机接收完成读取数据后,要发送NACK结束告知从机

10、7-bit地址格式和读写位

一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit(R/W)的操作符,1表示读操作,0表示写操作。接下来的一个bit是NACK/ACK,当这个帧中前面8 bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK(将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理(stop或repeated start condition)。

版权声明:本文为CSDN博主「会写bug的程序猿_goon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chbgoon/article/details/122846555

1、I2C

I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接。

2、硬件连接

I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接,上拉电阻阻值大小有最大值和最小值的限制。

3、硬件拉低(Open-Drain Pulling Low)

        下图代表了总线电平拉低过程,当总线要传输低电平0时,Logic会控制FET使其导通VBUS总线连接到地,将总线拉低,注意在快速模式下最大的灌电流不超过3mA,这限制了上拉电阻的最小值。

 

4、硬件拉高(Open-Drain Releasing Bus)

        下图代表了总线电平高电平过程,当总线要传输高电平1时,Logic会控制FET使其关断VBUS总线上拉到电源,将总线拉高。

5、软件通讯协议

        I2C是串行传输总线,按照下面格式进行一位一位传输,协议传输如下:

6、总线速度

双向传输总线:

  1. 标准模式(Standard-mode):速率高达100kbit/s
  2. 快速模式(Fast-mode):速率高达400kbit/s
  3. 快速模式+(Fast-mode Plus):速率高达1Mbit/s。
  4. 高速模式(High-speed mode):速率高达3.4Mbit/s

单向传输总线:

  1. 超快速模式(Ultra Fast-mode):速率高达5Mbit/s

7、起始和停止条件及重复起始条件

起始和终止条件都是由主机(master)发起产生。总线在起始条件之后处于忙碌状态,在停止条件之后又处于空闲状态。

  1. 起始条件:SCL线是高电平时,SDA线从高电平向低电平切换。
  2. 停止条件:SCL线是高电平时,SDA线从低电平向高电平切换。
  3. 重复起始条件:和起始条件相似,重复起始条件发生在停止条件之前。主机想继续给从机发送消息时,一个字节传输完成后可以发送重复起始条件,而不是产生停止条件。

8、字节格式

        SDA数据线上的每个字节必须是8位,每次传输的字节数量没有限制。每个字节后必须跟一个响应位(ACK)。首先传输的数据是最高位(MSB),SDA上的数据必须在SCL高电平周期时保持稳定,数据的高低电平翻转变化发生在SCL低电平时期。

 

9、响应ACK和非响应NACK

        每个字节传输必须带响应位,相关的响应时钟也由主机产生,在响应的时钟脉冲期间(第9个时钟周期),发送端释放SDA线,接收端把SDA拉低。以上图传输101010101为例,SCL第9位时钟高电平信号期间,SDA拉低其代表了有ACK响应位。

当在SCL第9位时钟高电平信号期间,SDA仍然保持高电平,这种情况定义为NACK非响应位。这种情况下,主机可以直接产生STOP条件终止以后的传输或者继续重新START开始一个新的传输。以下情况会导致出现NACK位:

  1. 接收机没有发送机响应的地址,接收端没有任何ACK发送给发射机
  2. 由于接收机正在忙碌处理实时程序导致接无法接收或者发送
  3. 传输过程中,接收机识别不了发送机的数据或命令
  4. 接收机无法接收
  5. 主机接收完成读取数据后,要发送NACK结束告知从机

10、7-bit地址格式和读写位

一个7-bit的地址是从最高位(MSB)开始发送的,这个地址后面会紧跟1-bit(R/W)的操作符,1表示读操作,0表示写操作。接下来的一个bit是NACK/ACK,当这个帧中前面8 bit发送完后,接收端的设备获得SDA控制权,此时接收设备应该在第9个时钟脉冲之前回复一个ACK(将SDA拉低)以表示接收正常,如果接收设备没有将SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理(stop或repeated start condition)。

 

版权声明:本文为CSDN博主「会写bug的程序猿_goon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chbgoon/article/details/122846555

生成海报
点赞 0

会写bug的程序猿_goon

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

暂无评论

发表评论

相关推荐

linux i2c驱动协议

1、I2C I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接 2、硬件连接

WK2204 - spi转uart调试记录

硬件 芯片简介 WK2204(DataSheet)是spi扩展uart的芯片,实现spi扩展4路uart,该芯片扩展的uart通道的具备以下功能特点: 每个通道的波特率、

存储器Flash页、扇区、块的区别

关注星标公众号,不错过精彩内容作者 | strongerHuang微信公众号 | 嵌入式专栏大家都知道Flash是用于存储数据的存储器,但很多读者看到页(Page)、扇区(Sector)、块(Block)等这些单位时

树莓派4B 与 stm32 通信

本文用来记录智能控制课设中的通信环节的实现 硬件便是树莓派4Bstm32(我用的是正点原子的STM32F103ZET6的核心板) 从头开始做的,带着你去从烧录树莓派,安装STM32的编译环境开始,直到