我已经使多路复用器完全运行并使用了几周、但现在我正在准备编写实际接口。 我想从多路复用器中读取状态以进行中断和确认总线已启用。 即使我通过 WRITE 命令成功启用了总线0、对其进行回读也始终会为位0提供0。 我觉得在写操作后读回寄存器的速度可能太快、所以我有第二次读操作、但值没有改变。
正如您在捕获中看到的、一旦收到命令、总线就会变为活动状态。 但即使发送0x09也会在读取寄存器时返回0x08。
它不是处理器端、时序是干净的。 我已经使用总线0几周了、现在可以读取各种其他器件。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我已经使多路复用器完全运行并使用了几周、但现在我正在准备编写实际接口。 我想从多路复用器中读取状态以进行中断和确认总线已启用。 即使我通过 WRITE 命令成功启用了总线0、对其进行回读也始终会为位0提供0。 我觉得在写操作后读回寄存器的速度可能太快、所以我有第二次读操作、但值没有改变。
正如您在捕获中看到的、一旦收到命令、总线就会变为活动状态。 但即使发送0x09也会在读取寄存器时返回0x08。
它不是处理器端、时序是干净的。 我已经使用总线0几周了、现在可以读取各种其他器件。
是的、器件是 PCA9545ARGYR。
所有器件都具有唯一的地址。 我没有总线冲突或类似的东西。 我有一个正在开发的板、但如果需要、还可能有几个其他板来测试。
当我们从 PCBA 收到电路板时、它们将多路复用器倒置组装在所有电路板上。 这些电路板均未通电。 我们在检查过程中发现了它、并且在对 PCB 施加任何电源之前对所有电路板进行了返工。
这是多路复用器、总线上拉电阻为4.7K
在读取/写入状态寄存器时、是否缺少时序限制?
连接至 ATMEGA2560
向器件发送0x01字节以启用总线0
地址+地址
数据字节0x01
读取状态寄存器
地址+ ACK
返回的数据字节为0x00
我们的器件与竞争对手的一个区别是、我们的器件需要一个停止条件(而不是重新启动)才能执行写入命令。 这看起来不像问题、因为您的通道已启用。
[引用 userid="494960" URL"~/support/interface-group/interface/f/interface-forum/1025526/pca9545a-control-register-status-always-showing-channel-0-as-disabled-even-when-it-is-clearly-working/3792361 #3792361"]引脚与数据表引脚匹配(良好)
网络名称匹配(例如 SDA 网络与器件的 SDA 匹配)
去耦电容器
复位被偏置
VCC 处于建议的工作条件内
地址引脚偏置为 GND
我在原理图上看到的一切对我来说都很好。
不过、我需要注意的一点是、您有一个名为 I2C MUX RST 的网络、该引脚的逻辑是否在器件上电之前驱动为高电平(I2C MUX 复位更高的电压或在+3.3_I2C_MUX 电源轨上电之前加电?)
我之所以提出这一点、是因为第8.4.1.1.1节讨论了#reset 勘误表。 我最近处理了一个返回、我们发现偏置复位高于 Vcc、并且读取器件会导致在不同温度下从器件读取错误的值。 如果您将 RESET 引脚偏置为高于 Vcc、我们可能会看到同样的问题出现。
[引用 userid="494960" URL"~/support/interface-group/interface/f/interface-forum/1025526/pca9545a-control-register-status-always-showing-channel-0-as-disabled-even-when-it-is-clearly-working/3792361 #3792361"]起始条件在这里看起来很好。 上升时间看起来不错。 受关注的方面。 发送的地址为0x70h 写入字节0x01h、这看起来是正确的、器件会同时确认这两个字节。
但我看不到停止条件。 我建议进行双重检查以验证它是否正确执行。
读取事务看起来是正确完成的。 然而、由于 SDA 为高电平、SCL 变为高电平、停止条件看起来并不正确。 我们应该看到处理器释放 SCL 为高电平、同时 SDA 为低电平、然后 SDA 在经过一些延迟后变为高电平(延迟时间是 I2C 标准中规定的)
我们能否仔细检查您的停止条件是什么样子、以及它们是否在 I2C 写入结束时正确完成?
-Bobby
您好 Jason、
[引用 userid="494960" URL"~/support/interface-group/interface/f/interface-forum/1025526/pca9545a-control-register-status-always-showing-channel-0-as-disabled-even-when-it-is-clearly-working/3793479 #379349"]您 显示的捕获在产生停止条件之前似乎具有额外的时钟脉冲、这对我来说有点有趣。 此外、该捕获似乎是读取事务、因为我们看到了 NACK。 最好在写入事务上验证停止条件、并且希望没有该额外的时钟脉冲。
我们能否检查器件的 Vcc 斜坡速率? (在示波器上执行此操作)当 PCA 器件加电速度太慢或从高于 GND 的参考点加电时、我发现 PCA 器件存在问题。
-Bobby
我认为、糟糕的斜坡功率导致了这种行为、这是完全合理的。 我同时使用公母跳线来启用/禁用板载稳压器以进行调试、这是一种非常松散的拟合、我认为在我断开它们时会弹跳。 我可以观察到稳压器在尝试斜升时打开和关闭、但使能会再次将其关闭。
但是、我无法使寄存器读取失败、因此它可能与该和/或我的 i2c 代码有关。 我会不断检查、但现在除非您有任何其他建议、否则我认为我们可能会有合理的答案。
您好 Jason、
很高兴看到您现在在执行写入操作后获得了正确的读取。 我在发现加电不良时看到了我们的设备的问题、通常是在我们的 PCA 设备上。 我们较新的引脚对引脚 TCA 器件具有更宽松的电源定序斜坡速率。
对于 INT、您是否在探测9545A 的 INT 输入之一或引脚17上的输出 INT? 如果您不执行前一个操作、能否在引脚17 INT 上放置一个探头以验证其是否正确地将低电平置为有效?
此外、您是否有 Vcc 斜坡速率的范围(使用 o 范围)?
-Bobby