能否通过软件方式限制 PC 的 USB 输出电流

软件上不能、硬件上不能。Linux上,通过该内核可以修改一些错误策略,但本质上不影响实际硬件行为,也可以理解为,不能。PC的USB每个端口的最大电流按照USB规范上的规定是500mA,但当设备接入的时候,默认是按照100mA供电的,所有的USB设备的配置描述符都有自己需要的电流的描述: 【能否通过软件方式限制 PC 的 USB 输出电流】 能否通过软件方式限制 PC 的 USB 输出电流

上图右侧最下的就是电流需求。但是,Linux代码里只是检查供电是否超过最大值,但不会因为超过最大值就禁用设备。Linux内核函数usb_set_configuration,里面有检查: i = dev-\u0026gt;bus_mA - cp-\u0026gt;desc.bMaxPower * 2; if (i \u0026lt; 0) dev_warn(\u0026amp;dev-\u0026gt;dev, "new config #%d exceeds power " "limit by %dmA\", configuration, -i);但只是一个warning,所以,软件上是无法限制的,实际上,限制了也没用,设备会尽可能的去用它需要的电流,如果主机硬件提供不了,设备硬件自己就停止工作了。软件上没有办法控制它。你能做的唯一的办法就是当设备要求更多的电流的时候,你把这个设备disable,但想限制电流大小,是没有硬件访问接口的。
■网友
USB设备的电流是设备接入计算机的时候,枚举的过程中向计算机申请的,有一个8位寄存器,值范围是0~24,对应的电流是20mA~500mA。如果枚举过程中设备没有向计算机提交这个需要电流的值,计算机则默认按最大电流提供,USB2.0设备是500mA,USB1.1设备是200mA。不知道你要限制电流干嘛?


    推荐阅读