USB四种传输方式_usb块传输和控制传输-程序员宅基地

技术标签: 嵌入式Wince  

原文地址:USB四种传输方式 作者: 蒙美麦兔
  USB定义了4中传输类型

  控制传输:可靠的、非周期的、由主机软件发起的请求或者回应的传输,通常用于命令事物和状态事物。

  同步传输:在主机与设备之间的周期性的、连续的通信,一般用于传输与时间相关的信息。这种类型保留了将时间概念包含于数据总的能力。但这并不意味着传输这样的数据的时间总是很重要,基传输并不一定很紧急。

  中断传输:小规模数据的、低速的、固定延迟的传输。

  批量传输:非周期的、打包的、可靠地传输。一般用于传输那些可以利用任何带宽,以及在没有可用带宽时,可以容忍等待的数据。

  控制传输:

  控制传输允许访问一个设备的不同部分。控制传输用于支持在客户软件和他的应用之间关于设置信息、命令信息、状态信息的传输。控制传输由以下几个事物组成:

  a.建立联系,把请求信息从主机传到他的应用设备;

  b.零个或多个数据传输事物,按照a事物中致命的方向传输数据;

  c.状态信息回传,将状态信息从应用设备传到主机。

  Setup包的数据格式属于一个命令集,这个集合能保证主机和设备之间正常通信。这个格式允许一些销售商对设备命令进行扩展。Setup包后的数据应具有USB定义的格式,除非这个数据是销售商提供的信息,回传的状态信息荏苒具有USB定义的格式。

  控制传输使用的是消息通道上的双向信息流。所以,一旦一个控制通道被确认之后,这个通道就试用了具有某个端点号的两个端点,两个断电,一个输入,一个输出。

  控制传输的端点决定了他所能接收或发送的最大数据静净负荷区长度。Setup后的所有数据包都要遵守这个约定,这个约定是针对这些数据包中的数据净负荷区的,不包括包中的协议要求的额外信息。

  对于缺省控制通道的最大数据区长度,USB系统软件要从设备描述器的头8个字节中读出,设备将这8个字节放在一个包中发出,其中7个字节包含了缺省通道的 wMaxPackSize。对其他的控制端点来说,USB系统软件在他们被设置后,获得此长度,然后USB系统软件就会保证数据净负荷区不会超长。另外,主机总是认为数据净负荷区的最大长度至少为8.

  当端点做了两件事时,可以认为控制传输的数据阶段接收:

  已经传了由Setup阶段指定的数据量

  传了一个数据包,它的长度为零火他的数据区长度小于最大长度。

  数据阶段结束后,主机控制器进入状态阶段,而不是开始另一个数据传输。如果他不这样做,端点会认为通道脱线而中止通道。如果主机在状态阶段收到一个大于最大长度的数据区,那么请求这次传输的IRP将被中止。

  控制传输主要用于发送和接收与USB设备的配置信息有关的数据,如设置设备地址、读取设备描述符等。USB协议采用了差错控制和重试机制来保证控制数据传输的正确性,还使用 DataToggl讯制来确保整个传输过程中,主机与设备同步。

  所有USB设备都必须支持控制传输,并且都将端点0构成的管道作为缺省控制管道。当设备首次连接到主机上时,就使用缺省控制管道传输USB设备的确认信息、状态信息以及控制信息。控制传输的优先级最高。控制传输至少有两个事务阶段:建立阶段和状态阶段,在两者之间可能存在数据阶段。建立阶段,建立事务向外设的控制端点传输信息,PID是SETUP,数据的PID使用DATAO。收到建立的外设必须接受,并向主机发送ACK信号;如果数据被损坏则将其丢掉,不返回ACK信号。

  控制传输如果存在数据阶段的话,所有的数据阶段的事务必须有相同的方向,在数据阶段中要发送的数据大小和方向在建立阶段给出。控制传输的状态阶段是序列中的最后一个操作,并且其传输的方向总是与数据流的方向相反,其PID总是DATAI。控制传输使用的是消息怜道式是双向信息流,一旦确认了一个控制管道之后,该管道就使用端点号相同的输入端点和输出端点,该端点也就决定了它所能接收或发送的最大数据净负荷区,即数据包中所能加载的数据大小。

  批量传输

  批量传输的数据是流,主要是利用USB总线的空闲带宽进行数据传输的,可以在不确定的时间内传输大量数据,适合于数据量大,而对时间和传输速率要求不高的场合。批量传输时,有数据错误检查机制,如果数据包传输过程出错,则会重新发出数据包。在一个空闲的总线中,批量传输是速度最快的传输类型。只有全速与高速设备,才支持批量传输。通常打印机、扫描仪、USB硬盘、电子盘等设备都使用批量传输模式。

  中断传输

  由于USB不支持硬件的中断,所以必须靠PC主机周期性地轮询,以便获知是否有设备需要传送数据给PC。由此可知道,中断传输仅是一种轮询的过程,而非过去我们所认知的中断功能。而轮询的周期非常的重要,因为如果太低的话,数据可能会流失掉,但反之太高的话,则又会占去太多的总线带宽。对于全速装置(12Mbps)而言,端点可以设定 Ilns至255ms之间的轮询间隔。因此,换算可得全速装置的最快轮询速度为IKHz。另外对于低速设备而言,仅能设定10ms至255ms的轮询间隔,如果因为错误而发生传送失败的话,可以在下一个轮询期间重新再传送一次。

  应用这种传输类型的有键盘,摇杆或鼠标等称之为人机接口装置(HID)。其中,键盘是一个很好的应用例,当按键被按下后,可以经由PC主机的轮询将小量的数据传回给主机,进而了解到哪个按键刚被按下。

  同步传输

  同步传输提供了确定的带宽和间隔时间(latency)。它被用于时间要求严格并具有较强容错性的数据流传输,或者要求恒定数据传送率的即时应用中。同步数据要求确定的带宽值和确定的最大传送次数。对于同步传送来说,即时的数据传递比完美的精度和数据的完整性更重要一些。应用这类型的传输装置有:USB麦克风、喇叭等装置,如此可以确保播放的频率不会被扭曲。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuyusheng314/article/details/55667354

智能推荐

kthread_work和kthread_worker机制-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏20次。最近在看spi的驱动,驱动中有一个队列化机制,看起来不是很懂,所以就整理了下这块的内容,即kthread_work队列化机制,其实也可以理解为一种内核线程机制。我们首先来分析一下下面两个结构体kthread_worker 和 kthread_work 。结构体分析kthread_worker数据结构定义在:include/linux/kthread.hstruct kth..._kthread_worker

【面经分享】Android 开发面经_android开发面经-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏14次。持续了大半个月的面试终于结束了,年后回来,从2月9号到3月1号,一直陆陆续续有面试邀约,不得不说,一边在职承受工作压力,另一边还要承受面试找工作压力,双重压力下,多多少少有点难顶,但是,收获offer还是比较满意的,拿下了网易、小米的offer,着实有点可惜的是字节跳动,倒在了三面,只能说自己还是太菜,以后还需要继续努。这期间只投递了互联网中大厂,面试并不多,以下是我在这大半个月以来的面试经历,发出来总结一波,也供大家参考参考!面试均为Android开发,社招岗。_android开发面经

攻防世界-baby_web详解_攻防世界baby_web-程序员宅基地

文章浏览阅读8.5k次,点赞6次,收藏14次。baby_web题目描述:想想初始页面是哪个根据提示我们尝试/index.php页面:发现网页直接跳转到1.php我们尝试抓包分析抓包:(index.php)点 Foward放过当跳转到1.php时放到repeater模块发现flag但是隐藏了falg:flag{very_baby_web}..._攻防世界baby_web

WebClient 连接池配置_webclient连接池-程序员宅基地

文章浏览阅读6.5k次,点赞2次,收藏11次。背景项目中调用第三方接口,第三方接口响应时间不稳定,并且并发越大响应时间越长,如果使用BIO模式可能会导致服务器连接占用过高,所以采用WebClient NIO模式来调用第三方接口。连接池相关配置maxConnections:最大连接数,默认最大连接数为处理器数量*2(但最小值为16),最大只能设置为200,超过这个数值设置无效。pendingAcquireMaxCount:等待队列大小,默认是最大连接数的2倍,等待队列pendingAcquireMaxCount调大,同时处理的任务数等于最大连接数_webclient连接池

基于深度学习的番茄叶片病害检测系统(含UI界面、yolov8、Python代码、数据集)_深度学习叶片病害检测-程序员宅基地

文章浏览阅读1.9k次,点赞31次,收藏44次。本文将详细介绍如何以官方yolov8为主干,实现对鱼类的检测识别,且利用PyQt5设计了简约的系统UI界面。在界面中,您可以选择自己的视频文件、图片文件进行检测。此外,您还可以更换自己训练的主干模型,进行自己数据的检测。该系统界面优美,检测精度高,功能强大。它具备多目标实时检测,同时可以自由选择感兴趣的检测目标。本博文提供了完整的Python程序代码和使用教程,适合新入门的朋友参考。您可以在文末的下载链接中获取完整的代码资源文件。数据集总共包含以下类别,且已经分好文件夹,也提供转好的yolo。_深度学习叶片病害检测

Java面试复习2 java的多态,异常处理及常用API(String,StringBuffer,StringBuilder类,Math类)_java stringbuffer 异常处理-程序员宅基地

文章浏览阅读365次。Java面试复习2 java的多态,异常处理及常用API声明:本面试复习都基于一本未署名的Java面试宝典所述,根据自己的理解写出了这一专栏的复习博客Java中实现多态的机制是什么?简单来说就是定义一个父类的,或者接口类型的引用变量指向子类或者接口实现类的实例对象现在A是B的父类 Public A a = new B();这就是一种多态性的体现通过这种方式,父类定义的变量可以调用子类中的..._java stringbuffer 异常处理

随便推点

Hadoop集群搭建,大数据开发开发入门与实战-程序员宅基地

文章浏览阅读836次,点赞22次,收藏11次。己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

电商API数据接口1688alibaba接口item_search_img-按图搜索1688商品(拍立淘)接入演示-程序员宅基地

文章浏览阅读506次,点赞5次,收藏7次。如:https://img.alicdn.com/imgextra/i3/15353738/TB2HDHAqN9YBuNjy0FfXXXIsVXa_!请求参数:imgid=http://g-search3.alicdn.com/img/bao/uploaded/i4/O1CN01IDpcD81zHbpHs1YgT_!替换为您的应用的api_key和api_secret,将imgid替换为您要上传的图片文件路径。参数说明:imgid:图片地址(使用淘宝upload_img接口上传图片,返回图片地址)

C++ STL 如何调堆【两种方法】 看了就懂_stl 堆-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏6次。C++ STL 堆的调取记住掉STL里的东西要在前面加上use namespace std;。1.优先队列这个堆我想应该是最常用的,因为写起来方便,但是时间效率上不高,往往比手写的多一个系数。所以本人不是很喜欢用。 需要用到algorithm这个库。定义: priority_queue<存储类型> 变量名称,例如priority_queue< int..._stl 堆

决策单调性优化dp学习笔记_【算法笔记】决策单调性优化dp-程序员宅基地

文章浏览阅读333次。文章目录从例题开始SolutionCode注意事项(特别重要!)模板题练习题最后几天多写几篇博客,总结一下拼搏的这一年,曾经并不是那么熟练的内容,顺便熟悉一下我的神奇键盘从例题开始HDU3507Solution首先,状态设计十分显然: dpidp_idpi​表示前iii个数的答案。状态转移也十分显然: 枚举最后一段的左端点lll,则dpi=dpl−1+(∑j=liaj)2+Mdp_i=dp_{l-1}+(\sum_{j=l}^i a_j)^2+Mdpi​=dpl−1​+(∑j=li​aj​)2+_【算法笔记】决策单调性优化dp

java读取txt文本,字符串截取-程序员宅基地

文章浏览阅读2k次。package com.test;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;..._java读取text 文本 中文字符长度截取问题

如何在linux上下载各种常用安卓应用_麟卓卓懿下载-程序员宅基地

文章浏览阅读6.1k次。随着互联网的发展,在很多场合中或者工作中都会用到linux系统,但常用linux的小伙伴们都知道,linux对各个常用的安卓应用兼容性很差,基本上好多应用只有简易的网页版,例如微信、QQ、钉钉等,网页版的很多功能都没办法使用,这给我们的工作带来了很多不便。这里呢我就给大家推荐一个完美兼容linux系统环境的平台–麟卓卓懿应用商城。麟卓卓懿应用商城支持海量安卓应用无缝透明运行在Linux平台上,实现移动应用生态和桌面应用生态的完美结合。麟卓卓懿应用商城的应用中心中可以下载海量的安卓应用,并且应用种类多、平_麟卓卓懿下载