三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

USB 枚举失败?别只怪线缆,看看这 3 个电阻与上拉

USB 枚举失败?别只怪线缆,看看这 3 个电阻与上拉

摘要:USB 插上电脑,提示“未知设备”?示波器看 D+ D- 没波形?不是 MCU 不行,而是 USB 物理层的上拉电阻、串阻、ESD 器件配置错误。本文解析 USB 硬件设计的 3 个致命雷区。


一、问题描述(现象)

**MCU 跑 USB 例程,电脑毫无反应;

设备管理器里偶尔出现“未知 USB 设备(设备描述符请求失败)”;

示波器测 D+ D-,电压一直是 0V。**

很多工程师的排查方向是:

  1. 晶振不准?

  2. 描述符写错了?

  3. 换个 USB 口试试?


二、原理分析

1. 物理模型

USB 是全双工差分总线。

PC Host -> [ESD] -> [Rs] -> D+ / D- -> [MCU] ^ | [Rpu] (1.5k)

2. 核心参数

  • 差分阻抗:90Ω ±10%。

  • 上拉电阻(Rpu)

    • Full Speed (12Mbps):D+ 上拉 1.5kΩ 到 3.3V。

    • Low Speed (1.5Mbps):D- 上拉 1.5kΩ 到 3.3V。

  • 串联电阻(Rs):22Ω ~ 33Ω,用于阻抗匹配。

3. 反直觉真相

USB 不是“两根线直接接到 MCU”就能用的。

  • 没有上拉电阻:主机永远不知道有设备接入(不会开始枚举)。

  • 上拉接错脚:低速设备接 D+,主机当成全速设备,直接报错。

  • ESD 管子结电容太大:直接吃掉高频信号,12Mbps 跑不起来。


三、工程级解决方案

方案 1:上拉电阻的正确接法(铁律)

  • STM32 / ESP32 等自带 PHY 的 MCU

    • 通常内部已有 1.5kΩ 上拉。

    • 硬件上不要再外接!(否则变成并联,阻值变小,电流过大)。

  • 外置 USB PHY 或 FPGA

    • 必须外接 1.5kΩ 精密电阻。

方案 2:串联电阻与 ESD 选型

器件

参数要求

推荐型号

串联电阻 Rs

22Ω ~ 33Ω,0402

普通厚膜电阻

ESD 保护

结电容 < 1pF

PRTR5V0U2X, TPD1E10B06

TVS 管

钳位电压 < 3.6V

严禁使用普通 TVS

方案 3:电压电平检查

用万用表测量:

  • 未插入时:D+、D- 应为 0V。

  • 插入瞬间:

    • 全速设备:D+ 被拉高到约 3.0V(经过二极管压降)。

    • 主机回应后:D- 会有 17 个 Keep-Alive 脉冲。


四、选型避坑建议

  1. 不要省 ESD 管:USB 接口是静电重灾区,没有 ESD 保护,芯片很容易挂。

  2. DP/DM 走线:必须做差分对,等长(±10mil),不要跨分割。

  3. VBUS 检测:有些 MCU USB 外设需要检测 VBUS 电压来判断是否连接,别忘了分压电阻。


五、总结 Checklist

  • [ ] 是否用示波器看过 D+ 在上电瞬间是否被拉高?

  • [ ] 上拉电阻是接在 D+ 还是 D-(是否匹配速度模式)?

  • [ ] ESD 保护管的结电容是否 < 2pF?

  • [ ] 串联电阻是否在 22Ω~33Ω 范围?


六、写在最后(关注我,少走弯路)

我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。

USB 的坑在于“软硬件强耦合”:硬件没动,软件怎么调都没用。

关注我的专栏《嵌入式底层避坑指南》,我会持续更新 USB、CAN、UART 等外设的真实调试案例量产级解决方案

👉下一篇预告:《USB 描述符怎么写都不对?别只抄例程,看看 bLength 与 wTotalLength》


References

  • USB 2.0 Specification – Electrical Characteristics

  • STM32 Reference Manual – USB hardware development guidelines


如果你在 USB 硬件设计上踩过“插上没反应”的坑,欢迎在评论区晒出你的原理图片段。

原创文章,转载请注明出处。

← 返回列表