【低功耗蓝牙 BLE】3-OpCode PDU命令表(ATT层)
OpCode 总体构成
OpCode 由以下三部分组成:
- Opcode PDU :代替某种命令,通过的PDU携带的Attribute Parameters格式不同,下面详细说明。bit 0-5位表示。
- Command:表示PDU Type 是否是命令(Command )。bit 6表示。
- Authentication Signature标识位:
如果Attribute Opcode中身份验证签名标记位为0,则 Information Payload不含有Authentication Signature;
如果Attribute Opcode中身份验证签名标记位为1,则 Information Payload含有Authentication Signature。
OpCode PDU命令表
OpCode PDU 总共包含了六类命令:包括读属性、写属性、查找属性、队列式写属性、错误、交换MTU。
①、错误
0x01 Error Response
如果属性PDU的操作码无效,或属性句柄无效,将返回错误响应PDU。在PDU的Parameter字段中,包含了错误编码。
②、交换MTU
0x02 Exchange MTU Request 交换MTU
0x03 Exchange MTU Response 交换MTU
Exchange MTU Request
客户端设备向服务端设备发送交换MTU请求,提供客户端设备的MTU值。服务端设备获知客户端的MTU值,并返回自己的MTU值。两端设备都将设置较小的MTU值作为新的MTU值。
如果两端设备没有交换MTU,则使用默认的MTU值处理属性事务。
③、查找属性
0x04 Find Information Request 查找信息
0x05 Find Information Response 查找信息
0x06 Find By Type Value Request 查找信息
0x07 Find By Type Value Response 查找信息
Find Information Request
查找信息请求,包含两个参数:起始属性句柄 & 结束属性句柄,用于获取服务端设备属性句柄处于该参数区间内的属性。
Find Information Response
查找信息响应,包含指定句柄区间内的属性UUID。如果区间内有多个属性,则返回多个响应。
Find By Type Value Request
按类型值查找请求,是在查找信息请求的基础上,加上了属性类型和属性值两个参数,这样能够更加精确的找到目标属性。
Find By Type Value Response
按类型值查找响应,包含了满足条件的属性句柄列表。
④、读属性
- 0x08 Read By Type Request 读属性
- 0x09 Read By Type Response 读属性
- 0x0A Read Request 读属性
- 0x0B Read Response 读属性
- 0x0C Read Blob Request 读属性
- 0x0D Read Blob Response 读属性
- 0x0E Read Multiple Request 读属性
- 0x0F Read Multiple Response 读属性
- 0x10 Read by Group Type Request 读属性
- 0x11 Read by Group Type Response 读属性
查看详解
Read By Type Request
按类型读请求,包含三个参数:起始属性句柄、结束属性句柄和属性类型。
Read By Type Response
按类型读响应,包含了满足条件的属性的“句柄-值”对的列表。
Read Request
读请求,包含一个参数:属性句柄。
Read Response
读响应,返回满足条件的属性值。
Read Blob Request
读片段(blob)请求,用于读取一个长包属性的值,它包含两个参数:属性句柄和偏移量。以不同的偏移量作为参数,多次执行该请求可以读取长包属性的完整值。
Read Blob Response
读片段响应,包含了长包属性值的指定偏移量片段。
Read Multiple Request
读多次请求,用于读取多个给定句柄的属性值,它包含一个参数:句柄列表。
Read Multiple Response
读多次响应,包含了多个指定句柄的属性值。
Read by Group Type Request
按组类型读请求,用于读取指定组类型的属性值,组类型是由ATT层之上的协议层设定的。它包含三个参数:起始属性句柄、结束属性句柄和属性组类型。
Read by Group Type Response
按组类型读响应,包含了满足条件的属性值列表。
⑤、写属性
- 0x12 Write Request 写属性
- 0x13 Write Response 写属性
- 0x14 Write Command 写属性
- 0x15 Signed Write Command 写属性
Write Request
写请求,将待写数值写入指定的属性值,包含两个参数:属性句柄和数值。
Write Response
写响应,表示写请求执行成功,不含任何参数。
Write Command
写命令,将待写数值写入指定的属性值,包含两个参数:属性句柄和数值。它不会触发一个写响应。
Signed Write Command
签名的写命令,与上面的写命令类似,指示包含了额外的参数:认证签名。典型应用是写控制点属性。
⑥、队列式写属性
- 0x16 Prepare Write Request 队列写属性
- 0x17 Prepare Write Response 队列写属性
- 0x18 Execute Write Request 队列写属性
- 0x19 Execute Write Response 队列写属性
- 0x1B Handle Value Notification 通知属性
- 0x1D Handle Value Indication 通知属性
- 0x1E Handle Value Confirmation 通知属性
队列写是指利用一个先进先出的队列,缓存多个属性值的写操作,然后在一个原子操作中完成所有的值写入操作。
队列写专门用于长包属性的写操作,现将一个长数据分成多个部分并记录偏移量,然后通过队列缓存,等数据发送完毕,再按照收到的顺序,一次性将整个长数据写入属性值。
Prepare Write Request
准备写请求,用于发送一个长数据片段,它包含三个参数:属性句柄、偏移量和待写入数据。
Prepare Write Response
准备写响应,收到准备写请求以后,缓存收到的数据。
Execute Write Request
执行写请求,对前面缓存的数据执行写操作,它包含一个参数:标志位。如果标志位为1,则执行写操作,如果为0,则取消前面的缓存数据。
Execute Write Response
执行写响应,根据执行写请求的标志位,执行或取消写操作。
扩展:ATT简介