用户工具

站点工具


标准:bus:i2c:start

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
标准:bus:i2c:start [2025/10/16 08:49] – [信号和连接] hwwiki标准:bus:i2c:start [2025/10/20 09:15] (当前版本) – [信号和连接] hwwiki
行 23: 行 23:
 ===== 信号和连接 ===== ===== 信号和连接 =====
  
-I2C有两个信号,单向的时钟SCL(主 > 从)和双向的数据SDA。连接拓扑下图[([[https://dreamsourcelab.cn/articles/i2c/|DreamSourceLab:利用逻辑分析仪进行I2C总线的全面分析 1.2. 物理信号]])]。+I2C有两个信号,单向的时钟SCL(主 > 从)和双向的数据SDA。时钟信号虽由主机提供,但从机有时可以拉低SCL,以便减慢通讯的速度,等待从机处理完数据后再回复,此功能为时钟扩展,详见[([[https://www.ti.com.cn/cn/lit/an/sbaa565/sbaa565.pdf?ts=1684981369507&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FADS7924|TI: A Basic Guide to I2C > 6.2 Clock Stretching]])]。
  
-I2C总线允许多主机,但同一时刻只能有一个主机,通过SCL时钟同步和SDA线仲裁来决定谁是主机,其他设备则均为从机。+连接拓扑如下图[([[https://dreamsourcelab.cn/articles/i2c/|DreamSourceLab:利用逻辑分析仪进行I2C总线的全面分析 > 1.2. 物理信号]])]。I2C总线允许多主机,但同一时刻只能有一个主机,通过SCL时钟同步和SDA线仲裁来决定谁是主机,其他设备则均为从机[([[https://www.ti.com.cn/cn/lit/an/sbaa565/sbaa565.pdf?ts=1684981369507&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FADS7924|TI: A Basic Guide to I2C > 6.1 Clock Synchronization and Arbitration]])]
  
 {{:标准:bus:i2c:i2c-bus.png?600|}} {{:标准:bus:i2c:i2c-bus.png?600|}}
行 32: 行 32:
  
 {{:标准:bus:i2c:i2c-bus_ti.png?800|}} {{:标准:bus:i2c:i2c-bus_ti.png?800|}}
 +
 +SCL/SDA内部电路如下图,写的同时可以读,以确认是否写成功,如下图:
 +
 +{{:标准:bus:i2c:basic_internal_structure_of_sda-scl_line.png?500|}}
 +
 +
  
 ===== 硬件设计注意事项 ===== ===== 硬件设计注意事项 =====
 +
 +==== 上下拉电阻 ====
 +
 +除Ultra-fast mode (UFm)外,均是开漏输出,外部需要加上下拉电阻,阻值范围一般为1~10kΩ,常用为4.7kΩ[([[https://blog.mbedded.ninja/electronics/communication-protocols/i2c-communication-protocol/#pull-up-resistors|mbedded: I2C Communication Protocol > Pull-Up Resistors]])][([[https://www.ti.com.cn/cn/lit/an/sbaa565/sbaa565.pdf?ts=1684981369507&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FADS7924|TI: A Basic Guide to I2C > 6.5 Pullup Resistor Sizing]])]
 +
 +==== 地址 ====
 +
 +同一I2C总线上的地址需不同,常用的为7位地址,拓展的为10位地址(不是所有的器件都支持)。
 +
 +==== 电平转换 ====
 +
 +主从器件之间是否需要电平转换[([[https://www.ti.com.cn/cn/lit/an/sbaa565/sbaa565.pdf?ts=1684981369507&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FADS7924|TI: A Basic Guide to I2C > 6.4 Voltage Level Translation]])]?
 +
 +1.8/3.3/5V之间的电平转换:用三极管(400KHz以下)、MOS管(1MHz以下)搭建转换电路,或直接用转换芯片(参考{{ :元器件:ic:logic:translators_level-shifters:ti_voltage_translation_buying_guide.pdf | Voltage Translation Buying Guide}})
 +
 +==== 死锁 ====
 +
 +在通讯过程中,当从设备把SDA拉低,而此时主设备异常重启,主设备检测到SDA拉低,认为SDA被占用,同时主设备初始化SCL被拉高,从设备则一直等待SCL被拉低,从而陷入主从设备互锁的状态。
 +
 +解决方案:
 +  * **硬件**:复位主设备的同时,硬件复位从设备
 +  * **软件**:主设备复位后,控制主设备的SDA和SCL,模拟正常的通讯,使得从设备释放SDA。具体步骤见[[https://blog.mbedded.ninja/electronics/communication-protocols/i2c-communication-protocol/#stuck-i2c-buses|mbedded: I2C Communication Protocol > Stuck I2C Buses]]
  
 ===== 协议 ===== ===== 协议 =====
 +
 +  * 起始条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个下降沿[([[https://dreamsourcelab.cn/articles/i2c/|DreamSourceLab: 利用逻辑分析仪进行I2C总线的全面分析 > 2.1. 编码规则]])]。
 +  * 停止条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个上升沿。
 +  * 数据有效性:当时钟信号为高电平的时候,数据线上的信号需要保持不变。
 +  * 应答位:当主机传送8位数据结束后,主机拉高SDA,如果从机拉低SDA并在SCL高电平时保持低电平,这个信号为ACK信号(从机正确接收数据)。
 +  * 非应答位:当主机传送8位数据结束后,主机拉高SDA,如果SDA保持高电平则该信号为NACK(数据传输出错)。
 +{{:标准:bus:i2c:i2c-condition.png?800|}}
 +
 +{{:标准:bus:i2c:i2c-ack.png?600|}}
 +
 +读写操作如下图[([[https://www.ti.com/lit/an/slva704/slva704.pdf|Ti: Understanding the I2C Bus > I2C Data]])]:
 +
 +{{:标准:bus:i2c:i2c-read.png?800|}}
 +
 +{{:标准:bus:i2c:i2c-write.png?600|}}
 +
 +上述为常用的7为地址的读写,对于拓展的10位地址的读写,区别为前两个字节为10位地址(前缀11110表示这两个字节为10位地址),7位和10位对比如下图[([[https://blog.mbedded.ninja/electronics/communication-protocols/i2c-communication-protocol/#10-bit-addressing|mbedded: I2C Communication Protocol > 10-bit-addressing]])]。
 +
 +{{:标准:bus:i2c:i2c-address.png?600|}}
 +
 +==== I2C、SMBus和PMBus的区别 ====
 +
 +**SMBus**:最初开发用于协助电池管理系统,使用I2C硬件,但增加了第二级软件,最终允许器件热插拔,而无需重新启动系统。
 +
 +**PMBus**:扩展了SMBus,定义了一组专门用于管理功率转换器的器件命令,暴露了器件的测量电压、电流、温度等属性。
 +
 +一般而言,I2C Primer、SMBus和PMBus器件可以共享总线而不会发生什么大问题。
 +
 +三者之间的具体区别如下[([[https://www.analog.com/media/cn/analog-dialogue/volume-55/number-4/i2c-communication-protocol-understanding-i2c-primer-pmbus-and-smbus_cn.pdf|ADI: I2C通信协议:了解I2C Primer、PMBus和SMBus]])]:
 +
 +{{:标准:bus:i2c:表8._i2c_primer_smbus和pmbus规格总结.png?800|}}
 +
 +
 +
 +
 +
 +
  
  
标准/bus/i2c/start.1760575799.txt.gz · 最后更改: 2025/10/16 08:49 由 hwwiki