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.

[参考译文] PCA9545A:控制寄存器状态始终显示通道0为禁用状态、即使通道0工作正常也是如此

Guru**** 2381930 points
Other Parts Discussed in Thread: PCA9545A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1025526/pca9545a-control-register-status-always-showing-channel-0-as-disabled-even-when-it-is-clearly-working

器件型号:PCA9545A

我已经使多路复用器完全运行并使用了几周、但现在我正在准备编写实际接口。 我想从多路复用器中读取状态以进行中断和确认总线已启用。 即使我通过 WRITE 命令成功启用了总线0、对其进行回读也始终会为位0提供0。 我觉得在写操作后读回寄存器的速度可能太快、所以我有第二次读操作、但值没有改变。

正如您在捕获中看到的、一旦收到命令、总线就会变为活动状态。 但即使发送0x09也会在读取寄存器时返回0x08。

它不是处理器端、时序是干净的。 我已经使用总线0几周了、现在可以读取各种其他器件。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    奇怪的是现在正在工作。 断电与复位之间是否存在差异? 在关闭电路板电源后、它现在可以在重新加电后可靠地工作。 每次运行代码时、我都会重置芯片、因此我想如果是一个错误状态、重置就可以解决。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想不是这样。 似乎完全不一致。 有时我从寄存器获得正确的状态、有时我不会。 我尝试包括写入和读取之间的延迟、但没有效果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jason、

    工程师已收到此主题的通知、并将立即作出响应。 感谢您的耐心等待。

    此致、

    Eric Hackett  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jason、

    您能否发布原理图供我们审阅?

    您能否在范围热(不是逻辑分析仪)上向我展示0x01h 器件的写入事务、然后在写入0x01h 后再次显示一次器件读取事务。  

    我还想验证该器件是否为 TI PCA9545A?

    编辑:您还能验证此器件在 I2C 总线上的地址是否唯一?  

    谢谢、

    -Bobby

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、器件是 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"]在读取/写入状态寄存器时是否缺少计时限制?

    我们的器件与竞争对手的一个区别是、我们的器件需要一个停止条件(而不是重新启动)才能执行写入命令。 这看起来不像问题、因为您的通道已启用。  

    [引用 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、这看起来是正确的、器件会同时确认这两个字节。  
    但我看不到停止条件。 我建议进行双重检查以验证它是否正确执行。

    [引用 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 为高电平、SCL 变为高电平、停止条件看起来并不正确。 我们应该看到处理器释放 SCL 为高电平、同时 SDA 为低电平、然后 SDA 在经过一些延迟后变为高电平(延迟时间是 I2C 标准中规定的)

    我们能否仔细检查您的停止条件是什么样子、以及它们是否在 I2C 写入结束时正确完成?

    -Bobby

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    i2c_mux_rst 的 MCU 默认引脚状态为高电平、但它们都由相同的+3.3电源轨驱动。 可能一个器件的导通速度更快、但我敢肯定、在所有情况下、它都是多路复用器(Atmega 和多路复用器之间)。

    我将查看停止条件。 可能是问题、我不熟悉该规格、因此我也将对此进行研究。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为示波器捕获没有足够的捕获显示停止。 在图像中、您抓取的是释放 SDA 的主器件、并等待发生在右侧边缘附近的 ACK。

    回到逻辑捕获、这里是停止条件、您可以在这里看到 SCL 释放第一个。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 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 尝试发出更多时钟、这是一种与总线空闲的竞争状态。 在短期内、我编写了一些基本代码来执行 i2c 传输。 去除额外的位、我仍然会看到行为。

    我将在这个周末尝试探测 VCC、然后我认为需要拔出另一个电路板来进行此测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jason、

    您的基本代码似乎在写入和读取事务之间执行重复起始条件。  

    您能否修改代码以在此处执行适当的停止条件而不是重复启动?  

    -Bobby

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我看到我在那里做了什么、我不小心把它处理为一个寄存器读取。 我修复了库。 它不再发送额外的时钟、请参阅下文。

    此库通过重置 i2c 总线来开始 i2c 事务、您可以在开始之前在此处看到该总线。 这不会导致出现任何问题?  

    它在这个捕获中工作、如果我能找到一个很好的方法、我将尝试一些功率周期、并在 VDD 上获得一个探针。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为、糟糕的斜坡功率导致了这种行为、这是完全合理的。 我同时使用公母跳线来启用/禁用板载稳压器以进行调试、这是一种非常松散的拟合、我认为在我断开它们时会弹跳。 我可以观察到稳压器在尝试斜升时打开和关闭、但使能会再次将其关闭。  

    但是、我无法使寄存器读取失败、因此它可能与该和/或我的 i2c 代码有关。 我会不断检查、但现在除非您有任何其他建议、否则我认为我们可能会有合理的答案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经从器件中获取了正确的总线编号、现在我正在测试中断、但我没有得到这些中断。 当 INT0线路被驱动为低电平(ext_I2C_IO_0)时、我的 MCU 会中断、并检查多路复用器以查看哪个总线抛出中断。  

    中断和总线通信之间的时间为750us。

    我还没有检查第二个板。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jason、

    很高兴看到您现在在执行写入操作后获得了正确的读取。 我在发现加电不良时看到了我们的设备的问题、通常是在我们的 PCA 设备上。 我们较新的引脚对引脚 TCA 器件具有更宽松的电源定序斜坡速率。

    对于 INT、您是否在探测9545A 的 INT 输入之一或引脚17上的输出 INT? 如果您不执行前一个操作、能否在引脚17 INT 上放置一个探头以验证其是否正确地将低电平置为有效?

    此外、您是否有 Vcc 斜坡速率的范围(使用 o 范围)?

    -Bobby