真的有一个“ USB通信协议”吗?


24

根据Wikipedia,USB:

定义总线,计算机和电子设备之间的连接,通信和电源所使用的电缆,连接器和通信协议

但是真的有一个“ USB 通信协议 ”吗?我的理解是:

  1. 您将USB设备连接到计算机(例如Ubuntu或任何类型的Linux)
  2. Linux找到该设备的设备驱动程序(以某种方式- 如果您知道,将获得额外的奖励!)并加载它
  3. 设备现在已连接到 /dev/theDevice
  4. 用户空间应用程序现在可以对其进行读写操作,/dev/theDevice并且驱动程序可以处理底层设备/硬件的底层IO

对我而言,在此流程的任何地方都没有出现“ USB通信协议”。如果我的理解是正确的,则USB只是PC和设备之间的电缆和电气连接。

我在这里错了吗?USB实际上执行某种底层协议来强调以上流程吗?如果是这样,它是什么?在30,000英尺的视线下它如何工作?


45
“驱动程序处理底层设备/硬件的低级IO”使用标准中的通信协议来完成。
EBGreen

29
哦...我读到的问题是“真的存在“ USB通信协议”吗?” 因此答案将是。如果您想知道实际的通信协议是什么,只需阅读标准。或阅读链接到的Wiki页面上的第11节。
EBGreen

6
“ USB只是PC和设备之间的电缆和电气连接”。以太网电缆只是PC与交换机/路由器/任何设备之间的电缆。仍然有一些协议用于通过这根电缆进行通信,并用它做有用的事情。
ysdx

13
“ Linux找到了该设备的设备驱动程序”您如何看待Linux能够检测到另一端连接了哪个设备。可能是一个通用协议?
支出者

4
@Ramhound“至少在以太网情况下,这些通信协议独立于标准。” 这是错误的。以太网协议(物理层和MAC层)是由IEEE以太网标准(具体来说是802.3标准)定义的。当然,可以(并通用)通过6类电缆通过以太网发送除以太网协议以外的其他内容, RJ-45连接器,但那时不再是以太网。例如,这是非VoIP电话系统的常见做法。
reirab

Answers:


47

是的,请参阅USB协议

据我了解,USB规范定义了一组复杂的分层协议和设备配置文件。

例如,USB设备可以符合大容量存储,键盘(或人机接口设备等)之类的高级模板,并由通用设备驱动程序进行管理。某些USB设备可以在较低级别进行通信,因此操作系统低级USB支持可以识别出需要特定于设备的高级驱动程序。


30

问:是否有运行中的低级USB通信协议,它是什么?

回答:

是的,USB规范包括USB协议,该协议定义了比特级总线的使用方式。这将是“低级”协议,它是较高级协议(例如大容量存储,HID等)的基础。

有关USB协议如何工作的详细信息,此OSDev Wiki非常有用。这是另一个有趣的描述,使用序列图描述了每个USB协议的各种数据事务。

奖励问题:Linux如何找到并加载该设备的设备驱动程序?

奖励答案:

'在Linux上,当使用支持USB的内核时,由于USB规范,将通过硬件内核检测到可用的USB设备。在硬件方面,检测是通过USB主机控制器完成的。然后,在内核中,主机控制器驱动程序接管并将线路上的低级位转换为USB协议格式的信息。然后,此信息将填充到内核的USB内核驱动程序中。”

我对这篇出色的Opensourceforu文章进行了解释,该文章对您在Linux环境中的问题有更多的细节和清晰的了解。


7
我希望“奖金问题”对您来说意味着“赏金”。
dotancohen

@projectdp-如果您将主要参考文献中的某些信息放入答案本身,这将非常有用。
Ramhound

@Ramhound-感谢您的反馈,我以更有用的方式重写了我的答案。至于从资源中添加更多信息,您希望看到哪些与问题相关的信息?
projectdp

14

与几乎所有其他类型的通信接口一样,USB被实现为协议。USB标准本身定义了所有或多种类型的设备共有的堆栈中的级别,这既可以实现兼容性,又可以防止每个设备进行冗余协议设计。此外,该协议的每一层都提取了下一层不需要担心的细节。因此,当您实际编写设备特定的层时,您仅具有通用的“发送”和“接收”功能即可将数据从端点A传输到端点B。作为设备设计人员,您不必在意这是怎么发生的。此外,协议栈中的较低级别可以更改实现,只要它们向其上方的层公开一个公共接口即可。这样,当协议栈的一部分发生更改时,协议栈的其余部分不必更改。在堆栈的较低级别使用哪种协议。一般而言,堆栈中的每个连续层都将在发送消息时将第二层生成的消息封装在其自身的有效负载字段中。收到消息后,每一层都会剥离与该层相关的部分,并将其有效负载转发到堆栈中的下一个适当的层。这不仅适用于USB,而且适用于几乎所有通讯总线。例如,TCP / IP /以太网堆栈可能是最常用的堆栈。给定层通常负责的任务在模型中描述,例如OSI模型

在USB中,有一个物理层协议定义了电压状态/时序/等。以及如何解释它们。显然,此协​​议本身必须是USB标准的一部分,而不是特定于给定设备的(特别是因为主机无法知道将要插入给定USB端口的设备类型)。

接下来,有一个总线管理协议,用于描述谁可以在总线上通话。在OSI模型中,这称为媒体访问层。在USB中,这一层几乎可以归纳为“设备可以在主机通知时发送数据”,因此USB中的这一层没有特别复杂的协议。

接下来,有一个用于描述数据包以及如何将其从发送方路由到接收方的标准协议。该层也必须是USB标准本身的一部分,以便在主机实际知道特定类型的设备之前就可以进行初始通信,以发现已连接的设备类型。除了在此层具有特定ID的每个设备外,USB中还包含端点ID的概念。这允许任何给定的设备具有多个USB端点,这些端点通过标准USB堆栈进行多路复用和多路分解,这与套接字通过标准TCP / IP堆栈进行多路复用和多路分解的方式非常相似。应用程序可以将这些端点中的每一个视为单独的数据流。

最后,还有为设备本身定义的协议。请注意,实际上,一些通用的使用案例(例如大容量存储设备,鼠标,键盘等)已包含在USB标准中,作为USB标准的一部分,因此每个设备制造商都不必重新发明它们。轮。但是,更复杂的设备可以在此层自由设计自己的自定义协议。对于给定的传输,该层的输出在上一层作为数据包的有效负载传递。请注意,对于足够复杂的设备,协议的特定于设备的部分本身可以分为多个独立的层,但是较低的级别不必知道或关心它。他们需要知道的是,他们需要将一组给定的字节从主机传递到特定的设备端点,或从特定的设备端点传递到主机。同样,在各层之间具有标准接口可以使关注点分离,因此一层不必关心另一层的内部工作原理,而只需要关注应该传递给或期望从其上一层或另一层接收的特定数据即可。在堆栈下面。


9

实际上,存在一组交互的相关通信协议。

在最低级别上,有一个协议描述了如何通过串行连接发送字节数据包。这对于所有USB设备都是常见的(但USB2和USB3之间有所不同)。

发送的第一个数据包之一要求设备描述自己。为了防止出现“鸡与蛋”问题,所有USB设备的识别协议都相同。操作系统可以使用此标识来加载正确的驱动程序。

在另一个层次上,USB是总线,这意味着多个设备必须共享带宽。这意味着有一个协议告诉每个设备何时可以通话,何时不可以通话。由于所有USB设备都必须遵守此规范,因此使用通用协议来安排此规范。

最后,许多简单的USB设备是如此简单,以至于存在描述整个设备类别的附加协议(鼠标,键盘,存储设备,以太网适配器等)。大多数设备支持零或这些功能协议之一。


“ USB是一条总线,这意味着多个设备必须共享带宽” –当OP仅对问题使用点对点设置时,该点已被忽略。由于两个(或更多)USB设备可以共享与主机PC的电缆,因此我们可以推断出必须有一个协议。
木屑

@sawdust既然它可以工作(甚至点对点),我们可以推断出有一个协议。例如,如果没有标准协议,则无法进行设备发现。
reirab 2015年

确实存在一种通信标准,因此它的核心是串行通信Universal Serial Bus
Ramhound

@Ramhound是的,就像大多数现代总线设计一样,除了存储器接口外,USB都使用串行差分对进行数据传输。USB <= 2.0具有一个差分对,而USB 3具有两个附加的差分对(一个用于SuperSpeed传输,另一个用于SuperSpeed接收,允许每个方向以5 Gbps进行全双工通信。)
reirab,2015年

我只是以为我会将串行总线指向该标准的核心,因此作者似乎并未意识到这一事实,因此提出了问题。
Ramhound

5

答案的一部分也许在短语“ 通信协议 ” 的定义之内。使用与您相同的资源(维基百科),您会找到有用的信息,例如:

  • 为了进行通信,必须达成协议。
  • 通讯系统使用定义明确的格式(协议)来交换消息。
  • 协议必须定义语法,语义和通信同步。
  • 因此,协议可以实现为硬件,软件或两者。

想想看一个简单的方法是,协议是一个预先定义并在做事的方式一致,在这种情况下,事情是如何进出一个USB连接的设备的移动数据。在硬件方面,每个引脚都有一个预定义的电压电平和使用协议,每种设备的每个引脚都有一个预定义的使用协议,并且每个数据包都有一个预定义的语法和数据格式。还包含一个通信握手协议。这些都是使用USB设备(也称为USB协议)的标准集合的所有部分。,由USB Implementers Forum,Inc.的成员决定(即设计,提议,辩论,修订并最终同意)

所以,是的,有一个USB协议,或者更正确地存在一些预先定义并在USB协议约定小号不同的USB用途。


1
1.过程通信的涉及(至少)三个要素:(1)编码/发送(2)接收/解码(3)_information_(而不是随机噪声)。如果缺少这三个元素中的任何一个,则该过程将失败。还可以存在其他元素,例如反馈,媒体(渠道)和上下文。消息来源:我的学位之一是传播学
OMY,2015年

1
2. SETI与沟通无关,而与探索与发现有关。即使我们确实检测到真实的制造信号,也无法保证我们会理解该信号或能够与发送方进行通信。消息来源:[SETI使命宣言] [1] [1]: seti.org/about-us
OMY,2015年

1
3.跨浏览器兼容性通常是由于(a)浏览器制造商遵循协议,或者(b)编写不当的协议导致实现存在缺陷(例如,考虑臭名昭著的IE盒模型错误,另请参见< quirksmode.org>)。没错,我们现在有了HTML 5和CSS 3,因为协议需要改进。消息来源:拥有并经营我自己的网络开发公司已有很多年了
OMY 2015年

1
4.首先,在频率上“同步”的无线电信号使用AM(振幅调制)协议。FM(调频)无线电信号“同步”到时间积分。FM系统的协议涉及固定动态元素来处理信息。动态元素是可变频率设置,它被限制在预定义的有限频率范围内。
OMY,2015年

1
固定元素是用于调制和解调信号的数学公式。无论这些频率是什么频率,这些公式都是恒定的,并且可以通过模拟硬件或数字软件来实现以处理信号。消息来源:个人经验,
既是
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.