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.

[参考译文] TUSB4041I:在使用 USB 控制断电后、Linux 6.8.0中仍然存在器件信息

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1383039/tusb4041i-device-infomation-still-exists-in-linux-6-8-0-after-power-off-using-usb-control

器件型号:TUSB4041I

工具与软件:

您好!

  我在使用以下函数通过 libusb_control_transfer 命令控制 TUSB4041I 集线器电源关闭时遇到问题

/*
 * Use a control transfer via libusb to turn a port off/on.
 * Returns >= 0 on success.
 */

static int set_port_status_libusb(struct libusb_device_handle *devh, int port, int on)
{
    int rc = 0;
    int request = on ? LIBUSB_REQUEST_SET_FEATURE
                     : LIBUSB_REQUEST_CLEAR_FEATURE;
    int repeat = on ? 1 : opt_repeat;

    while (repeat-- > 0) {
        rc = libusb_control_transfer(devh,
            LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_OTHER,
            request, USB_PORT_FEAT_POWER,
            port, NULL, 0, USB_CTRL_GET_TIMEOUT
        );
        if (rc < 0) {
            perror("Failed to control port power!\n");
        }
        if (repeat > 0) {
            sleep_ms(opt_wait);
        }
    }

    return rc;
}

关闭其中一个 USB 集线器电源后、Linux 内仍然存在 USB 集线器信息、即使该器件已完全从主机中移除也是如此。

有什么想法吗?

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

    您好!  

    您是否使用  libusb_control_transfer 命令用于开启和关闭其中一个集线器下行端口、还可查看与该端口连接的器件信息? 如果是这种情况、那么您能否通过物理方式检查并查看该下游端口的 VBUS 是否确实被移除了?  

    谢谢

    David  

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

    是的、VBUS 已断电。 从主机器件中移除该器件也是如此。 此信息仍然显示(通过使用 lsusb)。

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

    您好!

    为了澄清、如果您说从主机中移除器件、是指从 Linux 主机中物理移除 TUSB4041I?

    谢谢

    David  

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

    否、是指从 TUSB4041I 上移除 USB 器件。 TUSB4041I 被 stll 连接到 Linux 主机。

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

    您好!

    由于美国节假日、您的问题可能会延迟回答。 我们 将在明天( 7月5日)返回时探讨您的问题。 对于等待和可能造成的任何不便、我们深表歉意。

    谢谢!

    Ryan

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

    没问题。 感谢您的通知。

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

    您好!

    问题是否仅出现在此特定器件或任何其他器件上?

    您可以在 libusb_control_transfer 命令之后执行获取端口状态命令吗? 当您这样做时、您看到了什么价值?

    您是否还可以启用 dmesg 命令并向我发送日志以供查看?

    谢谢

    David

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

    您好!

     很抱歉、此问题的根本原因现在已为我们所知。 USB 规范2.0描述了 USB 集线器状态机仅传输到所述的断电状态、而没有传输到断开状态、因此 USB 信息仍然存在于 USB 内核中。 而到6.8 Linux 内核代码先执行 USB 断开连接、然后执行与我相同的操作(设置断电)。 感谢您的调查。

    祝你度过美好的一天

    Yabin