2023-05-11 10:45发布
大家好
当谈到主控和从控都控制时钟和数据线的场景时,我有点困惑。
到目前为止,我已经了解到:我了解到,当主设备启动写操作时,它需要控制时钟和数据线来向从设备发送数据。然而,我不太清楚奴隶是如何控制这些线路的,以及它是在什么时候这样做的。
有人能帮我解释一下吗?具体来说,我很好奇从机是如何控制时钟和数据线的。从从设备读取操作期间会发生这种情况吗?如果是,这个过程是如何工作的?
期待您对此问题的见解和澄清!
提前谢谢!
一般出现这种情况的情景是:从设备保持SCL较低是为了延长时钟。(否则,您可以使用I2C拓扑,其中在同一总线上有多个主机,但我觉得这不是您在这里所讨论的问题。)参考说明:https://www.i2c-bus.org/clock-stretching/
这里有一个官方的I2C规范,其中详细说明了所有可能的模式以及允许clock stretching的位置-https://www.nxp.com/docs/en/user-guide/UM10204.pdf
我很少使用I2C。简要回顾一下我记忆中的内容:
主控器始终控制时钟线,但数据方向可以变化。
主机首先发送8位字节,其中有7个地址位和一个读/写位。
第九位是“确认位”,由从机在主机生成的时钟脉冲上发送。
之后,数据的方向取决于主机是想发送还是接收数据。
每个字节后面都有一个向另一个方向发送的确认位。
除了最后一个字节。该字节未被确认,这表示数据传输结束。
I2C_Spec_UM10204.pdf
在标准模式(Sm、Fm)中,从机可以对字节中的任何操作应用拉伸,它可以拉伸它想要的每一位。
在Hs模式下,拉伸发生的位置有限制。
Hs不同的原因是Hs总体上非常不同。Hs模式设备非常罕见,因此我认为它们不相关。所有真正需要高速的东西都使用SPI。
实际上,大多数从设备都会在ACK之前伸展,让MCU处理数据并准备响应。
最多设置5个标签!
这里有一个官方的I2C规范,其中详细说明了所有可能的模式以及允许clock stretching的位置-https://www.nxp.com/docs/en/user-guide/UM10204.pdf
我很少使用I2C。简要回顾一下我记忆中的内容:
主控器始终控制时钟线,但数据方向可以变化。
主机首先发送8位字节,其中有7个地址位和一个读/写位。
第九位是“确认位”,由从机在主机生成的时钟脉冲上发送。
之后,数据的方向取决于主机是想发送还是接收数据。
每个字节后面都有一个向另一个方向发送的确认位。
除了最后一个字节。该字节未被确认,这表示数据传输结束。
I2C_Spec_UM10204.pdf
在标准模式(Sm、Fm)中,从机可以对字节中的任何操作应用拉伸,它可以拉伸它想要的每一位。
在Hs模式下,拉伸发生的位置有限制。
在Hs模式下,拉伸发生的位置有限制。
Hs不同的原因是Hs总体上非常不同。Hs模式设备非常罕见,因此我认为它们不相关。所有真正需要高速的东西都使用SPI。
实际上,大多数从设备都会在ACK之前伸展,让MCU处理数据并准备响应。
一周热门 更多>