从零开始学USB(七、端点、管道、接口、配置、设备)【转】
端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每个USB逻辑设备由一组独立的端点组成。每个逻辑设备都有一个由系统在设备连接时分配的唯一地址。设备上的每个端点在设计时都会得到一个唯一的设备确定的标识符,称为端点号。每个端点都有一个设备确定的数据流方向。设备地址,端点号和方向的组合允许唯一地引用每个端点。每个端点都是一个单一连接,支持一个方向的数据流:输入(in)(从设备到主机)或输出(out)(从主机到设备)。端点具有确定端点和客户端软件之间所需传输服务类型的特征。每个端点都有一定的属性,包括传输方式、总线访问频率、带宽、端点号和数据包的最大容量。
端点可以决定端点和客户端软件之间通讯所需要的传输服务类型。一个端点由一下内容来描述:
- 总线访问频率/延时要求
- 带宽要求
- 端点号
- 差错控制要求
- 端点可以接受或传递的最大分组
- 端点的传输类型
- 对于同步端点而言,还要包括端点和主句之间的数据传输方向
对齐进行配置之前,端点处于一种不确定的状态。所以只有在对其进行了配置工作之后,主机才能访问某个端点。
端点0要求:所有的USB设备都要拥有端点0,该端点用于对一个逻辑设备进行初始化和进行一般的操作(对逻辑设备进行配置)。端点0提供了对设备配置信息的访问权限,通过它还允许访问一般的USB状态和控制操作。端点0支持控制传输,并且总是在设备接入和上电时就进行配置。
管道(pipe):USB管道是设备上的端点与主机上的软件之间的关联。 管道表示通过内存缓冲区和设备上的端点在主机上的软件之间移动数据的能力。 有两种互斥的管道通信模式:
- 流:通过管道传输的数据没有USB定义的结构
- 消息:通过管道移动的数据具有一些USB定义的结构
USB不会解释它通过管道传输的数据内容。 即使消息管道要求根据USB定义构造数据,USB也不会解释数据的内容。
端点和管道的关系:
主机和 endpoint之间的数据传输是通过 pipe。 endpoint 就是通信的发送或者接收点,你要发送数据,那你只要把数据发送到正确的端点那里就可以了。端点也是有方向的,从 usb 主机到设备称为out 端点,从设备到主机称为 in 端点。
而管道,实际上只是为了让我们能够找到端点,就相当于我们日常说的邮编地址,比如一个国家,为了通信,我们必须给各个地方取名,完了给各条大大小小的路取名,比如你要揭发你们那里的官员腐败,你要去上访,你从某偏僻的小县城出发,要到北京来上访,那你的这个端点(endpoint)就是北京,而你得知道你来北京的路线,那这个从你们县城到北京的路线就算一条管道。有人好奇的问了,管道应该有两
端吧,一个端点是北京,那另一个端点呢?答案是,这条管道有些特殊,就比如上访,我们只需要知道一端是北京,而另一端是哪里无所谓,因为不管你在哪里你都得到北京来上访。没听说过你在山西你可以上访,你要在宁夏还不能上访了,没这事对吧。严格来说,管道的
另一端应该是 usb 主机,即前面说的那个 host。
端点不但是有方向的,而且这个方向还是确定的,或者 in,或者 out,没有又是 in 又是 out的,鱼与熊掌是不可兼得的。有没有特殊
的那,看你怎么去理解 0 号端点了,协议里规定了,所有的 USB 设备必须具有端点 0,它可以作为 in 端点,也可以作为 out 端点, USB 系统软件利用它来实现缺省的控制管道,从而控制设备。除了端点0,其余的端点在设备配置前,不能与主机通讯,只有向主机报告这些端点的特性并被激活后才能被激活。端点也是限量供应的,不是想有多少就有多少的,除了端点 0,低速设备最多只能拥有 2 个端点,高速设备也最多只能拥有 15 个 in 端点和 15 个 out 端点。这些端点在设备内部都有唯一的端点号,这个端点号是在设备设计时就已经指定的。
接口
接口和管道一样,是一个逻辑概念。一个Interface,可以理解为集成了键盘和鼠标的USB设备,里面就是两个interface,一个是键盘,另一个是鼠标。Interface之间通常是隔离的,互相不干扰。一个接口可以理解为一个功能。
配置
每个USB设备,可以有一个或多个配置(在probe期间,需要选择一种配置)。不同的配置体现出不同的组合接口。
比如一个MP4设备,可以有按键,视屏,音频,旋钮四种接口。
比如可以通过触摸屏调节音量,那个旋钮这个接口就可以取消,这样就组成了两种配置。
配置1:按键(接口)、视屏(接口)、音频(接口)、旋钮(接口)
配置2:按键(接口)、视屏(接口)、音频(接口)
每个接口都需要实现响应的驱动程序。
物理总线拓扑
USB上的设备通过分层星形拓扑物理连接到主机。 USB连接点由称为集线器的特殊类USB设备提供。 集线器提供的附加连接点称为端口。 主机包括称为根集线器的嵌入式集线器。 主机通过根集线器提供一个或多个附着点。 为主机提供附加功能的USB设备称为功能。 为防止圆形附件,分层对USB的星形拓扑进行排序。
可以将多个功能打包在一起,看起来是单个物理设备。 例如,键盘和轨迹球可以组合在一个包中。 在包装内部,各个功能永久地连接到集线器,它是连接到USB的内部集线器。 当多个功能与集线器组合在一个封装中时,它们被称为复合设备。集线器和连接到复合设备内集线器的每个功能都分配有自己的设备地址。 具有彼此独立控制的多个接口的设备被称为组合设备。 组合设备只有一个设备地址。 从主机的角度来看,一个复合设备与附加多个功能的独立集线器相同。
注意:协议中用两个单词分贝描述了复合设备和组合设备。其中,组合设备就是一个集线器下挂多个设备,但是只有一个设备地址。而复合设备虽然也是一个集线器下挂多个设备,每个设备都有自己的设备地址。
复合设备
组合设备
实际上,USB设备应该被视为不同的功能。多个功能可以被封装在一起形成一个物理设备。
复合设备其实就是几个设备通过一个USB Hub形成的单一设备,复合设备内的Hub和与Hub相连的各个功能会分配各自的设备地址。组合设备也就是具有多个接口的设备,每个接口代表一个独立的设备,但是组合设备只有一个设备地址。
采用复合设备方法开发多功能USB设备时,其开发过程同开发两种不同类型的USB设备相同,开发难度较低。
逻辑总线拓扑
当设备在分层星形拓扑中物理连接到USB时,主机与每个逻辑设备进行通信,就像它直接连接到根端口一样。。 即使大多数主机/逻辑设备活动使用此逻辑透视图,主机仍会保持对物理拓扑的了解,以支持处理集线器的删除。 删除集线器后,必须从主机的逻辑拓扑视图中删除连接到集线器的所有设备。
设备,配置,接口,端点的关系
一个设备通常有一个或多个配置;
一个配置通常有一个或多个接口;
一个接口通常有一个或多个设置;
一个接口有零或多个端点。
需要注意的是,驱动是绑定到USB接口上,而不是整个设备。所以一个设备的某个配置要有多个接口,主机这边就要有多个驱动。
最后,再次总结一下每个的主要作用。
端点:端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。(逻辑上)
接口:可以理解为一个功能。(物理功能)
配置:对接口的组合,在连接期间选定是那种组合。(逻辑上)
从零开始学USB(七、端点、管道、接口、配置、设备)【转】相关推荐
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- RK3399 CAN接口配置设备树(mcp2515)
RK3399 CAN接口配置设备树(mcp2515) kernel需先配置config,增加mcp2515支持, Networking support ---> CAN bus subsys ...
- 从零开始学USB(七、端点、管道、接口、配置、设备)
端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点.它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据.每个USB逻辑设备由一组独立的 ...
- 从零开始学USB(十九、USB接口HID类设备(一)_HID描述符)
USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备.这类设备包括鼠标.键盘等,主要用于人与计算机进行交互.它是USB协议最早支持的一种设备类.HID设备 ...
- linux设备usb节点和硬件接口,所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动......
原标题:所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动... 设备驱动最通俗的解释就是"驱使硬件设备行动".操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏 ...
- 从零开始学USB(二十二、USB接口HID类设备(四)_报表描述符Local类)
本地项目标签定义控件的特征. 这些项目不会转移到下一个主要项目. 如果Main项定义了多个控件,则可能会有几个类似的Local项标签. 例如,一个Input项可能有几个与之关联的Usage标签,每个控 ...
- 从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)
物理描述符也称作实体描述符.被用来描述设备的行为特性. 物理描述符是一种数据结构,它提供有关激活控件或控件的人体特定部分的信息. 例如,物理描述符可能指示右手拇指用于激活按钮5.应用程序可以使用此信息 ...
- 从零开始学USB(二十一、USB接口HID类设备(三)_报表描述符Global类)
Global Item 用于描述一个操作( Main Item )所用到的数据格式,它可以改变一个 state table 的量, 这个 state table 的参数用于修饰 Main Item . ...
- 从零开始学USB(一、基础知识1)
1.什么是USB? USB是Universal Serial Bus的缩写,中文译为通用串行总线. 正如USB的第一个单词表述的那样,为了通用. 那么我们看一下,还有哪些总线不是串行的,哪些是不通用的 ...
最新文章
- pythontkinter真实的例子_python小实例——tkinter实战(计算器)
- c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。...
- 如何将linux装入空白硬盘,如何将tiny core linux装入硬盘
- mysql5.718解压版安装_MySQL v5.7.18 版本解压安装
- getResourceAsStream总是返回null以及intellij总是提示Argument ‘inputStream‘ might be null
- 寻找数组中出现次数超过一半的数字
- IOS开发基础之NSURLSession的使用
- sudo 安装 常见错误
- CF868F Yet Another Minimization Problem
- Kinect开发学习笔记之(七)骨骼数据的提取
- Android知识总结——Path常用方法解析
- 电路计算机辅助设计上海电力学院,上海电力学院电路计算机辅助设计1.doc
- python 多线程ping_Python快速多线程ping实现
- 三种技术类型的3D摄像头大体总结 3D人脸识别
- 流媒体与实时计算,Netflix公司Druid应用实践
- 岩板铺地好吗_**岩板铺地「泉州泰亨石材供应」
- Android 读取短信内容(模拟器)
- ZDM2004工具式绘图软件v1.7 for AutoCAD2004 1CD(水电版)
- Python_matplotlib保存矢量图
- Android--kotlin基础(三)
热门文章
- SteamVR插件详解一:SteamVR_Controller脚本
- Docker安装和容器部署服务
- 多节点Linux环境打造(Windows版本)
- 解决问题的方法和途径-问题分析
- 有朋自远方来,不亦乐乎!
- 苏州市市区中低收入家庭住房供应管理实施细则
- 弱电系统服务器的选择,选择安全合适的服务器机柜才能更好地保护其中弱电设备...
- Intellij IDEA 中一次性折叠所有Java代码的快捷键设置 collapse all
- 一个有N个格子组成的直线道路,每次可以前进1格或者2格,一种有多少种方式可以走到终点?
- 搜狗上市总市值53亿美元;微信发布数据报告,9月份日活用户9亿丨价值早报