【低功耗蓝牙 BLE】3-OpCode PDU命令表

发布时间 2023-11-13 21:38:03作者: FBshark

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
执行写响应,根据执行写请求的标志位,执行或取消写操作。