clock - I2C 从主时钟延长中恢复
问题描述
在时钟延长中,如果从机将时钟线保持为低电平,则主机应等待对线路上的任何 ACK 作出结论。既然从机可以随时释放时钟信号,如果从机释放时钟,例如主时钟周期的 3/4,我们如何解释 SDA 线的值?让我用一个例子来说明
- 考虑一个具有 100 kHz 时钟速率(10 us 周期)的 I2C 主机。
- 当主机在发送时,SCL 上每 5us 有一个上升沿。
- 在 ACK 周期内,假设从机在 ACK 周期的前 7.5us 内将 SCL 线保持为低电平
- 在 7.5 us 假设从机在发送 SDA 低电平时释放 SCL。
- 在这种情况下,SCL 线将在 2.5 us 之前处于高位,然后再次走低,然后继续其 10 us 周期。
- 此外,假设从机随后允许 SDA 在 SCL 的下一个上升沿之前变为高电平(即,它将 SDA 保持在低电平的时间少于 7.5 us)
- SCL 的哪个上升沿指示有效的 SDA 值?
- 它是第一个上升沿(SCL 仅保持高电平 2.5 us)吗?
- 或者它是作为完整 SCL 时钟周期一部分的第二个上升沿(5 us 低,然后是 5 us 高)?
解决方案
我认为你的前提是错误的开始。对于 100KHz 时钟,SCL 的上升沿每 10 uS 出现一次。因此,没有需要关注的第二个上升沿。
推荐阅读
- azure - Azure Log Analytics 和 Azure App Service Access Logs,可以连接吗?
- visual-studio - grid-template-columns alternatives
- python - 如何在更改的日志文件中搜索 Python 中的字符串?
- scala - 带有scala的spark2.2.0中的Regexp_extract抛出错误
- enums - 枚举中冲突的“名称”声明
- html - 静态视口宽度
- javascript - 为什么 JQuery $.post 提交两次?
- c++ - 如何在 autoconf 中为 clang 检查支持编译标志
- ruby-on-rails - 基于条件和来自不同数组的部分渲染
- qt - 具有两个不同边框和自定义半径的 QML 按钮