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.

[参考译文] TCA8418:用于GPIO模式的TCA8418

Guru**** 2481465 points
Other Parts Discussed in Thread: TCA8418

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/662355/tca8418-the-tca8418-for-gpio-mode

部件号:TCA8418

在数据表8.6 GPIO,GPIO 2.8 数据状态寄存器GPIO _DAT_STAT1–3 (地址0x14–0x16)中,有"这些寄存器在读取输入和输出时显示GPIO状态。 阅读两次以清除它们"。这是否意味着我无法读取GPIO状态超过两次?现在我在Linux中执行了这些操作。

1.

错误= TCA8418_write_byte (CHIP,REG_KP_GPIO1,0);
错误= TCA8418_write_byte (CHIP,REG_KP_GPIO2.0);
错误= TCA8418_write_byte (CHIP,REG_KP_GPIO3,0);

二.

错误= TCA8418_write_byte (CHIP,REG_GPIO _DIR1,0);
错误= TCA8418_write_byte (CHIP,REG_GPIO,DIR2,0);
错误= TCA8418_write_byte (CHIP,REG_GPIO _DIR3,0);

然后,当我读取reg 'gPIO_DAT_STAT1',时,我总是得到 一个固定的数字,像0xbf,即使 我通过3.3V或具有10k 电阻的GND更改GPIO电平。

所以,任何人都可以告诉我,当我只想在gpiomode中使用TCA8418时,我应该如何初始化它,以及如何获取或设置GPIO值。

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

    我认为您看到的错误是代码问题。 遗憾的是,我们的团队不支持设备的软件端,因此我无法为您提供这方面的更多信息。尽管您似乎能够获得ACK,因为您可以阅读。 也许您的写功能的地址是错误的?

    "这是否意味着我无法读取GPIO状态超过两倍?"
    -您仍应能够读取GPIO状态,但在两次读取后很可能会清除该状态。

    请注意,"REG_GPIO _DIR"寄存器是默认的0或输入,因此您不需要写入这些寄存器。

    “然后,当我读取reg 'gPIO_DAT_STAT1',时,我总是得到一个常量的数字,像0xbf,即使我通过3.3V或具有10k电阻的GND更改了GPIO电平。”
    我认为此处的数字是锁定的,因为"REG_KP_GPIO "寄存器处于键盘模式,需要处于GPIO模式。 也可能是因为设备在启动时启用了GPIO上的内部上拉。

    您能否提供一个我们可以仔细检查的示意图?

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

    我使用 示波器获得I2C SDA线。

    首先,我发送commod " tca8418_write_byte (chip,REG_KP_GPIO1,0)"

    然后我可以得到 以下波形

    因为我的示波器是一个单通道,所以这两幅图片是 由我合成的。   

    我 能不能证明I2C通信在整个过程中都是正常的?

    当我读取寄存器 GPIO _DAT_STAT1,时,我可以获得 以下波形:

    你可以看到从属设备不是一次响应的,当我把寄存器地址发送给从属设备时,这些设备也不是ACK。所有的读取 现象 在关于读取寄存器的数据表中都是不同的,就像这样

    所以,你能告诉我,为什么我在阅读注册时没有ACK。谢谢。

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

    您好,

    从您所展示的SDA/SCL的范围截图,我相信我可以确定发送和接收的内容:

    第一条消息是0x34h R/W'=Write ACK

    第二部分是0x1Dh ACK

    第三部分是0x00h ACK,然后释放I2C线路。

    由此看来,您可以成功写入寄存器,因为所有三种情况都有ACK。 所以我不明白为什么在软件中它告诉你有一个错误。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    你的第二张O型示波器图片,我无法读取数据,因为SCL线不是供参考的,我可以从旧图片中看到,ACK显示在主释放SDA线之后,因此有一个小的峰值。 图片的前半部分只有一个小的峰值,表示设备ACK的地址,而不是寄存器ID。

    我们是否可以在您向另一个寄存器(如0x04h或0x1D)写入后尝试确认读取功能正常?

    谢谢!

    -Bobby

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

    这是图片,当我读取寄存器gPIO_DAT_STAT1。时

    这里是否有任何异常?

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

    在图片的前半部分,您写入0x34h,然后写入0x14h,您将获得两者的ACK。 但是,时钟信号会挂起,而不是释放SCL线路。 这可能是状态机的问题,因此最好是执行停止条件,然后再次执行启动条件以继续尝试读取。

    信号的下半部分对我来说有点难读,但看起来您正在使用读取位再次发送地址0x34h,然后接收0xAF (对我来说有点难读)。 我确实看到,在最后一个时钟周期,看起来主机正在处理,但随后您会执行一个停止条件,这可能会使状态机出现故障,因为它应该是一个nack和停止条件,而不是ACK和停止条件。 这可能是您看到GPIO_DAT_STAT1被卡住的原因。 您是否能够发送nack,然后在参考GND/Vcc (参考所有输入到GND)后再次尝试读取?

    -Bobby

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

    高兴的是,我终于可以使用双通道示波器。,当我读取寄存器 GPIO DAT_STAT1时,我可以看到图片

    然后,我  将整个波形分为三部分,我将整个波形分为三部分,并将它们分别放大以便您观察。

    上半场

    下半场

    和上半场

    请告诉我,    这些图片中是否有任何异常波形?

    或者,我可以直接参考您的最后答复?

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

    您好,

    新的波形对我来说更容易阅读(谢谢)。 它确实与您在上一张图片中看到的一样,值为0xEFh,这表明您将行4引脚保持在低位。 您不是这样做吗? 新波形在您接收到良好的数据后,看起来就像您是NACKing。

    在第一个ACK之后的第一个波形中,有一个小的“小故障”,它看起来像ACK释放SDA线的从属设备,然后在一小段时间后主设备将其拉低。 这看起来不会给您带来问题,因为我们在SCL行的高周期中对数据进行采样。

    我在您的上一篇文章中看到,您的设备似乎按您预期的方式工作,您是否进行了任何更改以使其正常工作?

    谢谢!

    -Bobby

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

    感谢您的帮助,昨天我将I2C总线速度设置为400kHz,但我认为这可能不是主要原因。也许起初我对芯片不够谨慎。

    关于读取两次以清除它,IIS可能意味着读取两次,寄存器将被芯片更新。

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

    感谢您再次与我们联系,了解您如何解决问题。 我已将您的最后一篇帖子标记为已解决的声明,以便其他人在遇到类似问题时参考。

    "关于读取两次以清除它,IIS可能意味着读取两次,芯片将更新寄存器。"
    这可能意味着可能有两个触发器连接到用于在按下和释放按钮时进行监控的输入。

    再次感谢,
    -Bobby