0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于DWC2的USB驱动开发-USB复位详解

嵌入式USB开发 来源:嵌入式Lee 作者:嵌入式Lee 2023-07-07 11:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文转自公众号欢迎关注

基于DWC2的USB驱动开发-USB复位详解 (qq.com)

一.前言

上一篇我们详细介绍了USB枚举的第一步,连接检测。那么第二步是干什么呢? 相信做过嵌入式开发尤其做过驱动开发的都会想到-复位,基本上所有的外设模块在开始都需要进行复位操作,以达到一个默认的状态,USB也不例外。一方面初始化时复位以达到默认状态,一方面在异常时复位以恢复。话说复位可以解决99%的问题就是这么来的,如果还不能解决那就断电复位,相信这是很多人解决问题的第一板斧,且不说是不是最优选择,至少这样一般都有效,当然可靠性考虑是否能直接复位一般都需要评估不能这么直接简单粗暴。

这一篇我们就来详细讲讲USB的复位,老规矩理论结合实践,先看规格书的说明再写驱动实测。

二.USB的复位

2.1复位信号

首先,复位信号到底是什么样的呢?调试外设时序的时候一般都会关注,复位一般用一组特殊的状态时序来表示,USB也一样。

我们看到USB2.0规格书中对复位信号的描述如下

b18e5432-1c5f-11ee-9c1d-dac502259ad0.png

对于发送端要求D+和D-小于VOL(max)持续10mS以上,VOL(max)的值为0.3V,如下

b1bacbd4-1c5f-11ee-9c1d-dac502259ad0.png

而对于接收端要求D+和D-小于VIL(max)持续10mS以上,VIL(max)值为0.8V

b1cca16a-1c5f-11ee-9c1d-dac502259ad0.png

可以看到VIL(max)比VOL(max)是要大的,这是对发送要求严格一些,因为要考虑信号传输的噪声干扰等因素,预留一些裕度。

上述10ms的参数实际有个名字叫(TDRST),规格书中要求如下

b1e05246-1c5f-11ee-9c1d-dac502259ad0.png

而一般要求接收端在D+和D-小于VIL(max)持续2.5uS以上就应该检测到复位,这个时间记住,我们可能会遇到临界情况在这个值附近可能出现不稳定的情况,调试时留个心眼,一旦出现这种很可能就是疑难杂症,但是现在留个心眼以后就可能想起来确认这里。

对于根集线器这里还有个要求就是非连续的复位要有3mS以上的间隔(TRHRSI),复位持续周期50mS(TDRSTR)以上(因为USB拓扑最大有5个集线器)

b1fc778c-1c5f-11ee-9c1d-dac502259ad0.png

2.2复位过程

参考USB2.0的规格书《7.1.7.5 Reset Signaling》

在低速/全速模式下运行的设备,如果其面向上游的端口上出现SE0超过2.5µs(TDETRST),则可以将该信号视为复位信号。复位须在复位信号结束之前生效。注意这里是复位信号结束之前就生效。(实际这里还可能导致隐蔽的BUG,我这里有一个精彩的案例分析,高速设备总是枚举为全速设备的问题,神奇的是在复位中段服务函数中加个打印就好了,后面会分享)

b20fb68a-1c5f-11ee-9c1d-dac502259ad0.png

1.主机(HUB)检测到设备连接,通过DP还是DM拉高区分是低速还是全速/高速。

2.主机(HUB驱动信号SE0以产生复位信号。

3.设备检测到SE0持续2.5uS(TFILTSE0)以上检测到复位,产生复位中断。

对于低速设备完成复位,对于全速和高速设备后面继续进行高速设备的检测。

速度的检测后面会单独再讲。

如果是从non-suspended全速状态复位则必须在SE0

开始后的2.5uS(TFILTSE0)~3.0 ms(TWTRSTFS)时间内进行后续的高速速度检测握手。

如果是从suspend状态复位,则必须在SE0开始后的2.5uS(TFILTSE0)以上时间后进行高速速度检测握手,为什么这里没有最长时间3.0 ms(TWTRSTFS)的限制了呢,因为挂起时时钟是停止的重启时钟需要时间,所以这里不限制上限时间。

如果是从non-suspended高速状态复位,则设备在恢复到全速之前必须等待不少于3.0ms且不多于3.125ms(TWTREV)。通过移除高速端接电阻并重新连接D+上拉电阻器,可实现全速恢复。该设备对总线状态进行采样,并在开始恢复至全速后检查SE0(复位而非挂起)、不小于100µs且不大于875µs(TWTRSTHS)。如果检测到SE0(复位),则设备开始高速检测握手。

注意

设备必须能够在复位恢复时间10 ms(TRSTRCY)后接受SetAddress()请求,这个时间也是一个调试经验,如果不能枚举可以检查设备的响应时间是否过长。

由于面向下游的端口在复位期间不会处于传输状态,因此高速Chirp信号不会引发断开连接检测。

如下图是DWC2驱动的复位波形,黄色为DP,高速模式。

b22b27f8-1c5f-11ee-9c1d-dac502259ad0.png

通过仿真器GDB load程序重新运行,而不是直接上电运行,如果是后者则没有(1)这个状态此时默认是没有拉高的。

DWC2控制器的软件复位不会影响SftDiscon位的状态,所以load程序后SftDiscon保持之前的拉高状态,DWC2控制器复位也不会影响

直到相关UTMI时钟复位,如下代码执行对应到(2)前面的DP拉低,此时UTMI等复位应该是导致了PHY的相关状态复位。

b24e5bd8-1c5f-11ee-9c1d-dac502259ad0.png

然后是软件设置SftDiscon位为0,拉高DP,如下代码处,对应(2)处的拉高

b283e24e-1c5f-11ee-9c1d-dac502259ad0.png

然后DP拉高100mS之后(3),主机发送复位(4),这里看到复位时间非常短,这是因为设备2.5uS以上,实际是8uS就检测到了复位(如下图所示,图中标尺部分,后面的蓝色的高DM的高是设备发出的Chirp K高速握手信号),进行了后续的高速握手,所以覆盖了主机发送的复位信号,所以看不到复位10mS的持续时间。

b2ad1344-1c5f-11ee-9c1d-dac502259ad0.png

三.总结

复位的信号很简单,但是承接的是连接检测到后续的高速速度握手,时序非常重要,尤其是有个参数2.5uS,检测到复位信号持续2.5uS即检测到复位,而不需要等复位信号移除即不需要等10mS,所以会出现主机在驱动复位,设备已经检测到复位开始后续的高速握手,从波形上看就看不到复位信号持续10mS了,而这也可能导致一些性能不达标的主机,高速握手失败,这个后面单独讲案例分析。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    8475

    浏览量

    285802
  • 复位
    +关注

    关注

    0

    文章

    179

    浏览量

    25089
  • USB驱动器
    +关注

    关注

    0

    文章

    8

    浏览量

    5446
  • 复位信号
    +关注

    关注

    0

    文章

    71

    浏览量

    6830
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    402
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索Microchip USB7216C:6端口USB 3.2 Gen 2 Type - C控制器集线器

    探索Microchip USB7216C:6端口USB 3.2 Gen 2 Type - C控制器集线器 一、引言 在当今数字化时代,USB设备的应用无处不在,对于高性能、多功能的
    的头像 发表于 04-21 16:00 103次阅读

    探索Cypress EZ - USB FX2LP:高性能USB微控制器的深度剖析

    探索Cypress EZ - USB FX2LP:高性能USB微控制器的深度剖析 在当今的电子设计领域,USB接口的应用无处不在,而一款优秀的USB
    的头像 发表于 03-28 14:50 596次阅读

    MAX1823系列:一款具备故障抑制和自动复位功能的双路USB开关

    MAX1823系列:一款具备故障抑制和自动复位功能的双路USB开关 在现代电子设备中,USB接口的使用非常普遍,对于USB开关的性能和稳定性也提出了更高的要求。今天我们要深入了解的是M
    的头像 发表于 02-11 14:45 255次阅读

    MAX1940:具备自动复位和故障消隐功能的三重USB开关

    MAX1940:具备自动复位和故障消隐功能的三重USB开关 在电子设备的设计中,USB接口的应用极为广泛,而USB开关的性能对于保障设备的稳定运行至关重要。今天,我们就来详细探讨一下M
    的头像 发表于 02-11 14:35 281次阅读

    高速USB信号切换的利器:TS3USB221详解

    高速USB信号切换的利器:TS3USB221详解 在电子设备设计领域,高速信号的切换与传输一直是工程师们关注的重点。特别是在USB接口广泛应用的今天,如何高效、稳定地切换
    的头像 发表于 01-14 16:05 428次阅读

    高速USB 2.0信号开关TS3USB31的设计与应用详解

    高速USB 2.0信号开关TS3USB31的设计与应用详解 在当今的电子产品设计中,高速信号传输的稳定性和可靠性至关重要。特别是在USB接口的应用中,一款优秀的信号开关能够大大提升系统
    的头像 发表于 01-14 15:55 384次阅读

    USB驱动安装全攻略#人工智能 #嵌入式开发 #电子爱好者

    usb
    广州灵眸科技有限公司
    发布于 :2026年01月13日 09:46:49

    瑞芯微(EASY EAI)RV1126B USB使用

    1.USB硬件资源介绍1.1两种USB模式EASYEAINano-TB开发板支持2USB工作模式:默认模式:
    的头像 发表于 01-01 09:30 4467次阅读
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>USB</b>使用

    高速USB 2.0信号隔离切换利器:TS3USB31详解

    高速USB 2.0信号隔离切换利器:TS3USB31详解 在电子电路的设计中,信号的高效切换与隔离是至关重要的环节。尤其是在处理高速USB 2.0信号时,需要一款性能卓越的开关来确保信
    的头像 发表于 12-26 14:30 441次阅读

    深度解析PTN3222:1端口eUSB2USB2驱动器的卓越性能

    深度解析PTN3222:1端口eUSB2USB2驱动器的卓越性能 在当今的电子世界中,接口技术的不断发展对数据传输的稳定性和高效性提出了更高要求。NXP的PTN3222作为一款1端口eUSB
    的头像 发表于 12-24 17:20 950次阅读

    EZ-USB™ FX2G3 DVK快速上手:开启硬件开发新体验

    EZ-USB™ FX2G3 DVK快速上手:开启硬件开发新体验 作为电子工程师,我们在日常工作中经常会接触到各种开发套件,今天就来和大家分享一下EZ-
    的头像 发表于 12-18 11:40 690次阅读

    TUSB1104:USB 3.2 x2 线性转接驱动器的卓越之选

    TUSB1104:USB 3.2 x2 线性转接驱动器的卓越之选 在当今高速数据传输的时代,USB 技术不断发展,对数据传输速率和稳定性的要求也越来越高。TUSB1104 作为一款专为
    的头像 发表于 12-16 15:30 466次阅读

    构建可靠USB应用:硬件设计要点与LuatOS开发技巧!

    实现稳定可靠的USB通信,既依赖于严谨的硬件电路设计,也离不开高效的软件开发支持。本文将从电源管理、信号完整性等硬件角度出发,结合LuatOS平台的API使用技巧,为开发者提供一站式USB
    的头像 发表于 12-15 10:46 319次阅读
    构建可靠<b class='flag-5'>USB</b>应用:硬件设计要点与LuatOS<b class='flag-5'>开发</b>技巧!

    USB上网实战教程:RNDIS驱动一键配置!

     想要通过USB线快速连接网络?本文详解RNDIS驱动的安装与配置步骤。从Linux系统检测到设备虚拟网卡,仅需几个命令即可实现TCP/IP over USB,让上网变得高效便捷,新手
    的头像 发表于 08-04 15:46 1826次阅读
    <b class='flag-5'>USB</b>上网实战教程:RNDIS<b class='flag-5'>驱动</b>一键配置!

    高速信号抗浪涌“神器”,适用于USB 2.0、USB 3.X(Gen1/Gen2)、HDMI

    usb
    jf_15747056
    发布于 :2025年07月23日 19:08:12