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.

[参考译文] TCA9544A:频道选择问题

Guru**** 2391415 points
Other Parts Discussed in Thread: TCA9544A

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/662688/tca9544a-problem-with-channel-selection

部件号:TCA9544A

您好,

我想使用 TCA9544A与四个光传感器通信。 我想将它用作多路复用器,也用作电平转换器,以便从我的主控的5V I2C到我的从属设备的3.3V电平。 但我无法选择 TCA9544A的信道。 我的师父是ATmega328P。

首先我只想选择通道0

我发送了一个具有地址0x70h和写入位的启动条件

--> i2c_start(MUX_ADR + I2C_write);

之后我想使用0x04h选择通道0

--> i2c_write(MUX_channel_ADR);

之后我设置了一个停止条件,希望与我的光传感器通话

-->i2c_stop();

我尝试调试了一个位,似乎我可以发送启动条件,但它在我要写入寄存器以选择通道的部分的某个位置被卡住。

 

我使用400kHz的I2C时钟频率我是否必须启用快速模式?

 

感谢您的帮助!

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

    嗨,菲利普!

    代码流控制看起来正确,理论上应该工作。 让我们尝试关注硬件以及信号告诉我们的信息。

    在尝试与我们的设备通信时,您能否提供SDA和SCL的示意图(TCA9544A)和示波器图片? 理想情况下,当您尝试发送地址和R/W位时。 这应该让我们更好地了解可能发生的情况。

    "我使用400kHz的I2C时钟频率,我是否必须在某种情况下启用快速模式?"

    -不能,设备将通过查看SCL使用其状态机处理它。

    谢谢!

    -Bobby

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

    嘿,Bobby!

    感谢您的帮助。 不幸的是,我没有Osziloscope来拍摄信号。 但我可以给你们一个原理图。

    主板上有几个跳线可在多路复用器和I2C电平转换器之间切换(这是旧版本的跳线,实际上我不想再使用它了,因为  TCA9544A 应该足够了)。 当我使用多路复用器时,从属侧的0欧姆电阻器没有实现,因此我不使用跳线进行中断,因为我认为上拉电阻应该达到3.3V而不是5V。 但这应该不是问题,因为我还没有使用中断。

    万分感谢您的帮助Bobby

    菲律宾

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

    我看不到您的原理图有任何问题。 我假设当您尝试进行通信时,SDA/SCL和SDA_MUX/SCL_MUX的接头针脚3和2有一个短路/跳线。 您发送的地址在0x70h处显示正确,并与您在软件中声明的内容匹配。

    我认为我们需要范围镜头来更好地了解正在发生的事情。 这样,我们就可以验证发送的数据是否正确,还可以查看我们是否从设备收到ACK。 还可能发生串音,并影响我们I2C线路的信号完整性。 您也可能已将SDA/SCL线路与我们的设备和MCU交换。 如果没有镜头,我只能猜测可能会出什么问题。

    在平均时间内,您可以尝试进行连续性检查,并查看MCU的SDA_MUX/SCL_MUX与SDA/SCL是否确实连接。 我还要仔细检查并查看多路复用器和MCU的GND是否已连接。 然后继续检查这些线是否确实看到了您应该期望的上拉值。 仔细检查IC上的焊接,确保它们已连接到印刷电路板。 INT0-INT3也应向上拉,以便您也要仔细检查。

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

    嗨,Bobby,

    好的,我试着组织一个示波器,然后检查您 提到的其他事项。

    谢谢

    菲利普

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

    嗨,Bobby,

    我试图在PCB上找到错误。 TCA9544A剂量似乎未激活信道。 我可以与它通信,当我阅读它时,它会返回所选信道的正确值。 我组织了一个Oszi并试图确定I2C信号的范围。  

    控制器发出的信号对我来说似乎没问题。 但 多路复用器的另一端没有信号。 电压电平为3.3V,就像应该的那样。

    您有什么想法吗? 多路复用器是否可能已损坏,但不应与它通信?

    祝你好

    菲利普

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

    感谢示波器拍摄。 我看不到任何重大故障或从镜头中发现的异常情况。 虽然时钟信号保持在低水平似乎有点奇怪,但我认为它应该仍然有效,因为你还在得到ACK。

    如果我正确地读取了o范围,您似乎正在为第一个事务进行地址0x70h写入。 然后在寄存器0x07h中写入,这意味着您正在启用通道3 (仅通道3)。 然后重新发送地址,但这次是读取,然后读取地址0x07h。

    "看起来TCA9544A剂量不会激活信道。"
    您如何验证这一点? 您能否将通道3拉至GND (SDA/SCL)并检查SDA/SCL主线路是否也拉至GND?

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

    是的,我只想启用任何信道并重新读取,这样我可以确定我发送了正确的信号。

    我认为该信道未被选中,因为启用该信道后,我会向传感器发送信号。 我可以将正确的信号从控制器中排除,但在多路复用器之后无法确定其范围。 这就是为什么我认为频道可能未激活的原因。

    我尚未尝试启动SCL或SDL。 但我会尝试一下

    谢谢你的帮助,Bobby!

    菲利普

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Philipp:
    您需要在通道实际启动之前生成停止条件。 重复启动或仅空闲不会实际启动寄存器空间中加载的内容。 写入寄存器的过程指南包括这一点,请参阅数据表。
    Francis Houde
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Francis,

    实际上,我在选择通道后生成正常的停止条件。 我的源代码如下所示:

    I2C_START_WAIT (MUX_ADR + I2C_WRITE);

    I2C_WRITE (0x07);

    I2C_REP_START (MUX_ADR + I2C_READ);//设置设备地址和读取模式

    RET = i2c_readNAK();//读取一个字节

    I2C_STOP();

    停止继续后,我尝试与我的传感器通信。 我确信,我的代码是正确的,因为如果我不使用多路复用器,它会被激活。

    祝你好

    菲利普

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

    您好Philipp:

    您需要在写入0x07以控制寄存器后立即生成停止条件。  您会在波形中看到您重复启动(在圆圈中,您需要在此处执行停止条件)。  我认为这是你的问题。  

    如果这可以解决您的问题,或者您还有其他问题,请告诉我。

    Francis Houde