[STM32F2] STM32F2/F4 ULPI‑USB PHY 存在的问题

[复制链接]
110|17
我的牙白 发表于 2026-8-7 19:58 | 显示全部楼层 |阅读模式
我在 STM32F207和407 上使用 ULPI PHY。该设备仅作为 USB 从设备,可以工作在 USB 全速模式,但无法工作在高速模式。部分符合 ULPI 标准的 PHY 可以正常工作,另一些则不行。
通过逻辑分析仪观测 ULPI 总线与 USB 信号线状态:在 USB 复位阶段,STM32 会配置 PHY 的功能控制寄存器,使 PHY 输出 Chirp‑K 信号,设备支持高速模式。但实际上 Chirp‑K 信号没有产生,枚举过程回退到全速模式。此时 DP 电平被拉到 1.6V,DM 为 0V,而非输出 Chirp‑K。
猜测USB 内核会自动置位 PHY 功能控制寄存器的 LPM 位(第 7 位)。现象表明不支持 LPM 的 PHY 会忽略该位,可以正常工作;支持 LPM 的 PHY 则会出现故障。
是否有办法让 STM32F 系列芯片不设置 ULPI PHY 功能控制寄存器中的 LPM 位?按理应该存在该控制手段,但参考手册中没有相关文档说明。
哪些 PHY 可以正常工作、哪些无法工作?

公羊子丹 发表于 2026-8-10 20:14 | 显示全部楼层
你这个问题HAL库直接有开关,CubeMX配置OTG_HS时把lpm_enable设为DISABLE,底层就不会自动写ULPI PHY的LPM位,从根源避开冲突,不用手动操作寄存器。
周半梅 发表于 2026-8-10 20:15 | 显示全部楼层
实测支持LPM的PHY像USB3320、LAN8742 USB PHY会踩你这个坑,USB3300老版本、CH132这类不支持LPM的型号,不受该位影响能正常跑高速。
帛灿灿 发表于 2026-8-10 20:16 | 显示全部楼层
想问下你是标准库还是HAL库?标准库没有一键关闭LPM的配置,需要在ULPI初始化完成后,主动读改PHY功能寄存器清除bit7,覆盖内核自动写入的值。
童雨竹 发表于 2026-8-10 20:17 | 显示全部楼层
给你一套调试步骤,先逻辑分析仪抓ULPI复位后的寄存器写入时序,确认内核自动置LPM位,再写一段ULPI寄存器操作代码强制清零该位。
万图 发表于 2026-8-10 20:18 | 显示全部楼层
调侃一句,踩过一模一样的坑,一开始以为是硬件USB时钟没开,断点调试才发现malloc返回空指针,加强转后立刻正常枚举。
Wordsworth 发表于 2026-8-10 20:19 | 显示全部楼层
调侃一句,ST参考手册确实没写明这个自动置位机制,很多人卡在高速枚举,查遍寄存器手册都找不到线索,只能靠逻辑分析仪抓总线定位LPM冲突。
Bblythe 发表于 2026-8-10 20:20 | 显示全部楼层
如果你不想修改底层PHY读写代码,最简单方案是换不支持LPM的老款ULPI PHY,不用改一行固件就能正常输出Chirp-K完成高速握手。
Pulitzer 发表于 2026-8-10 20:21 | 显示全部楼层
初始化流程要调整顺序:先完成ULPI硬件复位,再调用HAL_PCDEx_SetLPM(hpcd
Uriah 发表于 2026-8-10 20:22 | 显示全部楼层
裸机标准库操作方案:ULPI初始化后调用PHY读寄存器0x04,把bit7清零再写回,强制清除LPM使能位,就能正常产生高速Chirp-K信号。
Clyde011 发表于 2026-8-10 20:23 | 显示全部楼层
补充一个隐藏坑,工程里别开USB_OTG_HS_LOW_PWR_MGMT_SUPPORT宏,开启后内核会持续维护LPM状态,就算手动清寄存器也会反复改写PHY配置。
故里说长安 发表于 2026-8-11 16:27 | 显示全部楼层
逻辑分析仪看到DP拉到1.6V说明PHY根本没产生Chirp-K,这验证了是PHY配置阶段就出了问题,不是后面握手失败。
classroom 发表于 2026-8-11 16:58 | 显示全部楼层
STM32的USB内核确实会强制写LPM位,这个问题在官方勘误手册里根本找不到明确说明,完全是个隐藏坑。
cr315 发表于 2026-8-11 17:30 | 显示全部楼层
支持LPM的PHY在接收到未知位配置时直接拒绝应答,而不支持的PHY直接忽略,所以出现了“挑PHY”的现象。
duo点 发表于 2026-8-11 18:02 | 显示全部楼层
想强制不让STM32设LPM位估计很难,因为USB内核寄存器是硬连线逻辑,用户无法干预内核发出的配置序列。
duo点 发表于 2026-8-11 18:34 | 显示全部楼层
建议直接查ST官方发布过的Errata文档,或者去社区搜老版本的USB库,有人遇到过并给过特定的HAL补丁。
flycamelaaa 发表于 2026-8-11 19:06 | 显示全部楼层
如果用了带LPM功能的PHY,可以尝试在ST的USB初始化代码里增加一段写入擦除LPM位的操作,抢在内核之前写。
jcky001 发表于 2026-8-11 19:38 | 显示全部楼层
高速模式失败的核心在于PHY的UTMI+层状态机不接收STM32发来的错误控制字,所以干脆不输出信号。
powerantone 发表于 2026-8-11 20:10 | 显示全部楼层
遇事不决先换PHY,公认能稳定工作在F2/F4上的常用芯片有USB3320和USB3340,可以优先测试这两款。
probedog 发表于 2026-8-11 19:40 | 显示全部楼层
支持LPM的PHY比如某些TI或Cypress的器件,如果没按规范处理未使用的保留位,可能就需要外接下拉电阻强行改变位状态。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

204

主题

205

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0