Type-C口插上电脑,万用表一量VBUS:5V,正常。
板子也已经上电,MCU在跑。可Windows设备管理器一点反应都没有,插拔提示音也没有。
这种情况最容易让人困惑:既然Type-C已经有5V,为什么电脑还不知道我插了设备?
因为USB-C里,“有电”和“数据开始枚举”本来就是两条不同的链路。
Type-C新增了CC1、CC2,用来判断是否插入、插头方向、端口角色以及可用电流能力。
如果你做的是一个普通USB Device,也就是UFP/Sink,最基础的Type-C实现里,CC1和CC2通常各需要一个Rd到GND,常见值是5.1kΩ。
这一步做对以后,Source才知道“有一个Sink接进来了”,并按照Type-C规则建立供电关系。
但USB 2.0真正的数据还是跑在D+和D−上。CC正常,不会替你完成USB枚举。
图1:完整USB Type-C Receptacle包含CC、VBUS、USB 2.0 D+/D−以及SuperSpeed信号。
Type-C Receptacle上能看到A6/B6两个D+,A7/B7两个D−。
它们不是两路USB 2.0。标准做法是把两个D+接到一起、两个D−接到一起,让插头正插反插时PHY都能接到同一组数据线。
TI的资料还特别提醒,这样连接本身会形成短Stub,所以分叉位置要尽量靠近Connector,Stub不要拉得很长。
一个非常常见的低级错误是只接了A面的D+/D−,B面漏掉。结果就会变成:插头一个方向能识别,翻过来完全没反应。
图2:只实现USB 2.0时,两组D+与两组D−仍需处理正反插连接,SuperSpeed脚可不使用。
USB Full-Speed/High-Speed设备连接时,会通过D+上的1.5kΩ上拉来告诉Host:这里有设备。
很多MCU的USB PHY已经把这个上拉做在芯片内部,由寄存器控制,不一定需要外置1.5kΩ。问题也恰恰出在这里:硬件线都接对了,USB外设没Enable,D+上拉根本没被打开。
这时VBUS照样有5V,MCU程序也照样运行,但电脑侧看不到任何Attach事件。
所以一个很好用的动作,是在插入后直接量D+。如果设备已经进入连接状态,应该能看到与USB空闲状态相符的电平变化;完全趴在0V,就要查PHY、上拉和初始化。
自供电设备确实不一定靠USB VBUS给系统供电,但很多MCU或USB Device Controller仍然需要VBUS Detect,用来判断Host是否已经连接。
如果软件栈只有检测到VBUS有效才打开PHY,而原理图里VBUS Sense根本没接,结果仍然是“接口有5V、系统也有电,但USB模块没上线”。
所以这里不能凭经验说“我不用USB供电,VBUS就可以悬空”。要回到具体MCU的数据手册,看USB VBUS检测是外部Pin、内部检测,还是可以由软件旁路。
图3:Type-C系统中CC检测、D+/D−数据与VBUS供电属于不同功能路径。
第一,确认Type-C角色。普通设备端CC1、CC2的Rd是否正确,正插反插是否都能建立连接。
第二,做通断测试:Connector的两组D+是不是都到MCU D+,两组D−是不是都到MCU D−,有没有把D+、D−画反。
第三,看D+上拉是否真的出现。没有Attach,先别谈Descriptor。
第四,示波器抓D+/D−。Host有没有先发Reset?设备有没有响应?到这里才能判断是PHY层没起来,还是已经进入枚举后卡在Descriptor/固件。
第五,再检查USB时钟。Full-Speed常见48MHz相关时钟必须满足芯片要求,时钟没起来时,软件代码看着全走了,USB照样不会工作。
Type-C调不通时,最省时间的思路不是把“USB-C”当成一个整体,而是拆开看:CC负责连接和角色,VBUS负责电,D+/D−和PHY负责数据。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207
暂无评论