Pipe

USB的pipe的两端分别指的是USB host端的内存区域,和设备端的endpoint。

pipe分为两类,一类是stream pipe, 另一类是message pipe。
两类的主要区别是,message pipe发送的数据,都是usb协议里规定好的结构,而steam pipe发送的数据则没有什么要求。
还有一个重要的概念就是,message pipe要求IN和OUT,而且必须是一个endpoint支持IN,OUT,也就是要求全双工。所以endpoint 0的control transfer就总是message pipe。但是只能是endpoint 0可以使用control transfer么?其实不是,除了endpoint 0之外,其实还可以有其他endpoint支持全双工,这就根据设备的支持了,一般这么用的比较少。下面介绍control transfer的时候会介绍到。
 
Transfer
USB协议规定了4种transfer,分别为control transfer, isochronous transfer, bulk transfer, interrupt transfer.
一个transfer由多个transaction组成,一个transaction由多个packet组成。
 
control transfer
一个control transfer由SETUP, DATA, STATUS三种transaction组成,其中SETUP是由host -> device, STATUS是由device -> host。DATA是可有可无的,DATA的传输方向也是由SETUP里去指定的。
control trnasfer属于message pipe, 里面传输的数据都是定义好了的结构体,比如set configuration之类。
一个device必须有一个control transfer,也就是使用的endpoint0,但是device不见得只有一个control transfer,也可以有其他的全双工的endpoint去运作附加的control transfer。
 
SETUP transaction的数据都是USB协议定义好的结构体,这个结构体允许vendor指定自己的专门设备的一些command。DATA transaction如果有的话,就跟在SETUP后面,其也有一个USB定义好的结构体,除非传输的是vedor指定的信息。最后是STATUS transaction,这个也是有USB协议规定好的。
 
基于control transfer的endpoint决定了最大的packet大小,full-speed的设备为8, 16, 32, 64个bytes, high-speed设备支持64 bytes, low-speed为8bytes.这个包的最大size决定于wMaxPacketSize。这个wMaxPacketSize是在device descriptor里,所以正确的读取顺序为,先读8个bytes,解析后得到wMaxPacketSize后,再去用真实的size继续操作。
 
还有一点,这个wMaxPacketSize,也就是max packet大小,指的是DATA transaction里的真实data filed的size。像SETUP,STATUS这些transaction,都是USB定义好的,所以size也是固定的,所以就跟这个最大size没有关系了。如果传输的数据大于packet的max size里,那就分多个packet。

 

USB 传输协议的更多相关文章

  1. USB传输协议。——Arvin

    问题一:USB的传输线结构是如何的呢? 答案一:一条USB的传输线分别由地线.电源线.D+.D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS的5V电平不同),而电源 ...

  2. USB HID 协议入门

    转载请注明来源:cuixiaolei的技术博客 USB HID设备类的应用场合 USB HID类是USB设备的一个标准设备类,包括的设备非常多.HID类设备定义它属于人机交互操作的设备,用于控制计算机 ...

  3. 基于 USB 传输的针式打印机驱动程序开发

    1.引言 针式打印机曾经在相当长的一段时间占据打印机市场的主导地位,但是近年来由于喷墨.激光等非击打式打印机的冲击,针式打印机的市场份额逐年下降.即便如此,由于针式打印机在票据打印领域的不可取代性,同 ...

  4. Bulk-Only传输协议 UFI命令块规范

    USB设备分为5大类,即显示器.通信设备.音频设备.人机输入和海量存储.通常所用的U盘.移动硬盘均属于海量存储类.海量存储类的规范中包括4个独立的子规范,即CBI传输.Bulk-Only传输.ATA命 ...

  5. SSD的传输总线、传输协议、传输接口

    前言:关于SSD,有众多总线类型.协议类型.接口类型,每个接口还包括不同型号,在这里花点时间全部整理一下,整理日期2017-08-08. 1.传输总线 总线就像一条公路,公路上的车好比总线上的电信号: ...

  6. USB通讯协议

    首先要了解USB枚举过程(自己百度) https://blog.csdn.net/MyArrow/article/details/8270029 USB通讯协议 0. 基本概念 一个[传输](控制.批 ...

  7. QQ传输协议分析

    2015-06-16 16:27:07 一. 实验目的: 在虚拟机下NAT模式下通过Wireshark抓包,分析QQ的传输模式.了解QQ在传输信息过程中用到的协议.分析在Nat模式下,信息传输的穿透性 ...

  8. 【转】安全传输协议SSL和TLS及WTLS的原理

    一.首先要澄清一下名字的混淆 1.SSL(Secure Socket Layer)是Netscape公司设计的主要用于WEB的安全传输协议.这种协议在WEB上获得了广泛的应用. 2.IETF将SSL作 ...

  9. HTTPS----安全超文本传输协议

    HTTPS协议详解HTTPS以保密为目标研发,简单讲是HTTP的安全版.其安全基础是SSL协议,因此加密的详细内容请看SSL.全称Hypertext Transfer Protocol over Se ...

随机推荐

  1. Android中SensorManager.getRotationMatrix函数原理解释

    SensorManager是Android中的一个类,其有一个函数getRotationMatrix,可以计算出旋转矩阵,进而通过getOrientation求得设备的方向(航向角.俯仰角.横滚角). ...

  2. Android创建和使用数据库详细指南(1)

    http://database.51cto.com/art/200903/113334.htm 数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你 ...

  3. BZOJ 1064 假面舞会

    http://www.lydsy.com/JudgeOnline/problem.php?id=1064 思路:第一眼看的时候以为是差分约束,但是是做不了的,不过能保证的就是这题绝对是图论题...(废 ...

  4. T-SQL 游标

    游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 在性能上,游标会迟更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量. 用一个比喻来说明为什么游标会占 ...

  5. Android Fragment中使用Intent组件拍照

    要在activity里面去接受,然后传递给fragment对象,fragment有很多回调调用不到 你的设备有摄像头吗? 为了确保市场上的大多数设备都能运行你的程序,必须在项目中做一些检测,保证使用的 ...

  6. bzoj3407 [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题

    Description     贝茜像她的诸多姊妹一样,因为从约翰的草地吃了太多美味的草而长出了太多的赘肉.所以约翰将她置于一个及其严格的节食计划之中.她每天不能吃多过H(5≤日≤45000)公斤的干 ...

  7. webpack配合vue.js实现完整的单页面demo

    本篇文章主要是我在开发前研究了webpack+vue.js的单页面应用,因为需要用到node的npm,所以确保安装了node,建议官网安装最新的稳定版本.并且在项目中需要加载一些npm包,由于npm的 ...

  8. yum安裝的包如何保留到本地

    一, 很多时候,我们一直用yum安装的软件,但是毫无疑问,很多人都会想yum安装的软件的包存放在哪里了呢? 这是因为yum默认并不保存你所安装的包,那么如何才能保留安装的软件包呢? 方法很简单:修改y ...

  9. zepto的touch.js左右滑动存在一些问题,用百度的touch.js代替

    这几天用zepto想写一个移动端的活动,在实现左右滑动触发动画时,发现zepto的touch.js在ios的微信上有问题. 问题描述:左右滑动时如果手指没有一直跟频幕贴着(在手机上滑动时,如果手指不是 ...

  10. null值的判断

    select * from Students where Address IS null --判断address是nulselect * from Students where Address is ...