1.USB协议简介

         最近学习usb相关的知识,一直感觉入不了门,看《linux那些事儿之我是usb》,对usb协议也不是很熟悉,没能坚持看下去,直到看了《圈圈教你玩usb》一书,把自己的兴趣立马提了起来,大牛圈圈用51单片机实现了usb鼠标键盘等设备,让人非常佩服,51单片机自己还是很熟悉,大学玩了四年单片机,单片机来实现立马感觉亲切了许多,决定先从单片机入手学,后面再看linux那些事儿之我是usb,深入学习linux内核下usb,以下先介绍usb协议,内容整理来自usb spec、网络和圈圈书中,文中也大量引用STM32官方的USB2.0协议文档,欢迎批评指正。另外学习《圈圈教你玩usb》动手调试实现了单片机usb鼠标功能,源码在mcu_project/USB at master · lisongze2016/mcu_project · GitHub,源码中结合使用了linux kernel ch9.h中对描述符的结构体定义,对usb协议有了深入的理解。

        对裸机的usb协议有一定熟悉后,建议可以学习tinyusb开源协议栈GitHub - hathach/tinyusb: An open source cross-platform USB stack for embedded system),支持rtos,样例比较丰富,对usb相关开发有一定帮助。
        USB(Universal Serial Bus)全称通用串口总线,USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、USB1.1、USB2.0、USB3.1等,USB2.0目前比较常用,以下以2.0为主介绍。由于USB是主从模式的结构,设备与设备之间、主机与主机之间不能互连,为解决这个问题,扩大USB的应用范围,出现了USB OTG,全拼 ON The Go。USB OTG 同一个设备,在不同的场合下可行在主机和从机之间切换。

1.1 USB特点:

USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。应用如下:

1.2 USB设备供电方式:
USB设备有两种供电方式 
自供电设备:设备从外部电源获取工作电压 
总线供电设备:设备从VBUS(5v) 取电 
  对总线供电设备,区分低功耗和高功耗USB设备 
低功耗总线供电设备:最大功耗不超过100mA 
高功耗总线供电设备: 枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA 
设备在枚举过程中,通过设备的配置描述符向主机报告它的供电配置(自供电/总线供电)以及它的功耗要求
如下 USB 配置描述符(以Joystick为例),后面具体介绍:

1.3 USB总线信号:
USB使用的是差分传输模式,两个数据线D+和D- 
        差分信号1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V) 
        差分信号0:D- > VOH and D+ < VOL

J状态(高电平):D+ 高,D- 低
K状态(低电平):D+低,D- 高
SEO状态:D+ 低,D- 高
Reset信号:D+ and D- < VOL for >= 10ms 
主机在要和设备通信之前会发送Reset信号来把设备设置到默认的未配置状态。即主机拉低两根信号线(SE0状态)
并保持10ms 
Idle状态:J状态数据发、送前后总线的状态 
Suspend状态:3ms以上的J状态 
SYNC: 3个KJ状态切换,后跟随2位时间的K状态(看到的波形变化是总线上发送0000 0001经过NRZI编码后的波形)

Resume信号:20ms的K状态+低速EOP 
主机在挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾 
带远程唤醒功能的设备还可自己发起该唤醒信号;前提是设备已进入idle状态至少5ms,然后发出唤醒K信号,维持1ms到15ms并由主机在1ms内接管来继续驱动唤醒信号 
SOP:从IDLE状态切换到K状态 
EOP:持续2位时间的SE0信号,后跟随1位时间的J状态 
Keep alive即低速EOP信号

1.4 USB插入检测和速度检测:

主机通过设备在D+或D-上的1.5K上拉来检测设备的连接和断开事件,并由此判别设备的速度 
主机先把高速设备检测为全速设备,然后再通过“Chirp序列”的总线握手机制来识别高速和全速设备
USB连接和断开连接:
设备连上主机时(连接)
当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了
主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度 

没有设备连上主机时(断开)
D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态

1.5 数据编解码和位填充 
USB采用NRZI(非归零编码)对发送的数据包进行编码 
输入数据0, 编码成“电平翻转” 
输入数据1, 编码成“电平不变” 
编码出来的序列,高电平:J状态;低电平:K状态 

位填充是为了保证发送的数据序列中有足够多的电平变化 
填充的对象是(输入数据),即先填充再编码 
数据流中每6个连续的“1”,就要插入1个“0”,从而保证编码
数据出现电平变化 
接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们

2. USB传输
一个传输有多个事务组成,一个事务由2/3个包组成。
传输又分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。
注意:USB传输数据先发数据低位再发高位数据

2.1 包
包的组成:

包的内容:

Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet

不同类型包,以上的组成部件有所不同

PID:

这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID
PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包

地址:

帧号:

数据:

CRC:

四种Packet类型之令牌包(Token Packet):
令牌包用来启动一次USB传输。
输出(OUT)令牌包:用来通知设备将要输出一个数据包
输入(IN)令牌包:用来通知设备返回一个数据包
建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:
SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制

例子:

四种Packet类型之SOF Packet
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。

例子:

0xA5:1010 0101:对应上面PID表可知是帧起始包
四种Packet类型之Data Packet

例子:

四种Packet类型之Handshake Packet 

例子:

2.2 事务
Transaction可以分成三类 
Setup transaction:主机用来向设备发送控制命令 
Data IN transaction:主机用来从设备读取数据 
Data OUT transaction:主机用来向设备发送数据 
Transaction的packet组成 
Token packet:总是由主机发出 
Data packet:包含此次transaction的数据负载 
可选的Handshake packet 
例子:

2.3 传输
USB协议定义了四种传输类型: 
批量(大容量数据)传输(Bulk Transfers): 非周期性,突发  
大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等 
中断传输(Interrupt Transfers): 周期性,低频率
允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等
等时(同步)传输(Isochronous Transfers): 周期性 
持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备
控制传输(Control Transfers): 非周期性,突发
用于命令和状态的传输
2.3.1 批量传输
批量输出事务,(1)主机先发出一个OUT令牌包(包含设备地址,端点号),(2)然后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包,(3)设备解码令牌包,数据包都准确无误,并且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,但是没有能力接收下一次传输),如果没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间重新该批量传输事务。如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。
批量输入事务,(1)主机首先发送一个IN令牌包(包含设备地址,端点号),(2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。如果此时有地址和端点匹配的设备,并且没有检测到错误,则该设备作出反应:设备有数据需要返回,就将一个数据包放在总线上;如果没有数据需要返回,设备返回NAK响应主机;如果该端点处于挂起状态,设备返回STALL。如果主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。如果主机检测到错误,则不做任何响应,设备会检测到超时。注意:USB协议规定,不允许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间重新该批量输入事务。

PING令牌包,它不发送数据,直到等待设备的握手包。

2.3.2 中断传输
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于
这个时间间隔的范围内安排一次传输。

2.3.3 等时传输
等时(同步)传输用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。当数据错误时,不再重传操作。因此等时传输没有应答包,数据是否正确,由数据的CRC校验来确认。

2.3.4 控制传输
控制传输可分为三个过程:(1)建立过程 (2)数据过程(可选) (3)状态过程
 特性:  
每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置 
方向:  
控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输 

数据的拆分和数据传输完毕的判定 
以高速设备的最大数据包长度64字节为例 
要传输250字节,拆分成4个packet 

要传输正好256字节,通过最后一个0字节包告诉设备传输完成

各种传输特性比较

3. USB标准请求
3.1 USB标准请求的数据结构

3.2 USB 设备枚举及描述符介绍 
当一个USB设备插入主机后,会有以下活动: 

include/uapi/linux/usb/ch9.h
/* USB_DT_DEVICE: Device descriptor */
struct usb_device_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __le16 bcdUSB;
    __u8  bDeviceClass;
    __u8  bDeviceSubClass;
    __u8  bDeviceProtocol;
    __u8  bMaxPacketSize0;
    __le16 idVendor;
    __le16 idProduct;
    __le16 bcdDevice;
    __u8  iManufacturer;
    __u8  iProduct;
    __u8  iSerialNumber;
    __u8  bNumConfigurations;
} __attribute__ ((packed));

#define USB_DT_DEVICE_SIZE        18

struct usb_config_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __le16 wTotalLength;
    __u8  bNumInterfaces;
    __u8  bConfigurationValue;
    __u8  iConfiguration;
    __u8  bmAttributes;
    __u8  bMaxPower;
} __attribute__ ((packed));

#define USB_DT_CONFIG_SIZE        9

/* USB_DT_INTERFACE: Interface descriptor */
struct usb_interface_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __u8  bInterfaceNumber;
    __u8  bAlternateSetting;
    __u8  bNumEndpoints;
    __u8  bInterfaceClass;
    __u8  bInterfaceSubClass;
    __u8  bInterfaceProtocol;
    __u8  iInterface;
} __attribute__ ((packed));

#define USB_DT_INTERFACE_SIZE        9


/* USB_DT_ENDPOINT: Endpoint descriptor */
struct usb_endpoint_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __u8  bEndpointAddress;
    __u8  bmAttributes;
    __le16 wMaxPacketSize;
    __u8  bInterval;

    /* NOTE:  these two are _only_ in audio endpoints. */
    /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
    __u8  bRefresh;
    __u8  bSynchAddress;
} __attribute__ ((packed));

#define USB_DT_ENDPOINT_SIZE        7
#define USB_DT_ENDPOINT_AUDIO_SIZE    9    /* Audio extension */

/* USB_DT_STRING: String descriptor */
struct usb_string_descriptor {
    __u8  bLength;
    __u8  bDescriptorType;

    __le16 wData[1];        /* UTF-16LE encoded */
} __attribute__ ((packed));

/* note that "string" zero is special, it holds language codes that
 * the device supports, not Unicode characters.
 */

  • 150
    点赞
  • 1162
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
目录 1. 第一章蓝牙概述和金瓯蓝牙开发平台介绍......... PAGEREF _TOC120615555 \H 12 1.1 蓝牙概述................. PAGEREF _TOC120615556 \H 12 1.1.1 蓝牙技术的诞生与发展................. PAGEREF _Toc120615557 \h 12 1.1.2 蓝牙技术介绍................. PAGEREF _Toc120615558 \h 12 1.1.3 蓝牙协议体系结构........ PAGEREF _Toc120615559 \h 14 1.1.4 蓝牙应用模型及协议栈................. PAGEREF _Toc120615560 \h 17 1.1.5 蓝牙技术的应用............ PAGEREF _Toc120615561 \h 19 1.2 金瓯蓝牙开发平台介绍......... PAGEREF _TOC120615562 \H 20 1.2.1 平台简介....... PAGEREF _Toc120615563 \h 20 1.2.2 功能说明....... PAGEREF _Toc120615564 \h 20 1.2.3 使用说明....... PAGEREF _Toc120615565 \h 21 2 1.2.4 HCI.... PAGEREF _Toc120615566 \h 22 1.2.5 SDP... PAGEREF _Toc120615567 \h 26 1.2.6 RFCOMM........... PAGEREF _Toc120615568 \h 27 1.2.7 开发................ PAGEREF _Toc120615569 \h 27 1.2.8 硬件说明....... PAGEREF _Toc120615570 \h 27 2. 第二章无线技术协议............... PAGEREF _TOC120615571 \H 27 2.1 概述........ PAGEREF _TOC120615572 \H 27 2.2 频段及信道分配.... PAGEREF _TOC120615573 \H 27 2.3 发射机特性............. PAGEREF _TOC120615574 \H 27 2.3.1 基本数据速率................. PAGEREF _Toc120615575 \h 27 2.3.2 增强数据速率................. PAGEREF _Toc120615576 \h 27 2.4 接收机特性............. PAGEREF _TOC120615577 \H 27 2.4.1 基本速率....... PAGEREF _Toc120615578 \h 27 2.4.2 增强数据速率................. PAGEREF _Toc120615579 \h 27 3. 第三章基带协议...... PAGEREF _TOC120615580 \H 27 3.1 概述........ PAGEREF _TOC120615581 \H 27 3.1.1 蓝牙时钟....... PAGEREF _Toc120615582 \h 27 3.1.2 蓝牙设备编址................. PAGEREF _Toc120615583 \h 27 3.1.3 接入码............ PAGEREF _Toc120615584 \h 27 3.2 物理信道................. PAGEREF _TOC120615585 \H 27 3.2.1 物理信道定义................. PAGEREF _Toc120615586 \h 27 3.2.2 基本匹克网物理信道.... PAGEREF _Toc120615587 \h 27 3.2.3 自适应匹克网物理信道................. PAGEREF _Toc120615588 \h 27 3.2.4 寻呼扫描物理信道........ PAGEREF _Toc120615589 \h 27 3.2.5 查询扫描物理信道........ PAGEREF _Toc120615590 \h 27 3.2.6 频率选择....... PAGEREF _Toc120615591 \h 27 3.3 物理链路................. PAGEREF _TOC120615592 \H 27 3.3.1 链路管理....... PAGEREF _Toc120615593 \h 27 3.4 逻辑传输................. PAGEREF _TOC120615594 \H 27 3.4.1 概述................ PAGEREF _Toc120615595 \h 27 3.4.2 逻辑传输地址(LT_ADDR)........ PAGEREF _Toc120615596 \h 27 3.4.3 同步逻辑传输................. PAGEREF _Toc120615597 \h 27 3.4.4 异步逻辑传输................. PAGEREF _Toc120615598 \h 27 3.4.5 收发过程....... PAGEREF _Toc120615599 \h 27 3.4.6 活动状态下的从设备广播传输.... PAGEREF _Toc120615600 \h 27 3.4.7 休眠模式下从设备广播传输......... PAGEREF _Toc120615601 \h 27 3.5 逻辑链路................. PAGEREF _TOC120615602 \H 27 3.5.1 链路控制逻辑链路(LC)............ PAGEREF _Toc120615603 \h 27 3.5.2 ACL 控制逻辑链路(ACL-C)......... PAGEREF _Toc120615604 \h 27 3.5.3 用户异步/同步逻辑链路(ACL-U)............. PAGEREF _Toc120615605 \h 27 3.5.4 用户同步数据逻辑链路(SCO-S)............... PAGEREF _Toc120615606 \h 27 3.5.5 用户扩展同步数据逻辑链路(eSCO-S).... PAGEREF _Toc120615607 \h 27 3.5.6 逻辑链路优先级............ PAGEREF _Toc120615608 \h 27 3 3.6 分组........ PAGEREF _TOC120615609 \H 27 3.6.1 通用格式....... PAGEREF _Toc120615610 \h 27 3.6.2 位顺序............ PAGEREF _Toc120615611 \h 27 3.6.3 接入码............ PAGEREF _Toc120615612 \h 27 3.6.4 分组头............ PAGEREF _Toc120615613 \h 27 3.6.5 分组类型....... PAGEREF _Toc120615614 \h 27 3.6.6 净荷格式....... PAGEREF _Toc120615615 \h 27 3.6.7 分组概要....... PAGEREF _Toc120615616 \h 27 3.7 比特流流程............. PAGEREF _TOC120615617 \H 27 3.7.1 差错检验....... PAGEREF _Toc120615618 \h 27 3.7.2 数据白化....... PAGEREF _Toc120615619 \h 27 3.7.3 纠错................ PAGEREF _Toc120615620 \h 27 3.7.4 1/3 比例前向纠错码.......... PAGEREF _Toc120615621 \h 27 3.7.5 2/3 比例前向纠错码.......... PAGEREF _Toc120615622 \h 27 3.7.6 ARQ 方案........... PAGEREF _Toc120615623 \h 27 3.8 链路控制操作......... PAGEREF _TOC120615624 \H 27 3.8.1 状态概述....... PAGEREF _Toc120615625 \h 27 3.8.2 待机状态....... PAGEREF _Toc120615626 \h 27 3.8.3 连接建立子状态............ PAGEREF _Toc120615627 \h 27 3.8.4 设备发现子状态............ PAGEREF _Toc120615628 \h 27 3.8.5 连接状态....... PAGEREF _Toc120615629 \h 27 3.8.6 活动模式....... PAGEREF _Toc120615630 \h 27 3.8.7 呼吸模式....... PAGEREF _Toc120615631 \h 27 3.8.8 保持模式....... PAGEREF _Toc120615632 \h 27 3.8.9 休眠状态....... PAGEREF _Toc120615633 \h 27 3.9 音频........ PAGEREF _TOC120615634 \H 27 3.9.1 对数PCM 编译码器(LOG PCM CODEC)............... PAGEREF _Toc120615635 \h 27 3.9.2 连续变化斜率增量调制编译码器(CVSD CODEC)............... PAGEREF _Toc120615636 \h 27 3.9.3 错误处理....... PAGEREF _Toc120615637 \h 27 3.9.4 一般音频要求................. PAGEREF _Toc120615638 \h 27 4. 第四章链路管理协议............... PAGEREF _TOC120615639 \H 27 4.1 概述........ PAGEREF _TOC120615640 \H 27 4.2 一般规则................. PAGEREF _TOC120615641 \H 27 4.2.1 消息传输....... PAGEREF _Toc120615642 \h 27 4.2.2 同步................ PAGEREF _Toc120615643 \h 27 4.2.3 分组格式....... PAGEREF _Toc120615644 \h 27 4.2.4 事务................ PAGEREF _Toc120615645 \h 27 4.2.5 差错处理....... PAGEREF _Toc120615646 \h 27 4.2.6 过程规则....... PAGEREF _Toc120615647 \h 27 4.2.7 通用应答消息................. PAGEREF _Toc120615648 \h 27 4.2.8 LMP 消息限制条件............ PAGEREF _Toc120615649 \h 27 4.3 设备特征................. PAGEREF _TOC120615650 \H 27 4 4.3.1 概述................ PAGEREF _Toc120615651 \h 27 4.3.2 特征定义....... PAGEREF _Toc120615652 \h 27 4.3.3 特征掩码定义................. PAGEREF _Toc120615653 \h 27 4.3.4 链路管理相互对策........ PAGEREF _Toc120615654 \h 27 4.4 过程规则................. PAGEREF _TOC120615655 \H 27 4.4.1 连接控制....... PAGEREF _Toc120615656 \h 27 4.4.2 安全................ PAGEREF _Toc120615657 \h 27 4.4.3 信息请求....... PAGEREF _Toc120615658 \h 27 4.4.4 主从角色转换................. PAGEREF _Toc120615659 \h 27 4.4.5 操作模式....... PAGEREF _Toc120615660 \h 27 4.4.6 逻辑链路....... PAGEREF _Toc120615661 \h 27 4.4.7 测试模式....... PAGEREF _Toc120615662 \h 27 5. 第五章主机控制器接口协议. PAGEREF _TOC120615663 \H 27 5.1 主机控制接口协议概述......... PAGEREF _TOC120615664 \H 27 5.1.1 底层蓝牙软件栈............ PAGEREF _Toc120615665 \h 27 5.2 主机控制传输层概述.............. PAGEREF _TOC120615666 \H 27 5.2.1 USB 传输层....... PAGEREF _Toc120615667 \h 27 5.2.2 RS232 传输层... PAGEREF _Toc120615668 \h 27 5.2.3 HCI UART 传输层............. PAGEREF _Toc120615669 \h 27 5.2.4 HCI SD 传输层. PAGEREF _Toc120615670 \h 27 5.3 HCI 流控制.............. PAGEREF _TOC120615671 \H 27 5.4 HCI 数据格式......... PAGEREF _TOC120615672 \H 27 5.4.1 介绍................ PAGEREF _Toc120615673 \h 27 5.4.2 数据和参数格式............ PAGEREF _Toc120615674 \h 27 5.4.3 HCI 信息交换.... PAGEREF _Toc120615675 \h 27 5.5 开发平台上的命令和事件及其详细分析............... PAGEREF _TOC120615676 \H 27 5.5.1 开发平台在执行HCI 初始化本地蓝牙设备命令后所产生的一些命令和事件:....... PAGEREF _Toc120615677 \h 27 5.5.2 开发平台在执行HCI 搜索蓝牙设备命令后所产生的命令和事件。........... PAGEREF _Toc120615678 \h 27 5.5.3 建立连接....... PAGEREF _Toc120615679 \h 27 5.5.4 传输ACL 数据1............ PAGEREF _Toc120615680 \h 27 5.5.5 传输ACL 数据2............ PAGEREF _Toc120615681 \h 27 5.5.6 断开连接....... PAGEREF _Toc120615682 \h 27 5.6 HCI 分组中数据的详细解释说明........... PAGEREF _TOC120615683 \H 27 5.6.1 HCI 链路控制命令............. PAGEREF _Toc120615684 \h 27 5.6.2 HCI 链路策略命令............. PAGEREF _Toc120615685 \h 27 5.6.3 主机控制器和基带命令................. PAGEREF _Toc120615686 \h 27 5.6.4 信息参数....... PAGEREF _Toc120615687 \h 27 5.6.5 状态参数....... PAGEREF _Toc120615688 \h 27 5.6.6 测试命令....... PAGEREF _Toc120615689 \h 27 5.6.7 事件................ PAGEREF _Toc120615690 \h 27 5.7 实现HCI 的部分源代码及其分析.......... PAGEREF _TOC120615691 \H 27 5.7.1 HCI 对上行数据流的处理过程......... PAGEREF _Toc120615692 \h 27 5 5.7.2 HCI 对下行数据流的处理过程......... PAGEREF _Toc120615693 \h 27 6. 第六章逻辑链路控制和适配协议......... PAGEREF _TOC120615694 \H 27 6.1 L2CAP 概述............ PAGEREF _TOC120615695 \H 27 6.1.1 L2CAP 特征....... PAGEREF _Toc120615696 \h 27 6.1.2 L2CAP 的设计.. PAGEREF _Toc120615697 \h 27 6.1.3 适用范围....... PAGEREF _Toc120615698 \h 27 6.2 主要操作................. PAGEREF _TOC120615699 \H 27 6.2.1 信道标识符... PAGEREF _Toc120615700 \h 27 6.2.2 设备间操作... PAGEREF _Toc120615701 \h 27 6.2.3 层间操作....... PAGEREF _Toc120615702 \h 27 6.2.4 操作方式....... PAGEREF _Toc120615703 \h 27 6.3 数据分组格式......... PAGEREF _TOC120615704 \H 27 6.3.1 面向连接信道................. PAGEREF _Toc120615705 \h 27 6.3.2 无连接数据信道............ PAGEREF _Toc120615706 \h 27 6.3.3 在重传/流控制模式下的面向连接信道........ PAGEREF _Toc120615707 \h 27 6.4 信令分组格式......... PAGEREF _TOC120615708 \H 27 6.4.1 命令拒绝(代码0x01 ). PAGEREF _Toc120615709 \h 27 6.4.2 连接请求(代码0x02) PAGEREF _Toc120615710 \h 27 6.4.3 连接应答(代码0x03 ). PAGEREF _Toc120615711 \h 27 6.4.4 配置请求(代码0x04 ). PAGEREF _Toc120615712 \h 27 6.4.5 配置应答(代码0X05 ).............. PAGEREF _Toc120615713 \h 27 6.4.6 断开请求(代码0x06)... PAGEREF _Toc120615714 \h 27 6.4.7 连接断开应答(代码0x07)............ PAGEREF _Toc120615715 \h 27 6.4.8 回应请求(代码0x08).. PAGEREF _Toc120615716 \h 27 6.4.9 回应应答(代码0x09).. PAGEREF _Toc120615717 \h 27 6.4.10 信息请求(代码0X0A)............... PAGEREF _Toc120615718 \h 27 6.4.11 信息应答(代码0X0B)................ PAGEREF _Toc120615719 \h 27 6.4.12 扩展特征掩码................. PAGEREF _Toc120615720 \h 27 6.5 配置参数选项......... PAGEREF _TOC120615721 \H 27 6.5.1 最大传输单位................. PAGEREF _Toc120615722 \h 27 6.5.2 刷新超时选项................. PAGEREF _Toc120615723 \h 27 6.5.3 服务质量选项................. PAGEREF _Toc120615724 \h 27 6.5.4 重传和流控制选项........ PAGEREF _Toc120615725 \h 27 6.6 状态机.... PAGEREF _TOC120615726 \H 27 6.6.1 状态机的常规规则........ PAGEREF _Toc120615727 \h 27 6.6.2 定时器事件... PAGEREF _Toc120615728 \h 27 6.7 常规操作过程......... PAGEREF _TOC120615729 \H 27 6.7.1 配置过程....... PAGEREF _Toc120615730 \h 27 6.7.2 分段和重组... PAGEREF _Toc120615731 \h 27 6.7.3 服务数据单元的封装.... PAGEREF _Toc120615732 \h 27 6.7.4 错误的L2CAP SDU 的传输.......... PAGEREF _Toc120615733 \h 27 6.7.5 刷新超时的操作............ PAGEREF _Toc120615734 \h 27 6.7.6 无连接数据信道............ PAGEREF _Toc120615735 \h 27 6.8 流控制和重传过程PAGEREF _TOC120615736 \H 27 6 6.8.1 信息恢复....... PAGEREF _Toc120615737 \h 27 6.8.2 流控制和重传PDU 类型的功能.. PAGEREF _Toc120615738 \h 27 6.8.3 变量和序列号码............ PAGEREF _Toc120615739 \h 27 6.8.4 重传模式....... PAGEREF _Toc120615740 \h 27 6.8.5 流控制模式... PAGEREF _Toc120615741 \h 27 6.9 L2CAP 层数据分析................. PAGEREF _TOC120615742 \H 27 6.9.1 L2CAP_PDU..... PAGEREF _Toc120615743 \h 27 6.9.2 信令信道的L2CAP_PDU 分析.... PAGEREF _Toc120615744 \h 27 6.9.3 L2CAP 层通过0x40 通道发送Hello World..... PAGEREF _Toc120615745 \h 27 6.10 L2CAP 层源代码分析............. PAGEREF _TOC120615746 \H 27 6.10.1 L2CAP 层重要数据结构定义........ PAGEREF _Toc120615747 \h 27 6.10.2 L2CAP 发送接收数据流程............ PAGEREF _Toc120615748 \h 27 6.10.3 一般的连接建立过程、配置过程和断开连接过程...... PAGEREF _Toc120615749 \h 27 7. 第七章串口仿真协议............... PAGEREF _TOC120615750 \H 27 7.1 介绍........ PAGEREF _TOC120615751 \H 27 7.1.1 概述................ PAGEREF _Toc120615752 \h 27 7.1.2 设备类型....... PAGEREF _Toc120615753 \h 27 7.1.3 字节序列....... PAGEREF _Toc120615754 \h 27 7.2 RFCOMM 服务概述................ PAGEREF _TOC120615755 \H 27 7.2.1 RS-232 控制信令............... PAGEREF _Toc120615756 \h 27 7.2.2 空MODEM 仿真............ PAGEREF _Toc120615757 \h 27 7.2.3 多串口仿真... PAGEREF _Toc120615758 \h 27 7.3 服务接口描述......... PAGEREF _TOC120615759 \H 27 7.3.1 服务定义模型................. PAGEREF _Toc120615760 \h 27 7.4 采用TS07.10 子集和对TS07.10 的修正后的RFCOMM....... PAGEREF _TOC120615761 \H 27 7.4.1 RFCOMM 的帧结构.......... PAGEREF _Toc120615762 \h 27 7.4.2 多路控制信道................. PAGEREF _Toc120615763 \h 27 7.4.3 汇聚层............ PAGEREF _Toc120615764 \h 27 7.5 流控制.... PAGEREF _TOC120615765 \H 27 7.5.1 L2CAP 流控制概述............ PAGEREF _Toc120615766 \h 27 7.5.2 有线端口的流控制........ PAGEREF _Toc120615767 \h 27 7.5.3 RFCOMM 流控制............... PAGEREF _Toc120615768 \h 27 7.5.4 端口仿真实体串行流控制............. PAGEREF _Toc120615769 \h 27 7.6 与其它实体的互操作.............. PAGEREF _TOC120615770 \H 27 7.6.1 端口仿真和端口代理实体............. PAGEREF _Toc120615771 \h 27 7.6.2 服务注册和搜索............ PAGEREF _Toc120615772 \h 27 7.6.3 低层约束....... PAGEREF _Toc120615773 \h 27 7.7 RFCOMM 层数据分析部分... PAGEREF _TOC120615774 \H 27 7.7.1 建立连接....... PAGEREF _Toc120615775 \h 27 7.7.2 收发数据....... PAGEREF _Toc120615776 \h 27 7.7.3 断开连接....... PAGEREF _Toc120615777 \h 27 7.8 RFCOMM 层源代码分析部分................ PAGEREF _TOC120615778 \H 27 7 7.8.1 传输过程和重要数据结构............. PAGEREF _Toc120615779 \h 27 7.8.2 建立连接、断开、数据传输分析PAGEREF _Toc120615780 \h 27 8. 第八章对象交换协议............... PAGEREF _TOC120615781 \H 27 8.1 OBEX 协议概述..... PAGEREF _TOC120615782 \H 27 8.2 OBEX 对象模型..... PAGEREF _TOC120615783 \H 27 8.2.1 OBEX 可选分组头.............. PAGEREF _Toc120615784 \h 27 8.2.2 头指示器(HI)详细描述............. PAGEREF _Toc120615785 \h 27 8.3 会话协议................. PAGEREF _TOC120615786 \H 27 8.3.1 会话协议概述................. PAGEREF _Toc120615787 \h 27 8.3.2 连接操作....... PAGEREF _Toc120615788 \h 27 8.3.3 连接断开操作................. PAGEREF _Toc120615789 \h 27 8.3.4 推(PUT)操作............. PAGEREF _Toc120615790 \h 27 8.3.5 拉(GET)操作............. PAGEREF _Toc120615791 \h 27 8.3.6 取消(Abort)操作...... PAGEREF _Toc120615792 \h 27 8.3.7 设置路径(Set Path)操作........... PAGEREF _Toc120615793 \h 27 8.4 蓝牙下的OBEX 协议.............. PAGEREF _TOC120615794 \H 27 8.4.1 OBEX OVER RFCOMM..... PAGEREF _Toc120615795 \h 27 8.4.2 OBEX over TCP/IP............. PAGEREF _Toc120615796 \h 27 9. 第九章服务发现协议............... PAGEREF _TOC120615797 \H 27 9.1 介绍........ PAGEREF _TOC120615798 \H 27 9.1.1 概述................ PAGEREF _Toc120615799 \h 27 9.1.2 SDP 能够提供的服务能力................. PAGEREF _Toc120615800 \h 27 9.2 概述........ PAGEREF _TOC120615801 \H 27 9.2.1 客户服务器交互............ PAGEREF _Toc120615802 \h 27 9.2.2 服务记录....... PAGEREF _Toc120615803 \h 27 9.2.3 服务属性....... PAGEREF _Toc120615804 \h 27 9.2.4 属性ID.......... PAGEREF _Toc120615805 \h 27 9.2.5 属性值............ PAGEREF _Toc120615806 \h 27 9.2.6 服务类............ PAGEREF _Toc120615807 \h 27 9.2.7 服务搜索....... PAGEREF _Toc120615808 \h 27 9.2.8 服务浏览....... PAGEREF _Toc120615809 \h 27 9.3 数据表示................. PAGEREF _TOC120615810 \H 27 9.3.1 数据元............ PAGEREF _Toc120615811 \h 27 9.3.2 数据元素类型描述符.... PAGEREF _Toc120615812 \h 27 9.3.3 数据元尺寸描述符........ PAGEREF _Toc120615813 \h 27 9.3.4 数据元举例... PAGEREF _Toc120615814 \h 27 9.4 协议说明................. PAGEREF _TOC120615815 \H 27 9.4.1 字节传输顺序................. PAGEREF _Toc120615816 \h 27 9.4.2 协议数据单元格式........ PAGEREF _Toc120615817 \h 27 9.4.3 局部应答和延续状态.... PAGEREF _Toc120615818 \h 27 9.4.4 出错处理....... PAGEREF _Toc120615819 \h 27 9.4.5 服务搜索处理................. PAGEREF _Toc120615820 \h 27 9.4.6 服务属性事务................. PAGEREF _Toc120615821 \h 27 8 9.4.7 服务搜索属性事务........ PAGEREF _Toc120615822 \h 27 9.5 服务属性定义......... PAGEREF _TOC120615823 \H 27 9.5.1 通用属性定义................. PAGEREF _Toc120615824 \h 27 9.5.2 “服务搜索服务器”服务类属性定义.............. PAGEREF _Toc120615825 \h 27 9.5.3 “浏览组描述符”服务类属性定义PAGEREF _Toc120615826 \h 27 9.6 SDP 层数据分析部分.............. PAGEREF _TOC120615827 \H 27 9.6.1 服务搜索请求................. PAGEREF _Toc120615828 \h 27 9.6.2 服务搜索响应................. PAGEREF _Toc120615829 \h 27 9.6.3 服务属性请求................. PAGEREF _Toc120615830 \h 27 9.6.4 服务属性应答................. PAGEREF _Toc120615831 \h 27 9.6.5 服务搜索属性请求........ PAGEREF _Toc120615832 \h 27 9.6.6 服务请求属性应答........ PAGEREF _Toc120615833 \h 27 9.7 SDP 层源代码分析部分......... PAGEREF _TOC120615834 \H 27 9.7.1 重要数据元和结构体.... PAGEREF _Toc120615835 \h 27 9.7.2 数据流程和几个重要的接口函数PAGEREF _Toc120615836 \h 27 10. 第十章电话控制协议控制. PAGEREF _TOC120615837 \H 27 10.1 概述..... PAGEREF _TOC120615838 \H 27 10.1.1 介绍................ PAGEREF _Toc120615839 \h 27 10.1.2 设备间操作... PAGEREF _Toc120615840 \h 27 10.1.3 层间操作....... PAGEREF _Toc120615841 \h 27 10.2 呼叫控制(CC)... PAGEREF _TOC120615842 \H 27 10.2.1 呼叫状态....... PAGEREF _Toc120615843 \h 27 10.2.2 建立呼叫....... PAGEREF _Toc120615844 \h 27 10.2.3 呼叫清除....... PAGEREF _Toc120615845 \h 27 10.3 组管理(GM)...... PAGEREF _TOC120615846 \H 27 10.3.1 概述................ PAGEREF _Toc120615847 \h 27 10.3.2 无线用户组(WUG)... PAGEREF _Toc120615848 \h 27 10.3.3 获取访问权限................. PAGEREF _Toc120615849 \h 27 10.3.4 配置分布....... PAGEREF _Toc120615850 \h 27 10.3.5 成员间快速访问............ PAGEREF _Toc120615851 \h 27 10.4 无连接TCS(CL)................. PAGEREF _TOC120615852 \H 27 10.5 补充服务(SS).... PAGEREF _TOC120615853 \H 27 10.5.1 呼叫线路识别................. PAGEREF _Toc120615854 \h 27 10.5.2 DTMF 启动和终止....... PAGEREF _Toc120615855 \h 27 10.5.3 注册重呼....... PAGEREF _Toc120615856 \h 27 10.6 报文格式................. PAGEREF _TOC120615857 \H 27 10.6.1 呼叫控制报文格式........ PAGEREF _Toc120615858 \h 27 10.6.2 组管理报文格式............ PAGEREF _Toc120615859 \h 27 10.6.3 TCS 无连接报文格式... PAGEREF _Toc120615860 \h 27 10.7 报文编码................. PAGEREF _TOC120615861 \H 27 10.7.1 概述................ PAGEREF _Toc120615862 \h 27 10.7.2 协议标识....... PAGEREF _Toc120615863 \h 27 10.7.3 报文类型....... PAGEREF _Toc120615864 \h 27 10.7.4 其它信息元... PAGEREF _Toc120615865 \h 27 9 10.8 报文出错处理......... PAGEREF _TOC120615866 \H 27 10.8.1 协议标识出错................. PAGEREF _Toc120615867 \h 27 10.8.2 报文太短或未被识别.... PAGEREF _Toc120615868 \h 27 10.8.3 报文类别或报文顺序出错............. PAGEREF _Toc120615869 \h 27 10.8.4 信息元出错... PAGEREF _Toc120615870 \h 27 10.9 协议参数................. PAGEREF _TOC120615871 \H 27 10.9.1 协议时钟....... PAGEREF _Toc120615872 \h 27 11. 第十一章蓝牙操作模式..... PAGEREF _TOC120615873 \H 27 11.1 概述........ PAGEREF _TOC120615874 \H 27 11.2 蓝牙串口操作模式PAGEREF _TOC120615875 \H 27 11.2.1 SPP 概述....... PAGEREF _Toc120615876 \h 27 11.2.2 SPP 链路....... PAGEREF _Toc120615877 \h 27 11.2.3 SPP 与各层协同工作性能要求.... PAGEREF _Toc120615878 \h 27 11.3 蓝牙头戴式设备操作模式..... PAGEREF _TOC120615879 \H 27 11.3.1 HSP 概述....... PAGEREF _Toc120615880 \h 27 11.3.2 HSP 功能描述................ PAGEREF _Toc120615881
### 回答1: USB协议文档是USB接口的通信规范,包含了USB接口的硬件和软件要求,描绘了USB设备如何与主机进行通信。无论是生产USB驱动程序,还是设计一个符合USB标准的设备,都需要深入了解USB协议文档。 下载USB协议文档有助于深入理解USB标准和提高USB驱动程序的开发能力。在网上可以找到USB协议文档的下载链接,需要选择合适的版本和格式进行下载。通常情况下,USB协议文档是以PDF格式呈现,需要安装相应的阅读器进行查看。 下载USB协议文档不仅能够提高开发者的技能和水平,还可以让你更好的理解现代计算机中使用的通信协议。您也可以了解USB协议文档的历史版本和修改记录,以及通过更新的版本来跟踪和适应市场的变化。 总之,下载USB协议文档是一个非常有用的事情,它可以帮助开发者更好的理解并开发USB设备,也可以帮助普通用户了解现代计算机通信规范的基本知识和原理,如果你对计算机的服务器、计算设备、IoT设备的工作原理有所了解的话,那么了解USB协议文档会更有助于您的工作和学习。 ### 回答2: USB协议文档是指USB(通用串行总线)系统的一系列协议标准文档,通过这些协议标准,可以实现电子设备之间的高速数据传输、电力供应和控制信号传输等功能,适用于多种设备和应用。USB协议文档由USB-IF(USB实现论坛)制定和发布,每个版本都包含了特定的协议指南和电器规范。 下载USB协议文档对于开发USB设备或驱动程序的人员、制造商和供应商来说非常重要,可以帮助他们深入了解和掌握USB系统的功能、性能和实现细节,从而更好地设计和开发产品。此外,对于使用USB设备的普通用户来说,也可以通过下载USB协议文档,了解USB设备的工作原理和注意事项,更好地使用和维护设备。 目前,USB协议文档可以通过USB-IF官方网站进行下载,包括USB 2.0、USB 3.0、USB Type-C等多个版本。下载USB协议文档前,需要先注册USB-IF会员,并遵守其相关规定。对于初学者来说,可以首先阅读USB系统的基础知识,然后按照具体需求选择相关的协议文档进行下载和学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值