首页 > 其他分享 >USB协议详解第27讲(USB包-中断传输包详解)

USB协议详解第27讲(USB包-中断传输包详解)

时间:2024-10-30 10:58:23浏览次数:1  
标签:27 USB 中断 主机 传输 详解 端点 数据包 设备

1.中断传输包结构

中断传输和批量传输类似,中断传输只由一个中断事务组成,中断事务包含令牌包、数据包、握手包,如图下所示。中断事务类型的特点是能够通过错误检测和重试来保证主机和设备之间数据的无错误传递。 需要理解和注意以下点。

(1)当主机准备接收数据时,它发出IN令牌,设备端点通过返回数据包或(如果无法返回数据)NAK或STALL握手来响应主机。 NAK表示设备暂时无法返回数据,而STALL表示端点永久停止。 如果主机收到 一个有效的数据包,它用ACK握手来响应。 如果主机在接收数据时检测到错误,则不会向设备返回握手包。

(2)当主机准备发送数据时,它首先发出一个OUT令牌包,然后是一个数据包。 如果设备接收数据包时没有错误,则设备将返回三个握手中的一个。

ACK:表示没有错误,并通知主机它可以发送下一个数据包。

NAK:表示接收数据没有错误,但是主机应该重新发送数据,因为有可能设备处于临时条件拒绝接受数据(例如缓冲区满)。

STALL:如果端点被停止,则返回STALL以指示主机不应该重试传输,表示设备可能存在错误。

(3)如果收到的数据包带有CRC或位错误,则不返回握手。

中断传输事务包组成如下图。

2.中断传输DATA数据包实现同步操作

中断传输使用数据包切换实现同步操作,就是通过数据DATA0包和DATA1包的切换来实现主机和设备传输错误检测以及重发机制。这里和上一节讲解的批量传输同步操作原理是一样的,大家可以直接点击USB协议详解第26讲(USB包-批量传输包详解)查看。

3.中断传输包详解

首先介绍下中断传输低速、全速、高速数据包最大长度大小,如下图。

3.1中断读传输抓包

3.2中断写传输抓包

中断写传输和中断读传输相反,中断写传输主机使用OUT令牌包进行事务请求,这里不再贴图。

4.HID设备工作原理

我们前面在USB协议详解第16讲(USB传输-中断传输及事务组成)讲过中断传输用于那些频率不高,但是对周期有一定要求的数据传输。具有保证的带宽,并能在下一个周期对先前错误的传输进行重传。中断端点在端点描述符中要报告主机对此端点的查询时间,主机会保证在小于这个时间间隔的范围内安排一次传输,比如HOST主机1ms内向鼠标设备请求一次数据。对于全速端点,中断传输的时间间隔在1ms到255ms之间,对于低速端点,时间间隔限制在10ms到255ma之间,对于高速端点,时间间隔为2^(bInterval-1) x 125us,bInterval的值在1-16之间。

中断传输常用于HID设备,比如鼠标和键盘,当鼠标键盘接上之后,主机会按照端点配置的查询时间周期对设备进行数据请求,在这里就是周期的获取鼠标和键盘数据,其实周期请求是驱动帮我们做了这件事。

但是当我们设备类型是自定义HID设备,或者是自定义标准USB设备(使用中断端点实现),驱动会帮我们周期查询吗?

其实应用层软件在使用CreateFile打开一个自定义HID设备的时候,相应驱动程序会一直挂起IRP,到了设备端点指定的时间时主机控制器如果检测到IRP挂起,会对设备进行数据请求,设备如果把数据准备好了,则会把数据发送给主机,主机驱动程序会把接收到数据放入消息队列等待应用软件使用ReadFile函数来取数据,应用如果长时间不取数据,数据就会丢失。当然设备如果没有准备好数据,则会返回主机NACK握手信号。

标签:27,USB,中断,主机,传输,详解,端点,数据包,设备
From: https://www.cnblogs.com/linhaostudy/p/18515448

相关文章

  • switch多分支语句及其相关概念详解
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言在实际生活中,我们常常要面对多种多样的选择,如果要用编程来解决这些问题,我们就可以用选择语句来解决问题。通常我们遇到这类问题......
  • USB协议详解第26讲(USB包-批量传输包详解)
    1.批量传输包结构批量传输由一个或多个批量事务组成,每一个批量事务具有令牌包、数据包、握手包,如图下所示。批量事务类型的特点是能够通过错误检测和重试来保证主机和设备之间数据的无错误传递。需要理解和注意以下点。(1)当主机准备接收批量数据时,它发出IN令牌,设备端点通过返回......
  • 《使用Gin框架构建分布式应用》阅读笔记:p251-p271
    《用Gin框架构建分布式应用》学习第14天,p251-p271总结,总21页。一、技术总结1.Docker&DockerComposeversion:"3.9"services:api:image:apienvironment:-MONGO_URI=mongodb://admin:password@mongodb:27017/test?authSource=admin&readPreference=p......
  • 【C语言】预处理(预编译)详解(下)(C语言最终篇)
    文章目录一、#和##1.#运算符2.##运算符二、预处理指令#undef三、条件编译1.单分支条件编译2.多分支条件编译3.判断符号是否被定义4.判断符号是否没有被定义四、头文件的包含1.库头文件的包含2.本地头文件的包含3.嵌套包含头文件的解决方法使用条件编译指令使用预处理......
  • MobileNetv2网络详解
    背景:MobileNetv1中DW卷积在训练完之后部分卷积核会废掉,大部分参数为“0”MobileNetv2网络是由Google团队在2018年提出的,相比于MobileNetv1网络,准确率更高,模型更小网络亮点:InvertedResiduals(倒残差结构)LinearBottlenecks倒残差结构:ResidualBlock:ResNet网络中提出......
  • 帝国CMS中打印模板制作教程详解
    调用打印页面链接:模板中添加打印页面链接:[!--news.url--]e/DoPrint/?classid=[!--classid--]&id=[!--id--]指定使用打印模板的链接:[!--news.url--]e/DoPrint/?classid=[!--classid--]&id=[!--id--]&tempid=打印模板ID管理打印模板:登录后台,选择“模板......
  • Codeforces Global Round 27
    CodeforcesGlobalRound27总结A将红色的位置\((r,c)\)移走,分为三块来考虑,蓝色的块移动\(m-c\),黄色的块移动\(m*(n-r)\),绿色的块移动\((m-1)*(n-r)\)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#in......
  • 数据结构————map,set详解
    今天带来map和set的详解,保证大家分清楚一,概念map和set是一种专门用来搜索的容器或数据结构map能存储两个数据类型,我们称之为<key-value>模型set只能存储一个数据类型,我们称之为纯<key>模型它们的效率都非常非常高,我们来一个一个了解。二,详解map1,map的说明map是一个接......
  • hosts.allow与hosts.deny详解
    概述在Linux系统中,hosts.allow和hosts.deny都属于TCPWrappers的一部分,用于控制服务的访问权限。不过它们的应用方式有所不同:默认情况下,这两个文件都不会主动限制任何访问。也就是说,如果hosts.allow和hosts.deny文件中都没有任何规则配置,系统会默认允许所有连接......
  • .NET周刊【10月第4期 2024-10-27】
    国内文章C#实现信创国产Linux麦克风摄像头推流(源码,银河麒麟、统信UOS)https://www.cnblogs.com/shawshank/p/18494362随着国际形势变化,软件信创国产化迫在眉睫。本文介绍如何在国产操作系统上实现RTMP推流,包括摄像头和麦克风数据采集、编码、推送至流媒体服务器等。使用.NETCor......