从零开始学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的各种数据。(逻辑上)

接口:可以理解为一个功能。(物理功能)

配置:对接口的组合,在连接期间选定是那种组合。(逻辑上)

 

 

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

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值