CoreJava 方法 map遍历 arrays redis常用语句 orm cron vue异步加载组件 angular视频 git视频教程 jquery去空格 大数据项目开发案例 拼接json字符串 git下载代码到本地命令 mysql查询结果拼接 matlab自然对数 python模块 python环境搭建 python图形化编程 python时间戳 python命令大全 python自定义异常 java入门 javaqueue java字符串替换 java判断文件是否存在 java获取时间 获取当前时间java vbscript程序员参考手册 js数组删除指定元素 HTML5从入门到精通 lol卡米尔 画图怎么添加文字 img写盘工具 深入解析windows操作系统 linux格式化硬盘 燃烧之血十字架 ps反选 codeblock 优酷app播放器下载
当前位置: 首页 > 学习教程  > 编程语言

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

2021/1/28 22:39:14 文章标签:

目录 1.中断传输包结构 2.中断传输DATA数据包实现同步操作 3.中断传输包详解 3.1中断读传输抓包 3.2中断写传输抓包 4.中断传输小知识 1.中断传输包结构 中断传输和批量传输类似,中断只由一个中断事务组成,中断事务包含令牌包、数据包、握手包&am…

目录

1.中断传输包结构

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

3.中断传输包详解

3.1中断读传输抓包

3.2中断写传输抓包

4.中断传输小知识


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.中断传输小知识

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

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

但是当我们设备类型是自定义HID设备,或者是自定义标准USB设备(使用中断端点实现),驱动会帮我们周期查询吗?因为自定义HID设备和自定义标准USB设备的数据请求是由用户软件来确定的,所以不需要主机周期查询。其实到了时间是否进行数据请求驱动需要查看IRP是否挂起(写驱动的大牛应该知道),根据IRP情况判断是否对设备进行数据请求操作。


1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。


本文链接: http://www.dtmao.cc/news_show_650050.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?