I2C混频可以吗?

电器工程 i2c
2022-01-17 17:33:56

假设我们有一个 400 kHz I 2 C 总线。有一个主设备和一堆从设备。我们想再介绍一个从设备,但不幸的是它只能达到 100 kHz。

显然,可靠的设计选择是:

  • 只需以 100 kHz 的频率运行该总线
  • 为 400 kHz 和 100 kHz 外设使用单独的总线

但问题只是一个 hack:如果我们使用一个总线,并以 400 kHz 寻址 400 kHz 设备,并在与 100 kHz 从站通话时将总线切换到 100 kHz 会怎样?

或者较慢的从机是否会因为错误地认为它正在被寻址而对它在 I 2 C 线路上看到的 400 kHz 散列做出响应?

我们能否依靠 100 kHz 设备仍然能够足够好地处理 400 kHz I 2 C 信号以可靠地忽略发送给其他从站的消息?

4个回答

另一种选择是,如果您的主机没有额外的 I2C 总线,则使用 I2C 开关,例如PCA9543A/43B将 400kHz 从机放在一个分支上,将 100kHz 从机放在另一个分支上,并根据需要进行切换。

正如您所建议的,这样做不是一个好的工程实践。虽然某些设备会忽略它们无法接收的流量(欠采样),但其他设备可能会因错误帧而使总线混乱。

因此,您正在寻找的答案取决于您的应用程序的具体情况,例如:

  • I2C 连接的长度
  • 上拉电阻值
  • 设备兼容性

当然,很难预测几年后运行在其规格之外的设备会发生什么。

另一种选择是运行关闭线以减慢设备或通过与门传递时钟线(假设它们不能产生时钟信号)。

无法保证 100kHz 设备在暴露于 400kHz 流量时不会出现异常行为——从 NACK 到总线挂起的任何事情都是可能的。

您应该以 100kHz 的频率运行整个总线,或者为慢速外围设备使用单独的低速总线。

其他选项。您可以简单地使用一条额外的线路,而不是拥有两条总线(使用软件/bitbanged I 2 C 更容易)。单独的时钟线,或单独的数据线。或者使用 I 2 C 缓冲器或 I 2 C 开关将单个 100MHz 芯片放在它自己的段上,而无需更改任何其他内容。

或者只是在单个总线上测试它。100kHz 芯片很可能会影响线路。它可以读取每 4 位并最终认为它已被解决。但是它必须看到一个有效的开始条件,然后从接下来的 32 位中读取每个第 4 位作为它的确切地址,然后它要么必须尝试读取接下来的几个字节作为有效信息来写入它的寄存器,或尝试打卡数据。我认为这种情况不太可能。最好的办法是将其简单地连接到测试电路中并进行检查。

有两件事需要注意,如果这是一个一次性的电路,或者你只做几个,那么冒险或改变它很容易。如果它是批量生产的产品,您可能只想拥有第二辆公共汽车。另一个是你必须考虑到 100kHz 芯片只是按照原始 I 2 C 规格生产的,并且很可能支持更高的时钟速度。它只是没有针对更高速度的 400kHz 规格进行测试。