标准:bus:i2c:start
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
标准:bus:i2c:start [2025/10/08 18:45] – [版本差异] hwwiki | 标准:bus:i2c:start [2025/10/20 09:15] (当前版本) – [信号和连接] hwwiki | ||
---|---|---|---|
行 21: | 行 21: | ||
| Ultra-fast mode (UFm) | 5Mbit/ | | Ultra-fast mode (UFm) | 5Mbit/ | ||
+ | ===== 信号和连接 ===== | ||
+ | I2C有两个信号,单向的时钟SCL(主 > 从)和双向的数据SDA。时钟信号虽由主机提供,但从机有时可以拉低SCL,以便减慢通讯的速度,如等待从机处理完数据后再回复,此功能为时钟扩展,详见[([[https:// | ||
+ | |||
+ | 连接拓扑如下图[([[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 如需扩展或及中继则可以参考下图[([[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | SCL/ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | ===== 硬件设计注意事项 ===== | ||
+ | |||
+ | ==== 上下拉电阻 ==== | ||
+ | |||
+ | 除Ultra-fast mode (UFm)外,均是开漏输出,外部需要加上下拉电阻,阻值范围一般为1~10kΩ,常用为4.7kΩ[([[https:// | ||
+ | |||
+ | ==== 地址 ==== | ||
+ | |||
+ | 同一I2C总线上的地址需不同,常用的为7位地址,拓展的为10位地址(不是所有的器件都支持)。 | ||
+ | |||
+ | ==== 电平转换 ==== | ||
+ | |||
+ | 主从器件之间是否需要电平转换[([[https:// | ||
+ | |||
+ | 1.8/ | ||
+ | |||
+ | ==== 死锁 ==== | ||
+ | |||
+ | 在通讯过程中,当从设备把SDA拉低,而此时主设备异常重启,主设备检测到SDA拉低,认为SDA被占用,同时主设备初始化SCL被拉高,从设备则一直等待SCL被拉低,从而陷入主从设备互锁的状态。 | ||
+ | |||
+ | 解决方案: | ||
+ | * **硬件**:复位主设备的同时,硬件复位从设备 | ||
+ | * **软件**:主设备复位后,控制主设备的SDA和SCL,模拟正常的通讯,使得从设备释放SDA。具体步骤见[[https:// | ||
+ | |||
+ | ===== 协议 ===== | ||
+ | |||
+ | * 起始条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个下降沿[([[https:// | ||
+ | * 停止条件:时钟信号线(SCL)为高电平时,数据线(SDA)产生一个上升沿。 | ||
+ | * 数据有效性:当时钟信号为高电平的时候,数据线上的信号需要保持不变。 | ||
+ | * 应答位:当主机传送8位数据结束后,主机拉高SDA,如果从机拉低SDA并在SCL高电平时保持低电平,这个信号为ACK信号(从机正确接收数据)。 | ||
+ | * 非应答位:当主机传送8位数据结束后,主机拉高SDA,如果SDA保持高电平则该信号为NACK(数据传输出错)。 | ||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 读写操作如下图[([[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 上述为常用的7为地址的读写,对于拓展的10位地址的读写,区别为前两个字节为10位地址(前缀11110表示这两个字节为10位地址),7位和10位对比如下图[([[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== I2C、SMBus和PMBus的区别 ==== | ||
+ | |||
+ | **SMBus**:最初开发用于协助电池管理系统,使用I2C硬件,但增加了第二级软件,最终允许器件热插拔,而无需重新启动系统。 | ||
+ | |||
+ | **PMBus**:扩展了SMBus,定义了一组专门用于管理功率转换器的器件命令,暴露了器件的测量电压、电流、温度等属性。 | ||
+ | |||
+ | 一般而言,I2C Primer、SMBus和PMBus器件可以共享总线而不会发生什么大问题。 | ||
+ | |||
+ | 三者之间的具体区别如下[([[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== 测试 ===== | ||
+ | |||
+ | 逻辑分析仪和示波器均可以测试I2C,软件工程师看协议推荐用逻辑分析仪,硬件工程师看信号推荐用示波器,带解码的示波器则可以兼顾软硬件工程师的需求。 | ||
+ | |||
+ | 单独逻辑分析仪的测试说明见[[https:// | ||
+ | “3. 逻辑分析仪准备”至“5.进阶分析” | ||
标准/bus/i2c/start.1759920339.txt.gz · 最后更改: 2025/10/08 18:45 由 hwwiki