基于Linux的USB子系统学习 --- <基础知识与USB协议概述> ing

一、参考资料

  1.《USB基础知识概论》 

    http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

  2.《USB
in a NutShell》

    http://www.beyondlogic.org/usbnutshell/usb1.shtml

  3.《USB开发大全(第四版)》

    http://download.csdn.net/download/qqqq419276485/7839403

二、USB基础知识

2.1 USB硬件知识

  从物理上的逻辑结构来说,USB设备包含了主机Host端设备Device端。其中,主机Host端,有对应的硬件的USB的主机控制器Host
Controller
;而设备端,连接的是对应的USB设备。USB的主机控制器有四种类型,分别是OHCI和UHCIEHCI,和xHCI,它们之间的区别和联系如下表所示。

  USB2.0的标准接口引脚定义如下,包含一根电源线,一根地线,两根信号线。USB3.0的接口引脚较多,在此不再展开,可参考文章《USB
2.0 A型、B型、Mini和Micro接口定义及封装》 和《USB 3.0连接器引脚、接口定义及封装尺寸》。值得一提的是,目前多数手机厂商已宣布统一使用Micro USB接口作为手机充电器标准接口

2.2 USB软件知识

  要使USB设备正常工作,除了硬件之外,还需要软件的支持。对于USB设备端来说,内部是需要有对应的设备端驱动,称其为固件Firmware,它实现了设备端USB所要做的事情,主要是相应一些标准的请求,完成对应的数据读取和写入等。对应的,在主机Host端,也需要对应的驱动,此部分驱动,不论是Linux下,还是Windows下,都已经实现了常见的驱动了,所以一般来说,很少需要驱动开发者再去写相关的驱动。

  在设备驱动开发阶段或者USB出现问题,需要调试的时候,往往就需要一些USB调试工具了。一般来说,都包含了对应的USB硬件测试工具,加上对应的软件工具,去捕获对应USB总线上的数据,即所谓的USB抓包,然后再去分析抓取出来的数据,是否是期望的,是否符合USB协议的规范定义。另外,当然也有一些USB开发相关的工具,具体工具可在网上查询。

三、USB协议概览

  关于USB 2.0和USB 3.0等USB的协议规范,可以去官网下载:

http://www.usb.org/developers/docs/

USB协议的文档页数很多,没必要看完整个USB标准。此处,就来简单以USB 2.0规范为例,分析一下,具体其都主要包含哪些内容。你会发现,其实和USB协议本身相关的内容,相对则不会那么多,大概只有97页左右的内容,是我们所要关心的。

附录1:USB 2.0标准协议规范笔记

第4章 架构概述

  本章显示了通用串行总线(Universal Serial Bus, USB)架构和重要概念的概述。USB是一种有线总线,支持主机计算机和大范围同时可访问的外设之间数据交互。附属的外设通过一种主机调度和基于令牌的协议共享USB带宽。总线允许外设在主机和其它外设在操作时依附,配置,使用和分离。

4.1 USB系统描述

  USB系统被描述为三种定义域:

 > USB互连

 > USB设备

 > USB主机

  USB互连是USB设备和主机之间连接与通信的方式。包括下列部分:

 > 总线拓扑:USB设备与主机之间的连接模型。

 > 内层联系:In terms of a capability stack, the USB tasks that are performed
at each layer in the system.

 > 数据流模型:系统中数据通过USB在产生者与消费者之间移动的方式。

 > USB调度:USB提供了共享的内部连接。访问内部连接是被调度的,为的是支持同步数据传输并消除仲裁开销。

4.1.1 总线拓扑

  USB物理层内部连接是一种分层的星状拓扑。USB hub位于每个星的中心。图4-1阐述了USB的拓扑。

  由于对于hub和线缆传播时间的所允许时间的约束,所允许最大的层次数是七层(包括root层)。由于七层的约束,主机和任何设备之间的一条通信线路中最多支持5个非root hub。如图4-1中的组合设备,占据了两层,因此如果依附在第七层,它不能被使能。在第七层,只有功能(即图中所表示的Func)可以被使能。

第5章 USB数据流模型

5.1 实现者视角

  图5-2显示了一个较深的USB视图,特别的,有四个重点实现区域:

 > USB物理设备:USB线尾端的一小块硬件,执行一些有用的终端用户功能。

 > 客户端软件:在主机端执行的软件,响应USB设备。这个客户端软件典型地由操作系统提供或伴随USB设备提供。

 > USB系统软件:在特定操作系统中支持USB的软件。USB系统软件典型地由操作系统提供,独立于特定的USB设备或客户端软件。

 > USB主机控制器(主机端总线接口):使得USB设备可以被连接到主机的硬件和软件。

  如图5-2所示,主机到设备的简单连接需要许多层与实体之间的交互。USB总线接口层提供主机与设备间的物理/信号/数据包的连接性。USB设备层是USB系统软件具有的视角,为的是与设备间执行通常的USB操作。功能层通过一个恰当匹配的客户端软件层,向主机提供附加的能力。从层内视角来看,USB设备层和功能层都有一个逻辑上的通信,而实际上使用的是USB总线接口层来完成数据传输。

  物理视角的USB通信如章节6、7和8中所描述,与章节9和10所讲述的逻辑视角通信有关联。本章讲述这些影响USB实现者的关键概念,应该被所有人阅读。

  为了描述和管理USB通信,下列概念是重要的:

 > 总线拓扑:5.2讲述了USB主要的物理和逻辑组件,以及它们如何相互关连。

 > 通信流模型:5.3到5.8讲述了主机与设备间通过USB是如何通信的,定义了四种USB传输类型。

 > 总线访问管理:5.11讲述了主机内的总线访问是如何被管理的,以支持USB设备大范围的通信流。

 > 等时传输的特殊考虑:5.12讲述了USB对于需要等时数据传输设备的特殊性。对于非等时传输的设备实现着不需要阅读5.12。

5.2 总线拓扑

  USB拓扑有四个主要部分:

 > 主机与设备:USB系统的主要组件

 > 物理拓扑:USB单元如何连接

 > 逻辑拓扑:多种USB单元的角色和职责,从主机和设备视角来看USB如何呈现

 > 客户端软件到功能的关联:客户端软件同与它相关的USB设备上的功能接口之间的如何看待彼此

5.2.1 USB主机

  USB逻辑组成如图5-3所示,包含下列部分:

 > USB主机控制器

 > 集成的USB系统软件(USB驱动,主机控制器驱动和主机软件)

 > 客户端

  USB主机作为USB的协调实体占据了一个独特的位置。除了它特殊的物理层位置,主机对于USB以及他所附属的设备具有专门职责。主机控制所有对USB的访问。USB设备仅当被主句准许访问时才能获得对总线的访问。主机也负责监视USB的拓扑。主机以及职责的完整讨论,参考章节10。

5.2.2 USB设备

  USB物理设备的逻辑构成如图5-4所示,包含下列部分:

 > USB总线接口

 > USB逻辑设备

 > 功能

  USB物理设备对主机提供附加功能。USB设备提供的功能类型非常广泛。然而,所有的USB逻辑设备对主机呈现了相同的基本接口。这允许主机以相同的方式管理不同USB设备的USB相关方面。

  为帮助主机识别和配置USB设备,每个设备携带并报告配置相关信息。所报告信息的一部分对于所有逻辑设备是相同的。其它信息与设备提供的功能相关。这种信息的详细格式非常多,取决于设备的设备类。USB设备的完整讨论参考章节9。

5.2.3 物理总线拓扑

  USB上的设备物理上通过一个分层的星状拓扑连接,如图5-5中所阐述。USB依附点由一种被称为集线器(hub)的特殊USB设备类所提供。集线器提供的附加依附点被称为端口(port)。主机中嵌入的集线器被称为根集线器(root
hub)。主机通过根集线器提供一个或多个依附点。提供给主机附加功能的USB设备被称为功能(function)。为了防止循环依附,分层的顺序被施加在USB的星形拓扑。

5.2.4 逻辑总线拓扑

  当设备物理上依附到分层、星状拓扑的USB,主机与每个逻辑设备通信有如它是被直接连接到根端口的,如图5-7所示,对应于图5-5中所示的物理拓扑。集线器也是逻辑设备,但为了简化图没有在图5-7中显示。尽管绝大多数主机/逻辑设备活动使用这一逻辑视图,主机维护一个物理拓扑来支持移除集线器时的处理。当一个集线器被移除,所有依附于该集线器的设备必须从主机视角的逻辑拓扑中被移除。

5.2.5 客户端软件到功能的关联

  尽管USB的物理和逻辑拓扑反映了总线的共享本性,但是客户端软件(CSw)操作USB功能接口被呈现为它只处理它感兴趣的接口。图5-8阐述了设备设计者视角的客户端软件与USB功能之间的关系。

5.3 USB通信流

  USB提供了主机上软件与它的USB功能之间的通信服务。功能可以有针对不同的客户端到功能交互的不同的通信流需求。USB提供了更好的总体总线利用率,通过允许不同的通信流到USB功能的分隔。每个通信流利用一些访问的总线来完成客户端与功能之间的通信。每个通信流在设备上的一个端点被终止。设备端点被用于识别通信流。

  图5-9显示了图5-2的一个更为详细的视图。图5-2所支持的逻辑设备和功能层通信流的实际通信流的完整定义。这些实际通信流跨越几个接口边界。两个主机端的软件接口如下:

 > 主机控制器驱动(Host Controller Driver, HCD):USB主机控制器与USB系统软件之间的软件接口。这个接口允许一定范围内的主机控制器实现,而不需要所有的主机软件依赖于任何特定实现。一个USB驱动可以支持不同的主机控制器,而不需要主机控制器实现的特定知识。主机控制器是实现者提供一个HCD实现来支持主机控制器。

 > USB驱动(USB Driver, USBD):USB系统软件与客户端软件之间的接口。这个接口提供给客户端方便的函数来操作USB设备。

  USB逻辑设备对于USB系统来讲是端点的集合。端点分组成端点集来实现一个接口。接口被视为功能。USB系统软件使用默认控制管道来管理设备。客户端软件使用管道束(与一个端点集相关联)操作一个接口。客户端软件请求数据通过USB在主机上的缓存和USB设备上的端点之间移动。主机控制器(或者是USB设备,取决于传输方向)打包数据通过USB移动数据。

  图5-10阐述了端点与主机端内存缓冲之间如何通过管道传递通信流的。

  主机上的软件通过一个通信流集合与逻辑设备进行通信。通信流的集合被设备软件/硬件设计者选择来高效匹配设备的通信需求。

时间: 2024-12-11 00:19:14

基于Linux的USB子系统学习 --- <基础知识与USB协议概述> ing的相关文章

【转载 更新】Linux工具之AWK 2.基础知识

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指

【转载更新】Linux工具之AWK 2.基础知识

1.awk简介awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用.awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的

Linux usb子系统(二):USB设备驱动usb-skeleton.c

usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动.两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备. 下面转载的一篇分析usb-skeleton.c文章. 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催

(八)从零开始学人工智能--统计学习:统计学习基础知识

目录 统计学习基础知识 1. 统计学习种类 1.1 监督学习 1.2 非监督学习 2. 统计学习中的基本概念 2.1 统计学习三要素:模型,策略,算法 2.2 欠拟合和过拟合 2.3 如何避免过拟合 2.4 过拟合产生的原因 2.5 最大似然估计和贝叶斯估计 3. 线性回归 3.1 经典线性回归 3.2 岭回归(ridge regression) 3.3 lasso回归和ElasticNet 4. 线性分类 4.1 感知机 4.2 逻辑回归(logistic regression) 4.3 So

Linux 下互联网络编程的基础知识

2019-10-07 关键字:Linux 网络编程基础 TCP/IP 协议里有两种不同的协议: 1.TCP协议 用于检测网络传输中的差错. 2.IP协议 用于对不同网络进行互联. 简单说就是 TCP 负责纠错,IP 负责传输. 网络体系结构: 网络体系结构就是将复杂的网络通信过程按照一定的规则进行分层,从而能使整个的网络通信过程更加清晰. 这一分层的核心思想有二: 1.每一层实现不同的功能,并对其上层做透明传输. 2.每一层都会使用到其下一层所提供的服务,并对其上一层提供服务. 早期的网络体系结

ASP.NET Core 2.2 基础知识(十六) SignalR 概述

原文:ASP.NET Core 2.2 基础知识(十六) SignalR 概述 我一直觉得学习的最好方法就是先让程序能够正常运行,才去学习他的原理,剖析他的细节. 就好像这个图: 所以,我们先跟着官方文档,创建一个 SignalR 应用: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-2.2&tabs=visual-studio 这个例子一共涉及到下面几个步骤: 自定义中心 ChatH

【分享】4412开发板-嵌入式Linux开发需要掌握的基础知识和技能

本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器 2.Shell 编程基础

linux云自动化运维基础知识11(ip网络 )

####1.ip基础知识####1.ipv42进制32位-----10进制 172.25.0.10/255.255.255.0172.25.0.10:ip地址255.255.255.0:子网掩码子网掩码255位对应的ip位为网络位子网掩码0对应的ip位为主机位 ####2.配置ip####<<图形化>>1.图形界面nm-connection-editor 2.文本化图形nmtui <<命令>>ifconfig 网卡 ip netmask    ##临时设定

javaweb学习总结十九(http协议概述以及http请求信息分析)

一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http协议前提是必须浏览器与服务器建立连接. 4:http/1.0与http/1.1的区别 telnet连接tomcat服务器演示: http1.0协议: 只与服务器交互了1次,然后就端口连接. http1.1协议: 5:浏览器请求服务器端次数问题 一个浏览器访问服务器,首先拿到html页面,然后发现有图