libusb开发-熟悉USB通讯
libusb开发-熟悉USB通讯
以下相关的内容只是用于简单的了解一些USB通讯的相关只是,便于之后libusb库的使用,如果想要更加深入的了解USB通讯的原理请自行百度。
一、USB的一些基本概念
1. 管道(Pipe)
管道是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。
2.端点(Endpoint)
端点是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 个输入,2个输出),高速和全速设备最多支持15 组端点。
3.接口(Interface)
应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口。
4.设备和端点之间关系
一个USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。除端点0 外,所有的端点只支持一个方向的数据传输。端点0 是一个特殊的端点,它支持双向的控制传输。管道和端点关联,和关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。
5.描述符(Descriptor)
描述符描述设备的属性(Attributes)。 它本身是一个数据结构, 第一个字节表示描述符的大小(字节数), 第二个字节表示描述符的类型(Type)。 描述符的种类有:
1) 设备描述符(Device), 描述一个设备的一般信息。
2) 设备修饰描述符(Device_Qualifier), 描述一个高速设备在其它速度下该如何变化的信息。
3) 配置描述符(Configuration), 描述一个特定的设备配置, 如接口的数目等。 一个USB设备有一个或多个配置描述符。 每个配置有一个或多个接口并且每个接口有0个或多个端点。
4) 其它速度配置描述符(Other_speed_configuration), 描述高速设备在其它可能的速度下的一个配置。
5) 接口描述符(Interface), 描述一种配置中的一个特定的接口。
6) 端点描述符(Endpoint), 描述主机需要的去决定端点所需带宽的信息。 这个描述符只能附加在GetDescriptor()或GetDescriptor()请求中传送, 不能单独传送。 端点0没有此描述符。
7) 字符串描述符(String), 第0个字符串描述符指定设备支持的语言, 其它的描述符则各包含一个UNICODE字符串。 设备描述符, 配置描述符 和 接口描述符可能会包含字符串描述符。
6. USB设备请求(USB Device Request)
请求是从主机通过控制管道发送到设备。
标准的设备请求有:
1) Clear Feature
2) Get Configuration
3) Get Descriptor
4) Get Interface
5) Get Status
6) Set Address
7) Set Configuration
8) Set Descriptor
9) Set Feature
10) Set Interface
11) Synch Frame
二、USB传输模式
当USB插入USB总线时,USB控制器会自动为该USB设备分配一个数字来标示这个设备。另外,在设备的每个端点都有一个数字来表明这个端点。
USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction),事务有四种类型即四种传输模式,分别是Bulk Transaction(批量传输)、Control Transaction(控制传输)、Interrupt Transaction(中断传输)和Isochronous Transaction(同步传输)。每次事务都会分解成若干个数据包在USB总线上传输。每次传输必须历经两个或三个部分,第一部分是USB控制器向USB设备发出命令,第二部分是USB控制器和USB设备之间传递读写请求,其方向主要看第一部分的命令是读还是写,第二部分有时候可以没有。第三部分是握手信号。以下针对这四种传输,分别进行讲解。
1.批量(Bulk)传输事务
作用:主要应用在数据大量数据传输和接受数据上同时又没有带宽和间隔时间要求的情况下;
特点:要求保证传输。打印机和扫描仪属于这种类型这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据。
批量数据传输分三个阶段:
第一部分——令牌阶段。
Host端发出一个Bulk的令牌请求。如果令牌是IN请求 ,则是从Device到Host的请求;
如果令牌是OUT请求,则是从Host到Device端的请求。
第二部分——传送数据的阶段。
根据先前请求的令牌的类型,数据传输有可能是IN方向,也有可能是OUT方向。传输数据的时候用DATA0和DATA1令牌携带着数据交替传送。数据传输格式DATA1和DATA0,这两个是重复数据,确保在1数据丢失时0可以补上,不至于数据丢失。
第三部分——握手阶段。
如果数据是IN 方向,握手信号应该是Host端发出;如果数据是OUT方向,握手信号应该是Device端发出。握手信号可以为ACK, 表示正常响应,NAK, 表示没有正确传送。STALL,表示出现主机不可预知的错误。
如图所示:
Bulk传输
Bulk传输时的令牌
2.控制传输事务
控制传输是负责向USB设置一些控制信息,传送这种事务的管道是控制管道。在每个USB设备中都会有控制管道,也就是说控制管道在USB设备中是必须的。控制传输也分为三个阶段,即令牌阶段、数据传送阶段、握手阶段,如图:
控制传输事务
3.中断传输事务
在USB设备中,有种处理机制类似于PCI中断的机制,这就是中断事务。中断事务的数据量很小,一般用于通知Host某个事件的来临,例如USB鼠标,鼠标移动或者鼠标单击等操作都会通过中断管道来向Host传送事件。在中断事务中,也分为三个阶段,即令牌阶段、数据传输阶段、握手阶段,如图:
中断传输事务
4.同步传输事务
USB设备中还有一种事务叫同步传输事务,这种事务能保证传输的同步性。例如,在USB摄像头中传输视频数据的时候会采用这种事务,这种事务能保证每秒有固定的传输量,但与Bulk传输不同,它允许有一定的误码率,这样符合视频会议等传输的需求,因为视频会议首先要保证实时性,在一定条件下,允许有一定的误码率。同步传输事务有只有两个阶段,即令牌阶段、数据阶段,因为不关心数据的正确性,故没有握手阶段,如图:
同步传输事务
- 分享
- 举报
-
浏览量:8655次2020-11-24 23:02:41
-
浏览量:9110次2020-08-18 21:11:17
-
浏览量:10484次2020-08-18 21:37:52
-
浏览量:4818次2020-08-11 18:51:18
-
浏览量:8053次2020-08-19 22:30:28
-
浏览量:6528次2020-08-15 17:22:26
-
浏览量:15879次2020-12-02 22:54:46
-
浏览量:2043次2023-04-07 17:30:05
-
浏览量:2373次2020-08-23 21:47:22
-
浏览量:2528次2020-08-14 15:09:41
-
浏览量:2627次2023-10-17 17:23:21
-
浏览量:9434次2022-10-12 09:28:15
-
2023-01-04 15:09:58
-
浏览量:4950次2020-08-11 17:39:02
-
浏览量:1489次2018-07-23 17:07:02
-
浏览量:2821次2023-06-26 08:57:07
-
浏览量:4779次2020-08-15 17:29:07
-
浏览量:3034次2021-12-09 17:05:22
-
浏览量:3814次2020-08-14 17:18:54
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
小王子🤴
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明