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.

[参考译文] TCA8424EVM-038:运行 HID 时问题

Guru**** 2476165 points
Other Parts Discussed in Thread: TCA8424

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1553403/tca8424evm-038-issues-with-running-hid

器件型号:TCA8424EVM-038
主题中讨论的其他器件:TCA8424

工具/软件:

尊敬的专家:

我的客户正在使用  

https://www.ti.com/tool/TCA8424EVM-038

与 Linux 工具 (I2CTools) 配合使用  

测试这种情况、请参阅直接连接到 MPU 的 TCA。

与外部 3V1 一起提供

然后执行以下步骤:  

i2cdetect -y 1

i2ctransfe -y 1 w2@0x3b 0 -(ACK 收到//总线无问题)  

读取数据:  

i2ctransfe 1 W0@0x3b r30  

此后它收到:  

之后为 11x0x00 和 0xFF。

因此、似乎 11 个字节来自矩阵。

通常首先应该有 HID Describtor、以便之后可以解决这些区域。

 这里做了什么?  

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

    您好 Alex、

    客户好像尝试从寄存器地址 0x3B 处的报告描述符读取 30 个字节?  

    根据给出的命令、我的理解是客户尝试从地址 0x3B 读取 30 个字节开始读取报告描述符。 它读取的是 11 个字节、之后为另外 19 个字节读取的是 0xFF?  

    如果我对客户方面的问题有误解、请告诉我。  

    此致、

    Tyler

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

    尊敬的 Tyler:  
    是的。 客户首先检测到地址为 0x3b 的 I2C 器件。
    然而、在尝试 写回和读回时 、我假设 I2C 会执行以下操作:  

    ***************************************
    i2ctransfe 1 W0@0x3b r30   

    根据文档

    • 1:指定 I2C 总线 1。
    • w0@0x3b: 使用 i2c 地址 0x3b 将 0 字节 (0x00) 写入设备
    • r2: 从设备读取 30 个字节。

    因此、它应该先正确读回 HID 描述符 (0x0000-0x001D)?  

     

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

    您好 Alex、

    表 1 显示了 TCA8424 本身的从器件地址:  

    该值为 0x76 或 0x77。 我看不到 Linux 命令表明客户正在写入正确的从器件地址。 这是在 I2C_DETECT 还是 I2C_transfe 函数中捕获的? 我不太熟悉 Linux 的工作原理。  

    遵循报告描述符检索模式:

    起始位  

    从器件地址 (0x76 或 0x77)

    写入位

    从器件到主机的 ACK

    报告描述寄存器 — LSB (0x3B)

    报告描述地址 — MSB (0x00)

    从器件到主机的 ACK

    重复启动

    从器件地址 (0x76 或 0x77)、

    读取位

    从器件到主机的 ACK

    读取数据 — 报告描述 LSB(从 TCA8424 到主机)

    从主机到器件的 ACK

    读取数据 — 报告描述 MSB

    来自主机的 NACK

    停止条件

    鉴于给定了报告描述符寄存器地址 0x3B、它将开始从该寄存器地址位置读取数据。 它不会从 0x0000 开始读取、因为这不是给定的寄存器地址。 给出了 0x003B。  

    此致、

    Tyler

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

    尊敬的 Tyler:
    使用 HID、我们现在能够读取 HID 描述符:

    i2cdetect -y 1

    检测到器件 0x3b (ACK)  

    • ²C:[START–Adresse (WR)–Index–RESTART–Adresse (Rd)–Data–Stop]

    发送日期: i2ctransfe -y 1 w2@0x3b 0 r30
    响应: 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x49 0x4a 0x4b 0x4c 0x4d 0x4e 0x4f 0x50 0x51 0x52 0x53 0x54 0x56 0x57 0x58 0x59 0x5a 0x5b 0x5c 0x5d 0x5e

    • I²C :[START–Adresse (WR)–Index–Stop ][ Start–Adresse(Rd )–Data–Stop]
      已发送:i2ctransfe -y 1 w2@0x3b 0 0
      已发送:i2ctransfe -y 1 W0@0x3b r30
      响应:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xff 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff
    • I²C:[START–Adresse (WR)–Index–RESTART–Adresse (Rd)–Data Stop][ Start Adresse (RD)–Data–Stop]
      已发送:i2ctransfe -y 1 w2@0x3b 0 r30
      响应:0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x4a 0x4b 0x4c 0x4d 0x4e 0x4f 0x50 0x51 0x52 0x53 0x54 0x56 0x57 0x58 0x59 0x5a 0x5b 0x5c 0x5d 0x5e
      已发送:i2ctransfe -y 1 W0@0x3b r30
      响应:0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xff 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff 0xff 0xFF 0xff 0xff 0xff

     

    使用 HID 鼠标设备 (ILI2510 oder ILI2511)

    已发送:i2ctransfe -y 1 w2@0x3b 0 r30

    • I²C:[START–Adresse (WR)–Index–RESTART–Adresse (Rd)–Data- Stop]
      i2ctransfer -y 1 w2@0x41 0 r30
      响应: 0x1E 0x00 0x00 0x01 0x0E 0x03 0x02 0x00 0x03 0x00 0x00 0x42 0x00 0x04 0x00 0x48 0x00 0x05 0x00 0x06 0x00 0x2A 0x22 0x00 0x11 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    • I²C :[START–Adresse (WR)–Index–Stop ][ Start–Adresse(Rd )–Data–Stop]
      i2ctransfer -y 1 w2@0x41 0 0
      i2ctransfer -y 1 W0@0x41 r30
      响应: 0x1E 0x00 0x00 0x01 0x0E 0x03 0x02 0x00 0x03 0x00 0x00 0x42 0x00 0x04 0x00 0x48 0x00 0x05 0x00 0x06 0x00 0x2A 0x22 0x00 0x11 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    • I²C:[START–Adresse (WR)–Index–RESTART–Adresse (Rd)–Data Stop][ Start Adresse (RD)–Data–Stop]
      i2ctransfer -y 1 w2@0x41 0 r30
      响应: 0x1E 0x00 0x00 0x01 0x0E 0x03 0x02 0x00 0x03 0x00 0x00 0x42 0x00 0x04 0x00 0x48 0x00 0x05 0x00 0x06 0x00 0x2A 0x22 0x00 0x11 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00
      i2ctransfer -y 1 W0@0x41 r30
      响应: 0x1E 0x00 0x00 0x01 0x0E 0x03 0x02 0x00 0x03 0x00 0x00 0x42 0x00 0x04 0x00 0x48 0x00 0x05 0x00 0x06 0x00 0x2A 0x22 0x00 0x11 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00

    HID 键盘设备始终要求在地址和数据通信之间重新启动 I2C 是否有原因?  

    根据 EEPROM 规范、这是可能的。
    是否可以使用有效数据交换通电默认数据?  

    此致、
    Alex

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

    尊敬的 Tyler:

    如何更改 HID 描述符?  

    例如 ,我们有 HID 描述符长度: 0x4041   

    但描述符只是 0x001D。

    一般而言、对于将 TCA8424 作为 HID 器件运行所需执行的步骤、我们是否有任何指导?  
    此致、
    Alex

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

    您好 Alex、

    我将在明天中午 CST 收到回复。 谢谢、  

    此致、

    Tyler

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

    您好 Alex、

    需要更多时间。  

    此致、

    Tyler

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

    您好 Alex、

    HID 键盘设备是否总是要求 I2C 重新启动地址和数据通信?  [/报价]

    您必须根据下面的寄存器映射、首先写入从器件地址(TCA8424 的地址)、后跟寄存器地址:  

    用户需要设置指针地址(指向要读取的地址)、因此需写入特定寄存器地址。 之后、会出现重复的启动条件、以便您可以重新发出 I2C 读取命令、以从所选的寄存器地址读取数据。  

    写入、重复启动、然后从寄存器中读取数据。  

    是否可以用有效数据交换通电默认数据?  [/报价]

    据我在数据表中了解到的情况来看、表 2 中的所有寄存器似乎都接受读取和写入命令。  

    您可以按照输出报告示例将数据严格写入表 2 中的寄存器地址、以将寄存器内容的值从其上电默认值更改为其他值。  

    如何更改 HID 描述符?  [/报价]

    尝试遵循输出报告格式示例、但在写入寄存器地址时、您需要写入 HID 描述符中的一个寄存器地址:0000h - 001Dh、而不是写入输出寄存器

    例如、我们有 HID 描述符长度:0x4041  
    [/quote]
    [/quote][/quote]

    发送了哪些命令来确定 HID 描述符长度 0x4041?  

    此致、

    Tyler

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

    尊敬的 Tyler:

    这是使用前面所述的命令实现的。

     0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x49 0x4a 0x4b 0x4c 0x4d 0x4e 0x4f 0x50 0x51 0x52 0x53 0x54 0x56 0x57 0x58 0x59 0x5a 0x5b 0x5c 0x5d 0x5e

    从地址 0x0000 开始作为前 30 个字节读取。

    然而、HID 描述符也描述了这一点:  

    我们是否可以安排与 ABB 的通话、以便继续进行此操作、因为已经有一些互动在进行中。  

    可能致电有助于快速解决此问题。

    此致、

    AELX

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

    您好 Alex、

    我们可以安排呼叫。 我不太熟悉这款器件、因为它相当旧、并且具有 NRND 功能。 根据我对 I2C 的了解和数据表、我可以尽力进行调试。  

    此致、

    Tyler