I2C 的输入输出切换(主机和从机如何控制 SDA/SCL)
一句话总结:
I2C 线上设备不会主动输出高电平,只会在需要时把线拉低,通过硬件开漏结构实现输入输出的自动切换。
- 原理
● I2C 的 SDA 和 SCL 都是开漏结构
● 所有设备只能输出低电平
● 高电平由外部上拉电阻拉上去
● 不需要发送时,设备把引脚变成高阻态(就像断开)
● 需要发送 0 时,把开漏 MOS 管导通,拉低 SDA - 输入与输出的切换
● 输出模式:设备内部把开漏管打开 → 线被拉低 → 输出 0
● 输入模式:设备关闭 MOS 管 → 引脚悬空 → 线上电平由别人或上拉决定 → 自己读取 SDA
● 切换不需要软件频繁改模式,是 I2C 硬件控制器自动管理
下面用图展示开漏结构:
SDA线
|
|----[上拉电阻]----VCC
|
±–±—+
| |
| 开漏MOS管
| (只能拉低)
|
从机/主机IO口
说明:
● MOS 管关断 → 线被上拉为高 → 设备处于输入
● MOS 管导通 → 线被拉低 → 设备输出 0
● 永远不直接输出高 - 举例
● 主机要发送数据:在对应的时钟周期,把 SDA 的 MOS 管打开或关闭来决定是否拉低
● 从机要回应 ACK:在 ACK 位拉低 SDA 一个周期
● 不通信时所有设备都松开 SDA → SDA 始终被上拉为高
5816

被折叠的 条评论
为什么被折叠?



