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.

[参考译文] TCA6408A:从输出寄存器中清除默认1&#39所需的时间

Guru**** 2482225 points
Other Parts Discussed in Thread: TCA6408A

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/675900/tca6408a-time-needed-to-clear-default-1-s-from-output-register

器件型号:TCA6408A

您好!

我在使用 TCA6408A 时遇到了一个奇怪的问题。  根据数据表、我了解在加电时、器件会将所有 IO 配置为输入。  输出寄存器的默认值为全1 (0xFF)。  我要做的是通过写入输出寄存器将输出配置为全0 (0x00)、我希望所有 IO 都是输出(使用方向寄存器)。  我已经成功实现了所有这些功能、 我发现、即使我先将输出寄存器设置为(0x00)、然后将方向寄存器设置所有 IO 写入输出-我仍然会在所有 IO 上看到100us 的电流、这些 IO 变为高电平。  似乎 TCA6408A 忽略了接收 I2C 写入的顺序、接下来将设置输出方向、然后将我的0x00值应用于输出寄存器。

我已经能够解决这个问题、方法是先将0x00写入输出寄存器、然后对输入寄存器执行"虚拟"读取(只是引入一些延迟)、最后写入方向寄存器以将所有 IO 配置为输出。

我的问题:为什么我需要介绍写入输出寄存器和写入方向寄存器之间的延迟、以便部件在方向开关时实际将我想要的值输出到 IO 线路上?  读取输入寄存器的延迟是否保证有足够的时间来确保输出寄存器在我将所有 IO 切换到输出时保持稳定?

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

    您好、Cochise、

    当您进行设置时、是否先将输出设置为0、然后启动停止条件、再将配置(方向)寄存器设置为输出、再启动停止条件?

    您的端口引脚是否悬空或是否通过下拉电阻器拉低? 否则、您可能需要添加一个下拉电阻器。

    您是否还可以在尝试设置器件时发布 SDA/SCL 的示波器截图? (当您看到100us 鞭子时、示波器快照应显示写入事务)。

    "我的问题:为什么我需要在写入输出寄存器和写入方向寄存器之间引入这种延迟、以使器件在方向开关时在 IO 线路上实际输出我所需的值?"

    您的延迟情况与有关键盘扫描仪问题的另一个问题类似。

    在 POR 案例之外、我没有太多的客户在 GPIO 中遇到这种行为。

    '读取输入寄存器的延迟是否保证有足够的时间来确保输出寄存器在我将所有 IO 切换到输出时保持稳定?'

    我想知道您是否在停止和启动条件之间为器件提供了足够的延迟。 I2C 标准规定了停止和启动之间的总线空闲时间。

    谢谢、

    -Bobby

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

    Bobby、

    感谢你的答复。  根据您的建议、我决定使用 I2C 流量来尝试确定我是否遵守 I2C 协议。  我似乎是。  在开始下一个写入之前、我将用 Stop 结束每次写入。  此外、在停止和启动之间、我有10.1us 的总线空闲时间、这已经足够了、因为我以400kHz 的频率运行。

    但是、我注意到的是、即使我的代码首先写入输出寄存器、然后写入方向寄存器-这不是在硬件级别发生的情况。  相反、我现在看到方向寄存器先写入、然后写入输出寄存器。  100us 的 bloip 实际上是从方向寄存器写入的停止条件到输出寄存器写入的停止条件的时间量。  因此、TCA6408A 运行似乎没有问题。  它按照 I2C 总线上的顺序执行所有操作。

    此外、我在加载了在输出寄存器写入和方向寄存器写入之间添加虚拟读取的代码后查看了 I2C 流量、发现该代码起作用、因为它实际上首先写入输出寄存器、执行读取、 然后写入方向寄存器...  现在、我需要弄清楚、当在方向寄存器和输出寄存器之间没有插入虚拟读取时、导致软件编译的原因是什么... 但这不再是 TI 关注的问题。

    很抱歉、当 TCA6408A 侧出现问题时、"调用 wolf"。

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

    感谢您就此问题与我们取得联系。 很高兴看到您能够在此处调试该问题。 我相信其他搜索此问题的人也会发现此问题非常有用!

    再次感谢、
    -Bobby