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:输入端口寄存器仅针对输入定义的端口返回不正确的数据

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports

器件型号:TCA6408A

工具与软件:

您好!

我们通过 以下方式使用 TCA6408ARGTR:

当我们读取输入端口寄存器时、配置为输出的五个端口将返回正确的数据。

配置为输入的三个端口将返回错误的数据。

我们将读取输入寄存器。 8位。 一个 I2C 读取命令

对于五位(五个输出端口)、读取成功。

同一个读取操作在三个输入端口上返回错误的数据。

有人可以帮助吗?

谢谢!

吉尔

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

    尊敬的 Gil:

    读取输入端口寄存器会反映引脚上输入的逻辑值、是逻辑高电平还是逻辑低电平。  

    当您说数据不正确时、I2C 数据回读操作不会反映实际 IO 上的逻辑状态? 您是否能够通过测量 GPIO 引脚上的电压来确认这一点、以确保电压电平与 I2C 总线数据读回的逻辑1或0匹配?  

    此致、

    Tyler

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

    您好、Tyler:

    我在 GPIO 上测量了电压、I2C 输入寄存器读取结果并没有反映我在三个输入端口上测量的值。

    这正是您写的内容。

    相同的 I2C 读取会给出五个输出端口的正确数据(即输出 FF 上的数据)。

    我放在那里的串联电阻可能存在问题? (我放置它们是为了在三个输入端口被定义为输出时不会发生争用)。

    什么原因会导致此类问题?

    谢谢!

    吉尔

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

    您好、Tyler:

    我绕过了三个串联电阻。

    将3.3V 直接连接到输入端口。

    输入端口寄存器读取:提供五个输出位的正确数据。 为三个输入端口提供了错误的数据。

    我还实验了向输出端口寄存器写入8位、并查看位4-6是否反映在输出引脚上(查看配置寄存器是否正确配置)。 写入不影响输出4-6。

    我们在这里遗漏了什么?

    谢谢!

    吉尔

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

    您好、Tyler:

    您是 TI 员工吗?

    您是否可以采用 TCA6408A 评估板、将某些引脚定义为输入、对其施加一些电压、然后查看您是否可以正确读取它们?

    谢谢!

    吉尔

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

    尊敬的 Gil:

    是的、我是 TI 员工。 您可以根据点旁边的标识进行判断。  

    输入端口寄存器读取:提供五个输出位的正确数据。 为三个输入端口提供了错误的数据。

    您能否在通道1 = SCL 且通道2 = SDA 的示波器上显示对输入端口寄存器的 I2C 寄存器读取?  

    在您的代码中、可以读回每个寄存器设置的值吗?  

    输入端口:十六进制

    输出端口:十六进制

    极性:十六进制

    配置:十六进制

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5477598 #5477598"]您是否可以采用 TCA6408A 评估板、将某些引脚定义为输入、对其施加一些电压以及查看您能否正确读取这些引脚?

    这对我来说是可能的,但让我们做更多的挖掘. 此器件已在市场上推出多年。 读取输入端口寄存器是该器件的常见用例之一、我从没见过客户遇到过类似的问题。  

    您是否尝试过 A-B-A 换用? 换用新的 TCA6408A (不良)、以查看问题是否会在两个器件上重复出现?  

    这也是对焊接进行二次检查的好时机。 我看到客户的焊点意外使多个引脚短路、这可能会导致多个引脚读取不良。  

    此致、

    Tyler

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

    您好、Tyler:

    对于延迟、我们深表歉意。

    我们使用 I2C 主设备(Xilinx FPGA I2C 控制器)"固定"了 I2C 读写序列、因此完全符合要求。

    回答您的问题:

    1.我们把芯片示波器放在 FPGA 内部、里面有 I2C 的控制器 IP。

    它显示的数据是软件读取的数据。

    这不像放置示波器探针、但它与示波器探针非常接近。

    2. TCA1608A 寄存器:

    寄存器按照配置的方式进行读取。

    配置0x70

    极性0x00

    输出0x8B

    输入0xFB -这就是我们的问题:D4、D5、D6不应该为111。

    其中一个应为0。

    我们如何正确读取其他三个 TCA6408A 寄存器、但输入寄存器总是在 D4-D6上给出错误的结果?

    3.我们没有更换"故障"设备。

    但是、我们从多个电路板中读取相同数据。

    而不是具体的器件。 这是至少三个板/器件的通用部件。

    4.有些位/端口读取正常、有些不正确。

    它似乎不是焊接问题。

    我还尝试在这些输入引脚上硬接线逻辑电平(3.3V 和 GND)。

    无论如何、读取的数据都是相同的。

    5.我尝试写入输入端口,看看数据是否输出到引脚。

    测试器件是否正确接收到端口配置。

    负。

    查看数据表中的图8-2 P0至 P7的简化原理图、当您读取输入端口寄存器时、所有端口都经过称为输入端口寄存器的相同触发器。 每个端口都有该 flop。 无论端口是输入还是输出、都没有关系。

    当它是一个输入端口时、Q1/Q2被禁用、并且端口直接连接到该触发器。

    当它是一个输出端口时、Q1/Q2被启用并且它们的状态(VCCP 或者 GND)进入那个触发器。

    输出端口读取正常而输入端口读取正常没有意义。

    所有八位均会转至输入端口寄存器、并作为 I2C Rx FIFO 中的字节进行读取。

    这里有些奇怪。

    这是 I2C 读取命令。

    I2C 读取序列是否可能有问题、从而可能导致器件对输入端口和输出端口读取的响应有所不同(时间可能是明智的)?
    也许需要一些延迟、以便逻辑正确响应并禁用 Q1/Q2?

    在写入路径中、我感觉内部某种东西会使读取端口/位流入输入端口寄存器触发器和输入端口寄存器数据的流中断。

    谢谢!

    吉尔

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

    您好、Tyler:

    另一个想法:

    当您向输出、极性和配置寄存器进行写入时、写入"结果"将在相应的触发器(图8-2中的 DFF)上输出、并进入相应的寄存器(输出、极性和配置)。 这是在写入时完成的。 因此、当您读取这些寄存器时、信息已经在那里。

    当您读取输入端口寄存器时、数据被计时、并在读取时进入输入端口寄存器。

    数据路径略有不同。

    那么、我们是否应该以不同的方式定义 I2C 控制器(Xilinx FPGA)与 TCA6408A 之间的 I2C 总线时序、以适应这种情况?

    谢谢!

    吉尔

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

    尊敬的 Gil:

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503310 #5503310"]

    1.我们把芯片示波器放在 FPGA 内部、里面有 I2C 的控制器 IP。

    它显示的数据是软件读取的数据。

    这不像放置示波器探针、但它与示波器探针非常接近。

    [报价]

    理解。 我想从模拟的角度来看看上升/下降、VOL / VOH、VIL/VIH、电平是否都足够了。  

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503310 #5503310"]

    2. TCA1608A 寄存器:

    寄存器按照配置的方式进行读取。

    配置0x70

    极性0x00

    输出0x8B

    输入0xFB -这就是我们的问题:D4、D5、D6不应该为111。

    其中一个应为0。

    我们如何正确读取其他三个 TCA6408A 寄存器、但输入寄存器总是在 D4-D6上给出错误的结果?

    [报价]

    配置= 0x70 = 0b01110000

    P7 = P3 = P2 = P1 = P0 =配置为输出

    P6 = P5 = P4 =配置为输入

    极性= 0x00、因此没有引脚逻辑反转。  

    输出= 0x8B = 0b10001011

    P7 = P3 = P1 = P0 =输出高电平逻辑

    P2 =输出低电平逻辑

    P6、P5、P4不受影响、因为这些引脚配置为输入  

    输入端口寄存器= 0xFB = 0b11111011

    P7 = P6 = P5 = P4 = P3 = P1 = P0 =高电平

    P2 =低电平

    从该数据中可以看出、必须通过另一个输出或通过连接到 VCC 的上拉电阻器从外部将输入 P6、P5、P4拉至高电平。  

    P7、P3、P1、P0也应读取为高电平、因为这些引脚已配置为输出高电平。

    P2应该为零、因为该引脚被配置为唯一的输出低电平。  

    请告诉我这里是否缺少某些内容、因为输入端口寄存器0xFB 似乎正确。  

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503310 #5503310"]

    3.我们没有更换"故障"设备。

    但是、我们从多个电路板中读取相同数据。

    而不是具体的器件。 这是至少三个板/器件的通用部件。

    [报价]

    明白了。 我们尝试进行 A-B-A 交换作为快速测试、以查看将 IC 从板切换到板时 IC 是否出现错误/问题。  

    这有助于确定板对板问题或 IC 特定问题。  

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503310 #5503310"]

    4.有些位/端口读取正常、有些不正确。

    它似乎不是焊接问题。

    我还尝试在这些输入引脚上硬接线逻辑电平(3.3V 和 GND)。

    无论如何、读取的数据都是相同的。

    [报价]

    检查我对您问题的回答2. 如果引脚配置为输出并且它正在输出某种类型的逻辑、则施加3.3V 或 GND 的外部电压可能会导致电源到 GND 短路。 这可能会损坏器件。  

    [报价用户 id="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503310 #5503310"]

    5.我尝试写入输入端口,看看数据是否输出到引脚。

    测试器件是否正确接收到端口配置。

    负。

    查看数据表中的图8-2 P0至 P7的简化原理图、当您读取输入端口寄存器时、所有端口都经过称为输入端口寄存器的相同触发器。 每个端口都有该 flop。 无论端口是输入还是输出、都没有关系。

    当它是一个输入端口时、Q1/Q2被禁用、并且端口直接连接到该触发器。

    当它是一个输出端口时、Q1/Q2被启用并且它们的状态(VCCP 或者 GND)进入那个触发器。

    输出端口读取正常而输入端口读取正常没有意义。

    所有八位均会转至输入端口寄存器、并作为 I2C Rx FIFO 中的字节进行读取。

    这里有些奇怪。

    这是 I2C 读取命令。

    [报价]

    输入端口寄存器是"只读"寄存器。  

    但是、从输入端口寄存器读取的数据应该准确地反映 P0-P7引脚上的逻辑电平。 这包括来自配置为输出的引脚的逻辑。  

    配置为输出的引脚应反映与 Px 引脚的输入端口寄存器的读取操作相同的逻辑。 但是、如果将该引脚配置为输入、则会反映应用于该引脚的外部逻辑、因为 Q1和 Q2输出晶体管被禁用。  

    [报价 userid="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5503420 #5503420"]

    当您向输出、极性和配置寄存器进行写入时、写入"结果"将在相应的触发器(图8-2中的 DFF)上输出、并进入相应的寄存器(输出、极性和配置)。 这是在写入时完成的。 因此、当您读取这些寄存器时、信息已经在那里。

    当您读取输入端口寄存器时、数据被计时、并在读取时进入输入端口寄存器。

    数据路径略有不同。

    那么、我们是否应该以不同的方式定义 I2C 控制器(Xilinx FPGA)与 TCA6408A 之间的 I2C 总线时序、以适应这种情况?

    [报价]

    对于第一个点、数据是通过配置寄存器配置为输出的引脚的数据。 任何配置为输入的引脚都为高阻态、并且根据连接的对象从外部驱动为高电平或低电平。 这可以是上拉、下拉电阻、或者一些其他外部偏置。  

    发出读取命令后、DFF 就会计时。 如果输入引脚上的电压高于 VIH、则 DFF 将在读取输入端口寄存器时计时为"1"。 如果输入引脚低于 VIL 电压、则 DFF 将在读取输入端口寄存器时钟传入"0"。  

    此致、

    Tyler

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

    您好、Tyler:

    输入端口寄存器给出0xFB。

    D4-D6没有外部上拉或 Vcc 连接。  

    D4-D6是输入。 其中一个位为低电平(驱动该位的外部逻辑的输出)。 但是、这不会反映在我读取的0xFB 上。

    我还尝试将其中一个 输入端口连接到 GND。 我没有看到输入端口寄存器数据上的低电平。

    这是我的问题。

    我在这里遗漏了什么?

    关于我的消息、首先是"另一个想法"(您也回答了):
    我了解该机制。
    我之所以指出这一点、是因为从输入端口寄存器中读取是通过所有端口的相同触发器完成的。
    因此、如果只有输入端口给出错误(输出端口正常)并且对整个8位使用读取命令、我想知道内部器件逻辑是否以某种方式区分输入和输出端口、这需要在 I2C 读取命令时序中特别注意、以便输入端口正确响应。

    我希望我不要把你和最后一句话混为一谈。

    这让我很困惑、为什么读取其他三个寄存器是正确的、读取输入端口寄存器的输出端口是正确的、只有输入端口寄存器中的输入端口是错误的。

    谢谢!

    吉尔

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

    尊敬的 Gil:

    [报价 userid="326529" url="~/support/interface-group/interface/f/interface-forum/1428451/tca6408a-input-port-register-returns-incorrect-data-only-for-input-defined-ports/5506785 #5506785"]

    D4-D6是输入。 其中一个位为低电平(驱动该位的外部逻辑的输出)。 但是、这不会反映在我读取的0xFB 上。

    我还尝试将其中一个 输入端口连接到 GND。 我没有看到输入端口寄存器数据上的低电平。

    这是我的问题。

    我在这里遗漏了什么?

    [报价]

    我不知道确切的问题。 通过将输入连接到 GND、您应该会看到逻辑状态出现在输入端口寄存器读取中。  

    您是否有任何模拟示波器波形要显示? 要短接至 GND 的 SDA、SCL 和 Px 引脚的示波器捕获。  

    我知道您之前说过、您有一些非常接近此值的内容、但 o 范围捕获将非常清楚此处到底发生了什么。 如果 o 示波器捕获显示的行为与数据表中相同、但仍读取的数据不正确、则我会更怀疑器件故障。  

    然后、为了确认是 IC 故障、我们可以对坏芯片执行 A-B-A 交换并在另一个电路板上测试。 我想您之前在本主题中说过、其他板也具有相同的结果。 那么、这是布局问题吗?  

    您是否从信誉良好的供应商处订购了这些 TCA6408A 器件? 在极少数情况下、客户订购了假冒器件。 去抖的快速方法是查看器件的顶部标记以及您拥有的批次跟踪代码、批次编号等方面的任何信息  

    我之所以指出这一点、是因为从输入端口寄存器读取是通过对所有端口使用相同的 flop 完成的。
    因此、如果只有输入端口给出错误(输出端口正常)并且对整个8位使用读取命令、我想知道内部器件逻辑是否会以某种方式区分输入和输出端口、这需要在 I2C 读取命令时序中特别注意、以便输入端口正确响应。[/QUOT]

    我不能完全理解你在这里的推理,但让我在这里大声说话一会儿。  

    输入端口寄存器 DFF 和输出端口寄存器 DFF 是独立的。  

    对于输入端口寄存器读取错误、与设置输出端口寄存器然后读取输入端口寄存器相比没有意义。 这两种场景都应该适用、因为它们在这两种场景中使用相同的 DFF 输入端口寄存器。  

    输入端口寄存器 DFF 用于读取应用于输入引脚的外部逻辑、以及应用于 Q1或 Q2晶体管的逻辑(根据输出端口寄存器的内容拉高或拉低)。  

    我能想到的唯一极端情况是、例如、如果在输出端口寄存器上设置了逻辑1、但 Px 引脚接地(GND)、并且不知何故未违反 IOH (abs max)、则输入端口寄存器读取值为0而输出端口寄存器读取值为1。 我认为不会发生这种情况、因为这很可能会由于引脚上的过流(例如 VCC 与 GND 之间发生短路)而导致器件损坏。  

    我在这里的想法非常响亮、但总之、我很想在 SDA/SCL (输入端口寄存器的读取事务)范围内看到某种类型的模拟波形、其中一个通道监控输入的引脚电压为 GND'ed.  

    从 SDA/SCL/Px 这三个通道可以证明大量的信息。 如果示波器显示 SDA/SCL 在该引脚明确接地时将其读取为高电平、则我开始分离为实际 IC 发生故障。  

    此致、

    Tyler

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

    您好、Tyler:

    我读了你写的内容。

    有道理。 我也无法知道有五个位被读取正常、三个位没有被读取。

    我们的软件人员完善了 I2C 读取算法、看起来现在运转正常。

    三个输入位不正常的原因似乎 源自产生这些位的电路中的问题、而不是源自 I2C 扩展器本身。

    谢谢!

    吉尔