跳转至

协议基础与公共规范

概述

本指南定义穿戴类产品对外交互的数据格式和处理要求,覆盖协议分层、链路层帧格式、业务层公共规范,以及设备、升级、助听、文件、设置、维测、手机互联和组网设备等业务命令。

协议架构

穿戴系列产品对外的数据和命令交互一共可以分为三层:业务层、链路层和物理层。

图 1 协议上下文

**图 1** 协议上下文

  • 业务层:由各个业务模块组成,对外信息交互的主要实体,包括数据打包、解析、命令处理、结果响应以及处理链路层的状态。
  • 链路层:链路的连接管理、能力同步、业务层数据包的分割、重组及安全性检查等。
  • 物理层:连接状态同步、收发的接口、MTU等。

业务导航

业务域 Model ID/标识 主要能力 章节入口
设备、升级与助听 1~4 设备状态、OTA、助听业务和助听参数 设备、升级与助听业务
文件、设置与维测 5~12 可维可测、文件传输、设备设置及 MCU、BT、Media、Graphic、Audio 维测 文件、设置与维测业务
手机互联与智能应用 13 消息中心、手机互联、应用与表盘业务 手机互联与智能应用业务
组网设备 14 组网设备状态查询与参数设置 组网设备业务

相关 SDK 定义:

链路层协议

链路层简介

数据链路层的传输单元是帧(Frame),每个Frame的最大传输能力由MFS(Max Frame Size)决定。MFS通过应用层命令进行协商。当一个应用层数据包的长度超过MFS时,数据链路层需要对数据包进行拆分,以满足Frame长度不超过MFS。由于驱动层承载能力的限制,Frame在驱动层传输时可能被物理层以MTU(Maximum Transmission Unit)为单位进一步拆分。

链路层功能

链路层主要提供如下功能:

  • 从物理层(如:蓝牙协议栈)的字节流中摘出数据帧(Frame),即成帧动作。
  • 承载业务层,对业务层数据包进行封装,并视需要进行拆分。
  • 通过校验和对常规帧的基础安全性进行检查。

链路层通用帧格式定义

图 1 链路层通用帧格式

**图 1** 链路层通用帧格式

详细字段的描述如表1所示。

表 1 数据帧格式

区域

字段名称

字节数

M/O

字段描述

Header

SOF

1

M

Start Of Frame,标识数据帧的开始,当前版本固定值为0xAF。

CTRL

1

M

数据链路层控制选项,详细定义请参见“控制域CTRL”。

CTRL2

1

O

数据链路层控制选项扩展字段,在CTRL字段最高位为1时生效。详细定义请参见“控制域CTRL”。

LEN

2

M

标识从FID字段到帧尾字段的长度,覆盖CRC和EOF字段。

FID

1

O

领域ID:标记目的领域和源领域(高4bits为目的领域,低4bits为源领域),详细定义请参见“领域FID”。

SN

1

O

如果CTRL字段中设置了分帧标志,则在Header中必须携带SN(Sequence Number)字段,用以标识帧序列号。SN取值范围为[0,255]。

ECHO

1

O

向发送端回复响应。详细定义请参见“回复响应ECHO”。

Payload

业务层数据载荷

Footer

CRC16

2

O

CRC16字段,详细定义请参见“校验和CRC16”。

EOF

1

O

End Of Frame,标识数据帧的结束,当前版本固定值为0xFA。

控制域CTRL

表 1 控制域CTRL字段说明

Bit Name 说明
bit 7 EN_EXTEND • 置1,可选项中使能CTRL2字段。
• 置0,可选项中不使能CTRL2字段。
bit 6 EN_CRYPTO • 置1,Payload为加密数据。
• 置0,Payload为不加密数据。
bit 5 EN_FULL_CRC • 置1,CRC16覆盖从SOF到Payload域结束的空间。
• 置0,CRC16覆盖LEN之后(不含LEN)到Payload域结束的空间。
• 如果EN_CRC置0,本字段无效。
bit 4 EN_EOF • 置1,可选项中使能EOF字段。
• 置0,可选项中不使能EOF字段。
bit[3:2] EN_SN 分帧标志位域:
• 00,表示本数据帧对应一个完整的业务层数据包,Header中不携带SN字段。
• 01,表示本数据帧对应一个业务层数据包的起始分帧,Header中携带SN字段对该帧进行编号。
• 10,表示本数据帧对应一个业务层数据包的过程分帧,Header中携带SN字段对该帧进行编号。
• 11,表示本数据帧对应一个业务层数据包的结束分帧,Header中携带SN字段对该帧进行编号。
bit 1 EN_FID • 置1,可选项中使能FID字段。
• 置0,可选项中不使能FID字段。
bit 0 EN_CRC • 置1,可选项中使能CRC16字段。
• 置0,可选项中不使能CRC16字段。

表 2 控制域CTRL2字段说明

Bit Name 说明
bit[7:2] Reserved 协议扩展保留位,默认置0。
bit[1:0] ACK_TYPE 链路层请求对端确认标志位。
• 00:对端不需要回复链路层的响应对该帧进行确认。
• 01:对端需要回复一个链路层的响应对该帧进行确认。
• 11:该帧是一个链路层响应ECHO帧,用于向对端进行链路层的确认或者告知CRC校验错误。
注:如没有特殊理由不建议在链路层进行确认,因此默认置00。

领域FID

Field ID:占1个字节,标识帧的目标和源领域,用于帧在目标和源领域之间传输。

bit[7:4]:高4bit用于标记帧的目标领域。

bit[3:0]:低4bit用于标记帧的源领域。

为了避免各个领域和产品型态的Field ID冲突,对将要使用的Field ID进行划分如表1所示。

表 1 Field ID字段说明

Value Name 说明
0x00 本地预留 内部处理预留。
0x01 UART设备 用于UART通道的帧。
0x02 MCU主控设备 用于标记MCU主控设备,如果是耳机目标领域本值则表示对耳设备。
0x03 GATT设备 用于标记蓝牙GATT设备。
0x04 SPP设备 用于标记蓝牙SPP设备。
….. Reserved 协议扩展保留值,最大0x0F;启用前需完成取值定义和申请。

回复响应ECHO

须知: 因为在链路层上对帧进行响应会降低传输效率,因此,请慎用!

当发送端将CTRL2字段中的ACK_TYPE值设置为01时,接收端在收到该帧后,需要向发送端回复一个链路层的响应帧进行确认,响应帧的CTRL2字段中ACK_TYPE值为11,并附带Echo字段,Echo字段值定义如表1所示。

表 1 Echo字段定义

Echo 说明
0 CRC校验成功
1 CRC校验失败
…. 待定
  • 示例1:需对端回复ACK响应的发送报文

    数据流:AF83010400015A8EC8

    数据流:AF83010400015A8EC8

  • 示例2:校验失败时的ACK报文

    数据流:AF81030300012110

    数据流:AF81030300012110

校验和CRC16

CRC覆盖的覆盖范围与CTRL字段中的EN_FULL_CRC值有关。

  • 当EN_FULL_CRC置1时,CRC覆盖EOF开始(包含EOF)到Payload域结束的空间。
  • 当EN_FULL_CRC置0时,CRC覆盖LEN之后(不含LEN)到Payload域结束的空间。

CRC算法均采用CRC-16-XMODEM:多项式公式x16+x12+x5+1,多项式POLY 0x1021

说明: 为确保设置、查询、主动上报等命令报文传输正确,命令报文必须使用CRC校验。

业务层公共规范

业务层简介

业务层是接口的最上层,使用链路层提供的服务能力进行数据收发。

业务层功能

业务层承载各业务特性的功能,可以通过扩展业务类型加入新的业务。

主要提供如下功能:

  • 业务层数据的分发。
  • 各业务数据的解析、处理、响应。

Frame格式定义

图 1 Frame格式定义

**图 1** Frame格式定义

  • 所有业务层的报文都是以Model ID/Command ID作为起始。
  • Model ID是每个报文所属的业务模块,如:设备管理、消息通知、闹钟等。
  • Command ID是每个业务对应的命令类型,如:设置日期时间、获取设备版本相关信息等。
  • TLV为封装消息中的具体信息。

说明: 根据经验,对于BLE设备,单帧的长度尽量控制在20Byte以内,总长度不得超过512Byte。

Model ID

Model ID:占1字节,用于标识模块类型。Model ID定义如表1所示。

表 1 Model ID表

Model ID Model Name 说明 必选/可选(M/O) Version
1 Device Status 设备状态查询 M 1.0
2 OTA Model OTA M 1.0
3 HearingAid Business 助听业务配置 O 1.0
4 HearingAid Parameter 助听参数配置 O 1.0
5 Maintenance Model 可维可测 O 1.0
6 File Tranfer Model 文件传输 O 1.0
7 Device Config 设备设置 O 1.0
8 APP Service Test MCU业务维测 O 1.0
9 BT Service Test BT业务维测 O 1.0
10 Media Service Test Media业务维测 O 1.0
11 Graphic Service Test Graphic业务维测 O 1.0
12 Audio Service Test 音频业务测试 O 1.0
13 MsgCenter Service 消息中心业务 O 1.0
14 MeshDev Service 组网设备业务 O 1.0
127 Customization Service 客户定制化业务 O 1.0

说明: 为避免各个领域和产品型态的Model ID冲突,将Model ID进行统一划分。 Model ID为127保留给客户定制自己的服务和业务。

表 2 Model ID保留表

Model ID 所属领域 说明 Version
0x01~0x7F MCU 手机APP和MCU之间的蓝牙接口使用 1.0
0x80~0xFF 预留 预留 1.0

Command ID

Command ID:占1字节,用于标识具体命令类型。每个Command ID表示一个独立的命令,每个Model ID对应的Command ID都从1开始,表明真实的逻辑行为,具体的Command ID说明在“Model ID命令定义”中详细介绍。

TLV

Type/Length/Value对应每条报文的具体内容。内容仅允许为TLV和TL形式,其中TL可在下挂子节点时使用,TL的L可以为下挂所有节点的总长度。

Type类型说明

Type占用1个字节:

  • bit7表示该类型是否有子节点:1表示无子节点,0表示有子节点。其中有子节点的Type不能包含Value,仅为TL格式,Length表示其子节点的总长度。此外,对于可扩展子节点的类型,如果Length字段为0,Type字段的bit7位取值为0或1均可。
  • bit[6:0]表示Type的值,取值范围0~127,每个Command ID对应的Type都从1开始代表不同的内容类型,在对应Type类型的说明中会体现否包含子节点。

    其中127为通用错误码类型。

图 1 Type类型说明

**图 1** Type类型说明

含有子节点的Type格式说明:

图 2 含有子节点的Type格式说明

**图 2** 含有子节点的Type格式说明

Length类型说明

Length表示Value的长度,Length占用的字节数可变,用第一个字节的bit7来区分标识Length的字节:

  • bit7为1时,表示Length在此字节结束,此字节的bit[6:0]为Length长度。
  • bit7为0时,表示此字节后面的7bit,标识了后面几个字节为Length长度。
  • bit7为1时,Length占用1个字节可以表示0~127的长度,示意图如下:

    TLV短长度编码

    例如:报文03 01 81 8F XX XX XX...

    • Model ID=03
    • Command ID=01
    • Type=81(二进制为1000 0001,无子节点,Type为1)
    • Length=8F(二进制为1000 1111,所以Length为15Byte)
  • bit7为0时,bit[6:0]表示了后续几个字节为Length值:

    TLV扩展长度编码

    例如:报文03 01 81 01 F3 XX XX XX...

    • Model ID=03
    • Command ID=01
    • Type=81(二进制为1000 0001,无子节点,Type为1)
    • Length=F3(Type后字节为01 F3,01二进制为0000 0001,bit7为0,后面7bit为1,表示后续一个字节的数为Length,所以Length为0xF3)

说明: 查询和获取数据时,通常发送TL格式且L=0,回复方填充数据、补充完整的TLV格式回复请参考 “连接参数查询”。

通用错误码

通用错误码Type值为255(最高位为1),格式如下:

  • 6位十进制数。
  • 最高1位为1,保留后续扩展位。
  • 次高2位表示模块。
  • 最低3位表示模块中的错误类型。

如:101001,表示01模块中的第001个错误码。

表 1 通用错误码字段描述

字段名称 Type ID Length Size(Oct) Value数据类型 说明 必选/可选(M/O)
error_code 255 1 uint32 通用错误类型,具体值请参见表2 M

M

表 2 Error Code表

Error Code

类别

说明

版本

100000

通用码

成功

  

100001

未知Error类型

  

100002

不支持该Service的请求

  

100003

不支持该Command的请求

  

100004

无权限

  

100005

系统忙

  

100006

请求格式错误

  

100007

参数错误

  

100008

申请内存失败

  

100009

响应超时

  

100010

设备电池电量低(无法进行业务)

  

100011

设备不可用

  

100012

助听耳机业务未启动

  

103001

HearingAid Config model

入参为空/数据非法

  

103002

数据过长

  

说明: 对于单板不支持的Model ID,单板返回100002(不支持该Model请求),对于单板不支持的Command ID,单板返回100003(不支持该Command请求)。

Data域的定义格式约束

各业务内的定义通用要求如下:

  • 业务数据定义考虑扩展性,预留扩展能力。
  • 业务内部按照功能进行合理的子类划分。

字节大小头约束

对于多字节传输的字段类型,均按照小端字节(LSB)序格式传输。

索引字段说明

对于本文档中描述到的所有索引,如果没有特殊说明,均是从1开始,并且进行递增。如果有特殊场景,需明确描述在接口字段定义中。

边界条件限制

  • APP和穿戴设备间应用层协议最大包长定为2048Byte。
  • 新增APP和穿戴设备间的TLV命令嵌套深度不超过5层。