BK3432_SDK BLE广播包详解及代码配置 BLE广播包基础知识讲解 广播包有两种:广播包(Advertising Data)和响应包(Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。数据包的格式如下图所示:data format每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。 有效数据部分: 包含若干个广播数据单元,称为 AD Structure。如图中所示,AD Structure 的组成是:第一个字节是长度值 Len,表示接下来的 Len 个字节是数据部分。数据部分的第一个字节表示数据的类型 AD Type,剩下的 Len - 1 个字节是真正的数据 AD data。其中 AD type 非常关键,决定了 AD Data 的数据代表的是什么和怎么解析 无效数据部分: 因为广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的,解释的时候,忽略即可。 AD type: AD type定义 摘录于:https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile 完整的BLESDK 会头文件里定义好 // GAP_ADTYPE_DEFINES GAP Advertisement Data Types #define GAP_ADTYPE_FLAGS 0x01 //!< Discovery Mode: @ref GAP_ADTYPE_FLAGS_MODES #define GAP_ADTYPE_16BIT_MORE 0x02 //!< Service: More 16-bit UUIDs available #define GAP_ADTYPE_16BIT_COMPLETE 0x03 //!< Service: Complete list of 16-bit UUIDs #define GAP_ADTYPE_32BIT_MORE 0x04 //!< Service: More 32-bit UUIDs available #define GAP_ADTYPE_32BIT_COMPLETE 0x05 //!< Service: Complete list of 32-bit UUIDs #define GAP_ADTYPE_128BIT_MORE 0x06 //!< Service: More 128-bit UUIDs available #define GAP_ADTYPE_128BIT_COMPLETE 0x07 //!< Service: Complete list of 128-bit UUIDs #define GAP_ADTYPE_LOCAL_NAME_SHORT 0x08 //!< Shortened local name #define GAP_ADTYPE_LOCAL_NAME_COMPLETE 0x09 //!< Complete local name #define GAP_ADTYPE_POWER_LEVEL 0x0A //!< TX Power Level: 0xXX: -127 to +127 dBm #define GAP_ADTYPE_OOB_CLASS_OF_DEVICE 0x0D //!< Simple Pairing OOB Tag: Class of device (3 octets) #define GAP_ADTYPE_OOB_SIMPLE_PAIRING_HASHC 0x0E //!< Simple Pairing OOB Tag: Simple Pairing Hash C (16 octets) #define GAP_ADTYPE_OOB_SIMPLE_PAIRING_RANDR 0x0F //!< Simple Pairing OOB Tag: Simple Pairing Randomizer R (16 octets) #define GAP_ADTYPE_SM_TK 0x10 //!< Security Manager TK Value #define GAP_ADTYPE_SM_OOB_FLAG 0x11 //!< Security Manager OOB Flags #define GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE 0x12 //!< Min and Max values of the connection interval (2 octets Min, 2 octets Max) (0xFFFF indicates no conn interval min or max) #define GAP_ADTYPE_SIGNED_DATA 0x13 //!< Signed Data field #define GAP_ADTYPE_SERVICES_LIST_16BIT 0x14 //!< Service Solicitation: list of 16-bit Service UUIDs #define GAP_ADTYPE_SERVICES_LIST_128BIT 0x15 //!< Service Solicitation: list of 128-bit Service UUIDs #define GAP_ADTYPE_SERVICE_DATA 0x16 //!< Service Data - 16-bit UUID #define GAP_ADTYPE_PUBLIC_TARGET_ADDR 0x17 //!< Public Target Address #define GAP_ADTYPE_RANDOM_TARGET_ADDR 0x18 //!< Random Target Address #define GAP_ADTYPE_APPEARANCE 0x19 //!< Appearance #define GAP_ADTYPE_ADV_INTERVAL 0x1A //!< Advertising Interval #define GAP_ADTYPE_LE_BD_ADDR 0x1B //!< LE Bluetooth Device Address #define GAP_ADTYPE_LE_ROLE 0x1C //!< LE Role #define GAP_ADTYPE_SIMPLE_PAIRING_HASHC_256 0x1D //!< Simple Pairing Hash C-256 #define GAP_ADTYPE_SIMPLE_PAIRING_RANDR_256 0x1E //!< Simple Pairing Randomizer R-256 #define GAP_ADTYPE_SERVICE_DATA_32BIT 0x20 //!< Service Data - 32-bit UUID #define GAP_ADTYPE_SERVICE_DATA_128BIT 0x21 //!< Service Data - 128-bit UUID #define GAP_ADTYPE_3D_INFO_DATA 0x3D //!< 3D Information Data #define GAP_ADTYPE_MANUFACTURER_SPECIFIC 0xFF //!< Manufacturer Specific Data: first 2 octets contain the Company Identifier Code followed by the additional manufacturer specific data // GAP_ADTYPE_FLAGS_MODES GAP ADTYPE Flags Discovery Modes #define GAP_ADTYPE_FLAGS_LIMITED 0x01 //!< Discovery Mode: LE Limited Discoverable Mode #define GAP_ADTYPE_FLAGS_GENERAL 0x02 //!< Discovery Mode: LE General Discoverable Mode #define GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED 0x04 //!< Discovery Mode: BR/EDR Not Supported Flags: TYPE = 0x01。这个数据用来标识设备 LE 物理连接的功能。DATA 是 0 到多个字节的 Flag 值,每个 bit 上用 0 或者 1 来表示是否为 True。如果有任何一个 bit 不为 0,并且广播包是可连接的,就必须包含此数据。各 bit 的定义如下: bit 0: LE 有限发现模式 bit 1: LE 普通发现模式 bit 2: 不支持 BR/EDR bit 3: 对 Same Device Capable(Controller) 同时支持 BLE 和 BR/EDR bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR bit 5…7: 预留 Service UUID: Service UUID: 广播数据中一般都会把设备支持的 GATT Service 广播出来,用来告诉外面本设备所支持的 Service。有三种类型的 UUID:16 bit, 32bit, 128 bit。广播中,每种类型类型有有两个类别:完整和非完整的。这样就共有 6 种 AD Type。 Local Name: Local Name: 设备名字,DATA 是名字的字符串。Local Name 可以是设备的全名,也可以是设备名字的缩写,其中缩写必须是全名的前面的若干字符。 设备全名: TYPE = 0x08 设备简称: TYPE = 0x09 TX Power Level: TX Power Level: TYPE = 0x0A,表示设备发送广播包的信号强度。DATA 部分是一个字节,表示 -127 到 + 127 dBm。 Security Manager Out of Band 带外安全管理(Security Manager Out of Band):TYPE = 0x11。DATA 也是 Flag,每个 bit 表示一个功能: bit 0: OOB Flag,0 表示没有 OOB 数据,1 表示有 bit 1: 支持 LE bit 2: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR bit 3: 地址类型,0 表示公开地址,1 表示随机地址 外设(Slave)连接间隔范围: 外设(Slave)连接间隔范围:TYPE = 0x12。数据中定义了 Slave 最大和最小连接间隔,数据包含 4 个字节: 前 2 字节:定义最小连接间隔,取值范围:0x0006 ~ 0x0C80,而 0xFFFF 表示未定义; 后 2 字节:定义最大连接间隔,同上,不过需要保证最大连接间隔大于或者等于最小连接间隔。 服务搜寻: 服务搜寻:外围设备可以要请中心设备提供相应的 Service。其数据定义和前面的 Service UUID 类似: 16 bit UUID 列表: TYPE = 0x14 32 bit UUID 列表: TYPE = 0x?? 128 bit UUID 列表: TYPE = 0x15 Service Data: Service Data: Service 对应的数据。 16 bit UUID Service: TYPE = 0x16, 前 2 字节是 UUID,后面是 Service 的数据; 32 bit UUID Service: TYPE = 0x??, 前 4 字节是 UUID,后面是 Service 的数据; 128 bit UUID Service: TYPE = 0x??, 前 16 字节是 UUID,后面是 Service 的数据 公开目标地址: 公开目标地址:TYPE = 0x17,表示希望这个广播包被指定的目标设备处理,此设备绑定了公开地址,DATA 是目标地址列表,每个地址 6 字节。 随机目标地址: 随机目标地址:TYPE = 0x18,定义和前一个类似,表示希望这个广播包被指定的目标设备处理,此设备绑定了随机地址,DATA 是目标地址列表,每个地址 6 字节。 Appearance: Appearance:TYPE = 0x19,DATA 是表示了设备的外观 厂商自定义数据: 厂商自定义数据: TYPE = 0xFF,厂商自定义的数据中,前两个字节表示厂商 ID,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。 广播包代码配置 config/user_config.h
低功耗蓝牙 BLE 广播数据解析: flags:0x06 UUID:F0FF DeviceName设备名:Fragrance (AD Type:09) ShortenedName简略设备名:Fragrance (08: AD TYPE Shortened Local Name) |
faruk.ete 发表于 2023-7-24 16:35
very usefull tutorial
|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号 ) |Sitemap
GMT+8, 2024-9-30 23:14 , Processed in 0.121116 second(s), 37 queries .
Powered by Discuz! X3.2 Licensed
© 2001-2013 Comsenz Inc.