Android U盘概率性不识别 文章目录前言一、USB 子系统log分析二、排查HUB的端子供电能力前言部分U盘可以识别部分U盘无法识别一、USB 子系统log分析kernel-6.6/drivers/usb/core/generic.cintusb_choose_configuration(structusb_device*udev){...//usb_get_max_power获取的是U盘所需的电流这个一般是desc.bMaxPower * 2//udev-bus_mA是hub的端子所能提供的电流if(usb_get_max_power(udev,c)udev-bus_mA){retusb_get_max_power(udev,c);dev_info(udev-dev,udev-speed:%d c-desc.bMaxPower:%d ret:%d udev-bus_mA:%d \n,udev-speed,c-desc.bMaxPower,ret,udev-bus_mA);insufficient_power;continue;}else{retusb_get_max_power(udev,c);dev_info(udev-dev,connect udev-speed:%d c-desc.bMaxPower:%d ret:%d udev-bus_mA:%d \n,udev-speed,c-desc.bMaxPower,ret,udev-bus_mA);}...}出现异常时有如下logusb1-1.2:udev-speed:3c-desc.bMaxPower:100ret:200udev-bus_mA:100//可见ret desc.bMaxPower * 2 200 返回值明显大于bus_mA子系统会判断端子供电能力不足就只枚举但实际无法使用//注意这里是usb 1-1.2 usb 1-1是hub中间隔了一个hub这个U盘是连接在一个hub上的正常时有如下log1desc.bMaxPower较小的U盘所以可以识别usb1-1.2:connect udev-speed:3c-desc.bMaxPower:50ret:100udev-bus_mA:100//可见ret desc.bMaxPower * 2 100 返回值明显小于等于bus_mA这个是可以使用的//注意这里是usb 1-1.2 usb 1-1是hub中间隔了一个hub这个U盘是连接在一个hub上的2正常连接时的U盘的logusb1-1:connect udev-speed:3c-desc.bMaxPower:100ret:200udev-bus_mA:500//可见ret desc.bMaxPower * 2 200 返回值明显小于bus_mA这个是可以使用的//注意这里是usb 1-1 中间没有hub这个U盘是直接连接在USB上的//USB根控制器的供电能力是500mA是可以覆盖这个U盘的二、排查HUB的端子供电能力上图是异常的原理图PSELF是自供电拉高则是自供电拉低是使用总线电源使用总线电源端子电流会比较低。上图是正常的原理图PSELF是拉高的。