我知道当 USB 设备首次连接到计算机/集线器时,它只能消耗 100mA 电流(如果是 USB 3.0,则为 150mA)。它必须通过配置描述符的字段协商更高的功率bMaxPower
。然后主机可以选择此配置或选择较小的配置。
因此,例如,某个设备可能请求 500mA,但它可能只接收 300(例如,如果集线器无法提供更多电流)。
有没有办法(最好在 Linux 中)知道这个协商的结果?更具体地说,如果我正在开发嵌入式设备,我想知道我是否收到了我的全部请求。如果我无法获得足够的功率来实现全部功能,我希望减少功能或向用户显示错误。
到目前为止(使用lsusb
和下的等效文件sysfs
),我只能够找到所要求的金额,而找不到已协商的金额。
答案1
协商并不重要,重要的是您获得的电量。获取一个 USB 功率计,使用蓝牙和 USB 蓝牙适配器将通过蓝牙将功率信息接收到您的 Linux 机器上。
如果您消耗的电流超过设备所能提供的电流,则电压将会降低且低于预期。
这样您就可以实时监控它。
现在wireshark有一个USB模块可以拦截USB命令,但我不知道它是否与linux兼容。