本文对低端蓝牙设备(只能广播数据,不能交互)的BLE广播接入规范进行了详细定义。

广播规范

蓝牙广播包格式遵循蓝牙4.0规范,由若干AD Structure组成(参见Bluetooth 4.2 Core Specification, Volume 3, Part C, Chapter 11),每一个ADStructure结构由Length、AD Type、AD Data组成。如下图所示。

advertising

广播数据格式

阿里巴巴的厂商自定义格式(Manufacturer Specific Data)的AD Type须位0xFF。广播中的数据必须按照小端(Little-Endian)格式存储。

字段 字节数 取值 说明
Flags length 1 0x2 Flags length
AD Type 1 0x1 Flags Type
Flags 1 0x2 Flags Value
Manufacturer Specific Data Length 1 根据实际长度 Manufacturer Specific Data Length
AD Type 1 固定 0xFF Manufacturer Specific Data Type
Company ID 2 固定 0x01A8 Company Identifiers,0x01A8为阿里巴巴公司编码
VID和Subtype 1 0x95 取值为0x95
  • bit3~0:阿里巴巴蓝牙规范版本号,当前版本号为5;
  • bit7~4:Subtype使用蓝牙Beacon类型,为0b1001。
Payload 可变 实际报文内容

数据传输规范

  • 非交互式广播规范采用标准BLE广播的方式,数据传输采用单包形式,不支持分包。
  • 数据包的Payload由以下字段组成。
    字段 字节数 说明
    FMSK 1 FMSK用于表示设备具有的能力
    ProductID 2 平台颁发,一型一号
    MAC地址 6 平台颁发,一机一号
    Random 3 Random数据
    Data 0~N 实体数据
    CRC 1 CRC签名校验
  • FMSK用于表示设备具有的能力,各比特位定义如下。
    比特序
    0 是否是交互式广播,0:非交互式,1:交互式。非交互式广播填0
    2~1 蓝牙广播规范版本,目前为 0b00
    7~3 保留将来使用,全部填0
  • Random 和 Digest 用于表示设备的身份。
    • 定义Random是3字节的随机字节,必须采用真随机算法,可以使用adc采样值来作为随机种子。
    • 三元组预先烧录在设备中。为了保证安全,Secret不进行空中传播,也不会传递到手机端。
    • 定义Data = ali_encrypt(Secret, Random,厂商自定义数据)。ali_encrypt 是阿里巴巴针对低端蓝牙设备设计的一种加密算法,由阿里巴巴提供。
    • 定义CRC=CRC16(Secret, Data),取低位字节。

数据Payload说明

  • 如果需要厂商使用自定义的数据格式,需到云端配置脚本实现数据转换。
  • 根据使用场景,厂商自定义数据为空时候,需要用常量来填充。
  • 常量(ASCII字符串)"BIND":用于设备绑定的标识,设备上电后一般不会产生数据,用该常量进行填充。

广播收发规范

  • 设备手动上电后,需要连续广播广播包2分钟,由于自定义数据这个时候为空,需要用常量 "BIND" 来填充。
  • 绑定设备成功后,App在进入面板后需要实时的扫描目标设备的广播包(天猫精灵音箱则是一直实时扫描)。
  • 对设备广播的频率,需要进行如下约定:上报频率较低的设备,体脂秤等,一次有效数据需要持续5秒的时间。对于一次有效数据,5秒之内发送同一个数据包,其Random保持不变。