调试记录-U盘枚举失败之LPM影响

现象

板子接部分U盘出现枚举失败,看log像是硬件信号问题,如:

[   29.186464] usb usb3-port1: Cannot enable. Maybe the USB cable is bad?
[   30.079624] usb usb3-port1: Cannot enable. Maybe the USB cable is bad?
[   30.080200] usb usb3-port1: attempt power cycle
[   31.046287] usb usb3-port1: Cannot enable. Maybe the USB cable is bad?
[   31.939659] usb usb3-port1: Cannot enable. Maybe the USB cable is bad?
[   31.940242] usb usb3-port1: unable to enumerate USB device

分析

如果是硬件信号问题,应该是所有U盘都会出现这种现象,为了排查问题,接了usb分析仪抓数据,抓到U盘枚举出错的数据如下:
U盘枚举失败
可以看到,有一个LPM包,并有ERROR。

解决

在USB驱动中,有一个usb_quirk_list列表,它其实就是一个黑名单,描述了某个设备有何种问题,其中就有LPM相关的配置,把出错的U盘的VID/PID配置上去可以解决问题。
相关修改:

460         /* udisk */
461         { USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM },
### 关于 X-NUCLEO-LPM01A 的技术信息 X-NUCLEO-LPM01A 是一款专为低功耗应用设计的扩展板,主要用于测量目标设备的功率消耗情况。它可以通过连接至 STM32 Nucleo 开发板来实现精确的电流和电压监测。 #### 技术规格 X-NUCLEO-LPM01A 提供了一个宽广的电流动态测量范围,从 **100 nA 到 50 mA**,其精度约为 **2%**[^1]。这种高灵敏度使得开发者可以轻松评估微控制器或其他电子组件在不同运行模式下的功耗表现。 #### 使用指南 为了充分利用 X-NUCLEO-LPM01A 的功能,建议按照以下方法操作: 1. 将 X-NUCLEO-LPM01A 安装到兼容的 STM32 Nucleo 主板上。 2. 配置主板上的固件以便与扩展板通信。 3. 运行 STM32CubeMonitor-Power 工具以捕获来自 X-NUCLEO-LPM01A 的功率数据,并利用其内置图表展示结果。 #### 数据手册 关于更详细的硬件描述和技术细节,请查阅官方发布的 X-NUCLEO-LPM01A 数据手册。此文档通常会涵盖如下方面: - 物理接口定义; - 支持的工作条件(温度、湿度等); - PCB 设计布局推荐; - 可编程寄存器列表及其用途说明。 #### 示例代码 下面给出一段简单的 C++ 实现片段用于初始化 I2C 总线并与传感器交互读取原始数值: ```cpp #include "stm32f4xx_hal.h" void MX_I2C_Init(I2C_HandleTypeDef* hi2c){ /* Initialization code here */ } uint8_t readRegister(uint8_t regAddr, uint8_t *pData, uint16_t length){ HAL_StatusTypeDef status; status = HAL_I2C_Mem_Read(hi2c, DEVICE_ADDR, regAddr, I2C_MEMADD_SIZE_8BIT, pData, length, 10); return (status == HAL_OK)? 0 : 1; } ``` 以上函数展示了如何通过调用 `HAL_I2C_Mem_Read` 来访问指定地址处存储的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值