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.

[参考译文] PCF8574:当位0 = 0时、PCF8574和 PCF8574A 向 Tiva 处理器发送 I2C ACK 失败

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1312414/pcf8574-pcf8574-and-pcf8574a-failing-i2c-ack-to-tiva-processor-when-bit-0-0

器件型号:PCF8574
主题中讨论的其他器件:TM4C129ENCPDTP82B715

我将在 TIRTOS 下使用 TI 驱动程序来写入 PCF8574和 PCF8574A 器件。

TM4C129ENCPDT 处理器、正在使用可用于该处理器的最新 TIRTOS。

写入操作始终有效、但回调函数并不总是返回真。

如果我在 IO 扩展器的位0中写入1、我总是得到返回 true。

但是、如果我向位0写入0、某些器件将始终从驱动程序返回错误状态。

一些器件基本上每次都会发生故障、而其他器件则是间歇性的。

写入本身始终有效、并且输出已正确激活、但未检测到 ACK、因此 TI 驱动程序返回未成功的传输。

由于我希望能够检测芯片何时存在、这会导致问题、因为我无法检测到缺少芯片与芯片由于位0为0而没有响应之间的差异。

我注意到其他人在堆栈溢出中报告了类似的问题、但没有提供解决方案。

在 CRO 上看起来好像有一个 ACK、但有时会延迟、当位0为0时、这在位0为1时非常一致。

可以对驱动程序进行任何调整以允许更长的 ACK 延迟、还是这在硬件中固定。

100kHz 或400kHz 时都会出现问题、因此与 I2C 总线速度无关。

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

    您好、Barry、

    我不熟悉我们的 TI-RTOS MCU 系统以及它附带的 TI 驱动程序。 我假设、如果驱动程序来自 TI、我们就已经测试了 I2C 驱动程序与100kHz 和400kHz I2C 运行兼容。  

    由于改变速度不会影响结果(主要是上升时间)、我会怀疑这可能是逻辑电平问题、上拉可能太强? 我们是否有可以帮助我们分析您设计的 I2C SDA 和 SCL 波形的原理图和示波器捕获?  

    你是否偶然地拥有了你提到的堆栈溢出线程的超链接? 或许我可以更详细地了解一下我们在这里所处理的问题。  

    此致、

    泰勒

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

    您好,Tyler

    堆栈溢出 POST 为:

    I2C - PCF8574不发送 ACK -栈溢出

    我使用完全相同的 I2C 硬件和相同的2k7上拉电阻来连接闪存、一根线、Mac 地址芯片和用作从设备的 STM32处理器。

    所有这些工作都是始终可靠的,而且已经做了多年。

    我之前在其他设计中使用过 PCF8574、但这些设置忽略了任何错误、因为写入操作会实际工作、此应用需要报告故障。

    我将在星期一尝试获取一些 CRO 信号。

    我想只修改 TI I2C 驱动程序、以便我可以在器件破坏地址字节时进行标记(这始终在发生)、并且仅在地址未堆叠时报告错误、而不是在数据字节未堆叠时报告错误。

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

    我忘了在输出写入时进行了反转设置(我们的软件配置设置之一)。

    当位0 = 1、而不是位0 = 0时、会发生错误

    我无法上传图片、它说它不喜欢这个 URL、所以这里有拖箱链接、希望对您有用。

    以下是位0 = 0且 ACK 正常运行时的跟踪

    https://www.dropbox.com/scl/fi/qb8yw4flx42mxmb56cy28/I2C_bit0_ok.png?rlkey=vgukpenatg2yeb2zq0v88pjqi&dl=0

    但是、当位0 = 1时

    https://www.dropbox.com/scl/fi/fgz8dm26mefvek38wr3vl/I2C_bit0_err.png?rlkey=g2dcooyy6cfgkvx97wan5igrc&dl=0

    我始终会从 I2C 驱动程序中失败、

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

    你好

    我做了进一步检查、发现此问题似乎与 P82B715线路扩展器有关。

    PCF8574缓冲器位于82B715的对之后。

    路径是处理器至82B715、短接至另一个82B715、然后是 PCF8574。

    我捕获的布线来自 PCF8574侧、看起来很好。

    但是、当我查看处理器的"S"侧时、ACK 信号根本没有拉低、大约为1.4V。

    所有器件的电源均为3.3V、处理器"S"侧的上拉电阻为1K、"L"侧的上拉电阻为270R、PCF8574上的上拉电阻为4k7。

    我发现简单的粘贴适用于图像,而不是插入图像按钮。

    这是 PCF8574上的信号、

    然后、在两个82B715之间的线路上发出信号(每个上有 L 信号)

    最后、82B715的 S 输出

    可以看到 ACK 信号不会靠近接地端。

    我 将进一步检查、然后更新、将 CPU 上拉电阻更改为10k 没有区别。

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

    我将线路上拉从270R 更改为1K、这种情况运行得更好、但是 I2C 上的另一个外设器件(在本例中为 STM32处理器)之间有明显的区别。

    在这里、您可以看到 ACK 在 CPU 端低得多。

    与 PCF8574的对比

    您可以看到 ACK 在 CPU 端高得多。

    因此、我现在使其可以工作、但需要对 PCF8574使用不同的电阻值、与其他器件相比。

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

    μ I²C 规范要求 SDA 上的上拉电流为最大3 mA。 在这种情况下、确保 PCF8574将线路拉至低于0.4V。

    因此、使用3.3V 电源时、有效上拉电阻必须至少为1.1 kΩ。 是否有多个并联的上拉电阻器?

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

    感谢您的回答。  

    是的、有并联电阻器、并且对于18mA 总灌电流、并联阻抗为175R。

    但是、 82B715的作用是扩展 I2C 的功能、允许更长的线路长度、它通过增加可在线路侧从3mA 驱动到30mA 的电流(乘以10)来实现这一点。  

    在数据表中:  

    ×具有10m Ω 低阻抗的总线布线、从而改善抗噪性

    P82B715是用于缓冲高容性 I2C 总线系统的器件、它支持通过 I2C 总线进行双向数据传输。 P82B715缓冲 I2C 总线上的串行数据(SDA)和串行时钟(SCL)信号、并允许扩展 I2C 总线、同时保持 I2C 系统的所有运行模式和特性。

    我希望这应该是与器件侧接收端的线性关系、而不是在器件侧强加相同的30mA 要求。

    对于3.3V 电压操作、数据表在器件端引用了2.6mA 和24mA 灌电流、因此所使用的电阻器不会有问题。  对于此特定操作、我不需要完整24mA、因此可以更改电阻器。  数据表还指出、30mA 线路应在3mA 器件侧下拉、而在器件侧的3mA 应在线路侧产生30mA。   

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

    "对不起,我也没想到会被你撞见的。"

    当 PCF 拉低时、它会通过自己的上拉电阻吸收所有电流、并通过其他上拉电阻吸收十分之一的电流。 因此、它看到3.3V / 4.7 kΩ+ 3.3V /(10 × 270 Ω)+ 3.3V /(10 × 1 kΩ)= 2.25 mA。 这应该是可以的。

    PCF 最多输出0.4V、但每个 P82B715都增加了30 Ω 电阻器的压降。 I²C Ω 线路上是否有任何其他串联电阻器或开关/多路复用器?

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

    因此、30R 说明了升高的电平、有一个100R 串联电阻作为保护电路的一部分。