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.

[参考译文] TUSB8041:如何通过 I2C 使用自定义字符串

Guru**** 2756835 points

Other Parts Discussed in Thread: TUSB8041

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1043639/tusb8041-how-to-use-custom-strings-via-i2c

器件型号:TUSB8041

您好!

我想使用 I2C 接口覆盖产品和其他字符串。

在我们的应用中、I2C 线路保持高电平、以便器件以"未配置状态"引导。

之后、我们可以将数据写入寄存器0x0B 以选择正确的 USB2极性映射、然后将0x01写入寄存器0xf8、在此之后器件将启动并无问题枚举。

但是、我们还希望覆盖产品字符串、以便我们的器件更易于识别。

在通过设置0xf8启用器件之前、我们现在:

  • 向寄存器0x05写入0x90以启用自定义字符串。
  • 向寄存器0x24写入非零值以设置产品字符串长度
  • 向寄存器0x90+写入字符串

但是、一旦0x24为非零、器件就会以"USB 器件无法识别"进行枚举。

之后、在设备管理器中、我们有一个"通用 USB 集线器"、它正常(但字符串没有变化)、还有"通用超高速 USB 集线器" 、Windows 无法加载驱动程序。

测试时、我们使用:

  • 寄存器0x24 = 0x04
  • 寄存器0x90 = 0x4D
  • 寄存器0x91 = 0x00
  • 寄存器0x92 = 0x61
  • 寄存器0x93 = 0x00

当针对制造商字符串重复相同的过程时、器件枚举 OK、但不显示自定义字符串。

我们是否需要创建自己的驱动程序/INF 文件才能使其正常工作、或者是否有其他工作要做?

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

    您好!

    SMBUSz 引脚的状态是什么?  您使用的 EEPROM 不正确?  

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

    您好、Malik、

    我们使用一个1k 电阻器将 SMBUSz 连接到 GND。 我们实际上没有使用 EEPROM。

    我们必须首先使用 SMBus 从 MCU 配置器件(我们将其作为 I2C 驱动、在我们的数据表中检查了当然总线是 SMBus 后、 但据我所知、唯一的区别是超时行为、这在我们推动超时行为的方式中不是问题)

    我上面提到的所有操作当然都是在通过将0x01写入0xf8来清除 CFG_ACTIVE 位之前执行的。

    我还可以在写入上述寄存器设置后读回这些设置。

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

    您好!

    那么、您可以看到 TUSB8041在清除 CFG_ACTIVE 位之前尝试枚举吗? 为了回答 您之前的问题、将根据 VID/PID 组合分配驱动程序、因此我不认为这是问题。 您是否正确设置 了 customStrings 位(0x05位7 = 1)?

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

    您好、Malik、

    很抱歉耽误你的回答。 对于我们开始交付的原子色批次、我尝试在集线器中输入一个名称、以便更轻松地测试原子色。 它们有两个集线器、使用名称可以方便地检查它们是否枚举为 OK。 目前、问题的优先级较低、但我将在2021年12月中旬的下一批计划配送中再次处理此问题

    在 CFG_ACTIVE 被清除之前、TUSB 不会尝试枚举。 它还保持在激活模式、直到该时间从3V3消耗~200mA、然后我们通过降压转换为1.1V。 (现在正在检查规格。 这也很奇怪 当指定的电流"复位后"是指"清除 CFG_ACTIVE 后"时、行为正常。 我们通过连接 I2C 线路将其保持在预配置模式)

    我还设置 customStrings 位。 当我设置此位并使用默认设置(0x24值0)保留字符串"empty"时、它仍然可以正常工作。 仅当我设置长度和某些数据枚举失败时。

    我怀疑 Windows 拒绝字符串数据。 我目前正在开发一些用于电子产品开发的工具(prodoworkBench)、其中包括可执行的伪代码脚本语言。 下面是为 TUSB 供电后、我运行以初始化它的代码。 它看起来像 C、但我可以在函数调用中具有常量数组。

    WriteRepRead 函数参数为:

    •  地址
    • 要写入的字节
    • 要读取的字节数

    只要我将0x24保持在值0、所有操作都正常。 按原样使用脚本、枚举失败(无法识别设备)。

    //集线器板

    //枚举信息
    // techcommunity.microsoft.com/.../270685

    //在“使用前先禁用集线器板启动”中的集线器配置

    //配置集线器端口
    pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x0B、0x83}、0);


    //设置自定义字符串
    pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x05、0x90}、0); //启用自定义字符串

    //例如,这3个 Unicode 字符 U+004D、U+0061和 U+10000
    使用 UTF-8 16LE 时、//将转换为0x4D00 6100 00D8 00DC。

     //产品字符串
     pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x24、0x04}、0); //字符串长度
     
     pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x90、0x4D}、0); //字符串'A'
     pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x91、0x00}、0); //字符串'A'  
     pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x92、0x61}、0); //字符串'A'
     pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0x93、0x00}、0); //字符串'A'  

    //激活集线器
    pcb3PCB200009B10_Hub.busI2C.WriteRepRead (0x44、{0xF8、0x01}、0);

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

    您好!

    我将要研究这个问题、下周再与您讨论。