热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

未知usb设备设备描述请求失败USB之传输事务,设备描述请求失败usb

并且高速、全速、低速之间也有差别。通过以上三个数据包,就完成了一次控制传输事务。还有一种可能是设备没有需要传输的数据,也将以NAK回复特别要注意的是,回复NAK不代表

来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID   :emOsprey

前面的笔记,鱼鹰介绍了如何通过两根数据线完成 USB 数据的差分传输,知道了最底层的传输是如何进行的,但是仅仅知道这些还是不能真正实现数据的传输。还有一点,我们知道 USB 是半双工传输,无法同时收发数据,那么它又是如何完成数据的双向传输呢?这里面就涉及到 USB 的两个概念:传输事务(Transaction)与传输(Transfer)。前面的笔记中,大家都对包(Packt)有了一定的概念,知道USB是通过各种数据包进行传输的,换句话说, 包是 USB 数据 传输 的最小(基本)单位,不可分割 ,数据要被正确传输,必须打包传输。包的基本格式如下: 因为是半双工,必须使用一种机制 协调主机和设备的通信(不然主机和设备同时发送数据,肯定是不行的),这个机制在USB中称之为传输事务(Transaction)。每一次传输事务的开始,都是由主机 主动发送令牌 包开始的,比如 建立事务: 主机首先发送一个SETUP令牌包,告诉设备,接下来我要发送一个数据包,这个数据包内容需要按照SETUP数据格式(一般是 标准请求)进行解析,换句话说,SETUP的数据包是有自己固定格式的。当设备正确接收到这个数据包的时候,就会返回一个 ACK数据包,告诉主机,我已经正确接收到数据了,可以开始进行下一次传输事务了。现在我们再从数据传输的角度看这些包,这样更便于理解: PID本身就有校验功能(四位 PID,四位取反PID),所以不需要额外校验,5 bit CRC对设备地址和端点地址进行校验,16 bit CRC 对数据校验。设备地址共有 7 bit,范围 0~127, 0 地址是设备插入后的默认地址,在主机枚举设备后将给设备重新分配一个1~127范围的地址。端点地址 4 bit,范围 0~15。全速设备最多有 16 个端点,低速设备最多 3个端点,其中 端点 0 是所有 USB 设备必须支持的默认端点,USB中唯一可以进行 双向传输的端点(物理上还是分为两个端点 IN 和 OUT,但是对于开发者而言,操作是一样的),也是唯一一个不需要 端点描述符就可以进行通信的特殊端点,端点类型是 控制传输(四大传输之一)。所谓端点(Endpoint)地址,类似网络传输中的端口号,是主机能寻址的最小单位,所有的数据传输都是在各个端点上进行的。 而数据,在不同的传输方式中,最大支持的数据量将不同: 同样是全速模式, 控制传输最大数据包为 64 字节,而 同步传输(isoch)最大传输数据 1023 字节。并且高速、全速、低速之间也有差别。通过以上三个数据包,就完成了一次 控制传输事务。除了控制传输,还有以下传输事务: 为了更好的理解上面的各种数据包,可以看如下内容: 令牌包: 数据包: 握手包: 通过传输事务的机制,从机可以通过PID判断接下来是接收数据还是发送数据,这样主机和从机在传输数据时就不会产生冲突,而 接收方在正确接收到数据后需要发送一个ACK握手包进行回应。但是传输过程中不总是如此顺利,有的时候可能因为总线干扰,导致 CRC校验失败,此时接收方该如何处理呢?如果 主机作为接收方,那么因为传输事务是由主机发起的,所以如果主机在规定的时间内没有接收到数据,那么就会再次发送令牌包,再次从设备中获取所需的数据,如果多次获取失败,放弃此次传输。而如果是 设备作为接收方,那么如果没有在规定的时间内正确接收到数据,那么将 不做任何操作。主机因为在发送数据后一直在等待设备的握手包信息,因为设备没有在规定的时间里发送握手包,就会等待超时,从而了解到,设备没有正确接收到数据,那么主机将再次发起一次 传输事务 。而为了防止接收到重复的数据包,USB 利用了DATA 0 ~ DATA 1令牌翻转的机制,每正确接收到一个数据包,自身的PID 会翻转一次,如果对方未翻转,那么就被认为是重发的数据包(不支持重传的传输不需要这种机制)。 事实上在传输过程中还有两种可能的情况: 第一:设备正忙着处理数据呢,主机不合时宜的发送了令牌包(还有可能有数据包)过来了,那么此时设备硬件自动回复NAK,告诉主机,我正忙着,没空搭理你,主机接收到 NAK 后就会在其它合适时间再次启动事务的传输。还有一种可能是设备没有需要传输的数据,也将以NAK回复 特别要注意的是,回复 NAK 不代表错误。 第二 :主机发送了一个令牌包,但是设备不支持,那么设备将回复 STALL。比如主机向设备中根本不存在或者没有配置过的端点传输数据,那么将遭到STALL回复,并且在这种状态下,必须主机干预(通过控制传输)才能恢复设备的正常传输功能。还有一种情况是,主机往控制端点0发送了一个 标准请求,但是这种请求不被设备所支持,那么也将遭到 STALL 回复,和前面不同的是,主机可以 继续发送下一个请求,不需要做特殊处理。对此感兴趣的可以找相关资料进行更深入的学习。以上就是传输事务的内容了,那么这些内容和四大传输有什么关系?下期再见。推荐阅读:嵌入式系统优先级详解KEIL 调试经验总结线程CPU使用率到底该如何计算?许久以后,你会感谢自己写的异常处理代码终极串口接收方式,极致效率延时功能进化论(合集)如何写一个健壮且高效的串口接收程序?打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知

-THE END-

如果对你有帮助,记得转发分享哦

微信公众号「鱼鹰谈单片机」

每周一更单片机知识

长按后前往图中包含的公众号关注


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
大头莎LALA
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有