gpt4 book ai didi

c - 有人曾经将 I2C 拆分到两个微 Controller 上吗?

转载 作者:行者123 更新时间:2023-11-30 21:39:07 26 4
gpt4 key购买 nike

所以我有了一个疯狂的想法,尝试将 I2C Controller 实现拆分到两个微 Controller 上。也就是说,1 个 uC 控制 SDA,1 个 uC 控制 SCL,并作为总线上的一个 I2C 设备(主机或从机)进行通信。我不想在这里只进行基本的 I2C 通信,我希望两个物理上独立的 Controller 作为一个 I2C 接口(interface)一起工作。

这里有人做过类似的事情谁可以建议我如何去做?

对于初学者来说,我假设我的单独的 SDA 和 SCL Controller 必须进行位敲击,但我不确定其余的。您将使用哪种处理器间通信? SPI 高得多的速率似乎是一个起点。这种方法可行的可能性有多大?人们可以期望这样的系统获得什么样的性能?也许只有几百赫兹才有可能?

是否有任何应用程序中这种情况很常见?不同的协议(protocol)或其他什么;我想知道的是分布在多个 Controller 上的硬件通信接口(interface)。

最佳答案

假设你有一个这样做的理由,如果它是“为了好玩”或“只是因为它在那里”(当你可以四处走动时为什么要爬过山)。

看看 I2C 是如何工作的。如果您有 SDA(该信号的所有者)监视 SCL,则两者都必须监视彼此的信号(或保持同步的其他方法),反之亦然。查看波形要求,如果两者都从高电平开始,则 SDA 下降,SCL 所有者看到这一点并下降 SCL,sda 所有者看到这一点并断言第一位。现在我们已经陷入困境了。如果第一位为零,则 SCL 所有者不知道 SDA 是否已设置该位,因此无法提高 SCL 对其进行计时。必须有更多信息。 SDA 和 SCL 所有者必须就一些规则达成一致,当 SCL 变低时,SDA 所有者必须同意在某个窗口内更改其状态(如果需要)。 SCL 必须同意在该窗口之后才更改其状态。然后 SDA 可以看到 SCL 先高后低。并重复。或者,SCL 不能超过 I2C 或该外设的最大速率,并且 SDA 位于该范围内。 SDA 可以很高兴地在 ACK 之前更改位,如果 SCL 符合该外设和/或 I2C 的规范,那么就可以了(即使没有这两个所有者方案也是如此)。当你想要停止时,你真正的问题就来了,SCL 如何知道 SDA 已经完成了它需要做的事情,并且走高并保持高位?因此SDA可以走高并保持高电平,SCL又回到等待SDA发起启动的模式。它们之间至少需要另一个不属于 i2c 的信号,并且您需要另一个协议(protocol),即 SCL 的速度不比 X 快,并且 SDA 满足该协议(protocol)(不能任意声明 SCL 以最大速率运行,因为 SDA 可能无法始终跟上这样,也许外设可以,但也许 SDA 不能,所以你的系统设计必须涵盖这一点)。

很远,只要由两个信号的一个所有者来完成就更容易了。从技术上讲,虽然这是可能的,但除了有趣的系统设计之外,它不会给你带来任何好处。能够攀登岩壁的人比那些只绕山走的人更有经验。

可以说,如果没有第三个信号,您可以让 SDA 改变状态的速度快两倍,比商定的 I2C 时钟速度更快。 SCL 可能将此视为您想要停止的指示。然后 SCL 变高并保持高电平,直到看到 SDA 变高然后变低,表明另一个开始。

我正在尝试决定 SCL 是否必须留在那里,您可以为 SCL 使用一个自由运行的时钟,而 SDA 是唯一做出决定的东西吗?走低,等待 SCL 走高(SDA 仍然必须监视 SCL),然后走高创建一个 STOP。保持高度,你既不会停止也不会开始。等待 SCL 高电平然后变低电平,创建一个启动,观察 scl 通过事务驱动 sda,在正确的时间创建停止,我认为只要它不混淆外设的设计就可以。也许规范对此有所说明,但这与 I2C 和 SPI 的相关性很小,通常外设会忽略规范。所讨论的外围设备占主导地位,因为那是您真正想与之交谈的人。所以我认为 SCL 所有者可能很愚蠢,就像只是一个时钟源,背后没有其他逻辑。

关于c - 有人曾经将 I2C 拆分到两个微 Controller 上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40373722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com