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.

[参考译文] TCA9548A:将 TCA9548A 连接到多个 TCA9539器件

Guru**** 2392335 points
Other Parts Discussed in Thread: TCA9548A, TCA9539, TCA9539-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/647391/tca9548a-connecting-tca9548a-to-multiple-tca9539-devices

器件型号:TCA9548A
主题中讨论的其他器件: TCA9539TCA9539-Q1

您好!

我们正在设计一个新系统、其中包括连接到 TCA9548A i2c 开关器件的 FPGA。

FPGA 直接连接到 TCA9548A 的 SCL 和 SDA 引脚。

TCA9548A 的 SC2和 SD2引脚连接到两个(_0、_1) TCA9539器件的 SCL 和 SDA 引脚

请参阅下面的草图。

 

                               --------------- +

                               |                   |

 FPGA            9548A       |     9539_0       |     9539_1

+--- ++----       +|+----     +|+----        +

|   SCL|<-- |SCL      SC2|<-->|SCL   p0|->+->|SCL    p0|<-

|      |      |            |      ||         |          |        ||

|   SDA|<-- |SDA     SD2|<--+->|SDA   P1|->+->|SDA     P1|<-

|      |      |           |    ||  |       |   |   |        ||

+--- ++----       +|+----     +|+----        +

                                 |                 |

                                 --------------- +

FPGA 是 i2c 主器件。

我们需要配置:

TCA9539_0的端口(p0、P1)作为输出和

TCA9539_1的端口(p0、P1)作为输入。

我们希望您对以下步骤提供反馈。

1 FPGA 向9548A 发送一系列数据以启用9548A 的通道2。

2然后、FPGA 将数据发送到9548A 以访问9539_0:

将所有9539_0端口(p0:P00-P07、P1:P10-P17)配置为驱动固定值1的输出。

3然后、FPGA 将数据发送到9548A 以访问9539_1:

将所有9539_1端口(p0:P00-P07、P1:P10-P17)配置为输入。

4然后、FPGA 将读取9539_1的 p0和 p1输入寄存器。

我们认为我们可以将 TCA9548A 中的控制寄存器保留为固定值以启用通道2 (SC2、SD2)。

在 TCA9539-Q1文档(SCPS254B 2014年1月2016年4月修订)的第24页上、

图28显示了 SDA 串行数据读取寄存器的情况。

FPGA 主设备是否可以通过9548A 读取 TCA9539寄存器?

如图28所示、主器件(通过9548A 的 FPGA)需要发送"灰色"位并接收"白色"位。

FPGA 通过9548A 与9539_1通信时是否可以实现这一点?

如果可能、FPGA 主器件读取9539_1中的寄存器的具体步骤(位详细信息)是什么?

提前感谢。

Dave

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

    您好、Dave、

    为了确保我正确理解、您是否计划在同一通道上并联两个 TCA9539? 您为我绘制的图片看起来像是 TCA9539彼此串联、其中9539_0的 p0和 p1充当 SDA/SCL 线路。 如果它们是并行的、这是可以的(假设您为它们提供了不同的地址)、但如果它们是串联的、则不起作用、因为更改输出需要多个字节。

    因此、我将回答假设您并行设置 IO 扩展器的问题。

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

    "1 FPGA 向9548A 发送一系列数据以启用9548A 的通道2。"

    好的

    "2然后、FPGA 将数据发送到9548A 以访问9539_0:

    将所有9539_0端口(p0:P00-P07、P1:P10-P17)配置为驱动固定值1的输出。"

    -您需要先将输出寄存器全部设置为高电平、然后将配置寄存器设置为输出

    "3然后、FPGA 将数据发送到9548A 以访问9539_1:

    将所有9539_1端口(p0:P00-P07、P1:P10-P17)配置为输入。'

    -如果刚通电、则无需使用、因为它们将默认为输入。 如果您愿意、您仍然可以执行此步骤、但您不必执行此步骤。

    "4然后、FPGA 将读取9539_1的 p0和 P1输入寄存器。"

    好的

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

    " FPGA 主设备是否可以通过9548A 读取 TCA9539寄存器?"

    -请注意:FPGA 的输出必须采用漏极开路架构、或者能够配置为具有漏极开路架构。

    -现在、我假设您在询问与 I2C 开关串联的 IO 扩展器的通信是否有任何问题。 只要您确保没有冲突的地址、我就不会看到问题。                                                    

    TCA9548A 可能的地址:                            

    TCA9539可能的地址:

    从上表中可以看出、可能有通用地址、因此您需要注意不要为所有三个器件选择相同的地址。 每个都必须是唯一的。

    "如果可能、FPGA 主器件读取9539_1中的寄存器的具体步骤(位详细信息)是什么?"

    寄存器地址将取决于要读取的端口。 端口0为0x00h、端口1为0x01h。 上面的示例显示正在读取1个字节、然后是一个 NACK 以结束事务、但是、如果主器件 ACK 相反、则您将读取寄存器中的下一个字节。 因此、如果您首先选择寄存器0、但没有启动一个带有 STOP 的 ACK、那么下一个字节将是来自寄存器1的数据。 这是由自动递增功能引起的、并将反复重复寄存器对、直到给出 NACK 和 STOP 条件。 (您将持续读取输入端口0和1、直到您 NACK 和 STOP)。 您可以在 TCA9539第25页的图33中看到这方面的一个示例。

    -Bobby

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

    感谢 Bobby 的回复。

     

    是的、两个9539器件是并联的。

    所有三个器件(9548、9539_0、9539_1)都具有唯一的地址。

     

    关于下面的步骤2,请查看表3“命令字节”,输出端口0和端口1的加电默认值均为1 (高电平)。

    因此、由于我希望 p0和 p1作为输出驱动为高电平、因此我需要做的就是将这些端口配置为输出。

    在将配置寄存器设置为输出(值0x00)之前、我不需要先将输出端口值设置为高电平(它们已经是高电平)。

    是这样吗?

     

    关于下面的步骤4、关键是 FPGA 对 SDA 进行三态处理、以便通过9548A 从9539_1读取响应。

     

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

    Dave、

    "在我将配置寄存器设置为输出(值0x00)之前、我不需要先将输出端口值设置为高电平(它们已经是高电平)。

    是这样吗?"

    -输出寄存器位默认为1,这意味着它们都是高电平。 我认为可以放心地假设您只需将配置寄存器设置为输出(0x00)即可。

    您应该注意的是,写入函数也将具有自动递增函数,这意味着您无需执行停止条件并单独设置配置位,但可以使用4个字节(从地址->命令字节->将数据输入配置寄存器0->将数据输入配置寄存器1)来执行此操作。

    不过、您可以根据需要单独设置配置寄存器。 (不过需要6字节数据)

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

    "关于下面的步骤4、关键是 FPGA 对 SDA 进行三态处理、以便通过9548A 从9539_1读取响应。"

    -我认为我理解您在这里询问的内容,但如果我错了,请纠正我的问题。 您想知道在读取数据时是否会读取正确的值(SDA 拉低或 SDA 为高电平)、因为 FPGA 输入处于浮动高阻态模式。 这不应该是问题、在 SDA 为高电平时、您只会看到上拉电压、而在低电平时、您应该有效地看到在上拉电阻和 FET 下拉的漏源电阻之间有一个分压器。

    唯一需要关注的模式是、如果 PFET 打开(FPGA 推高)并尝试上拉 SDA 线路、 在 ACK 期间、PFET 漏源电阻和收发器 NFET 漏源电阻之间的分压器可能会导致 FPGA 遇到 NACK 问题。 (如果汲取的电流过大、也可能损坏 FET。)

    我希望这对您有所帮助、

    -Bobby