logo资料库

蓝牙4.0帧格式详解.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
Channel Preamble Access Address PDU Header 1byte 1byte 4bytes 2bytes PDU Payload Variable (0-37bytes) CRC RSSI (dBm) FCS 3bytes 负值 Ok PDU type Res TXAdd RXAdd 4bits 2bits 1bit 1bit PDU length 6bits Res 2bits AdvA 6bytes AdvData 最大 31bytes PDU type 0000 0001 0010 0110 Packet name ADV_IND ADV_DIRECT_IND ADV_NONCONN_IND ADV_SCAN_IND PDU type 0011 0100 0101 Other Packet name SCAN_REQ SCAN_RSP CONNECT_REQ Reserved 1)Channel:packetsniffer 设置的广播频道。一共有三个(37,38,39),如 0x25 代表 37 频道。 2)Preamble:前导码,广播接收端可以用来进行同步和自动增益控制(AGC)。 在广播帧中 Preamble 固定为“01010101”。 3)Access Address:地址,在广播帧中 Access Address 固定为 0x8E89BED6。对 于其它数据信道,地址部分由不同的连接决定。 4)PDU Header: 用来表示不同类型的帧。 A)以 ADV_开头的帧表示该帧是广播(advertising)帧,是由 advertiser(蓝 牙外设)发出的,它们有 4 种类型,分别用在不同的蓝牙设备上面。 B) ADV_SCAN_IND 为扫描帧,是由 scanner(手机、平板、PC)发出的。 C) ADV_SCAN_REQ 为扫描请求帧,是由 scanner(手机、平板、PC)发出 的。只在 scanner 想从 advertiser 获取更多的广播数据的时候才由 scanner 发出。相应的,当 ADV_SCAN_REQ 被发出以后,advertiser 会以 SCAN_RSP 作为回应。 D) SCAN_RSP 为 ADV_SCAN_ REQ 的回应。 E) CONNECT_REQ 为 scanner 向 advertiser 发起的建立连接的请求。 F) Res 为保留字段,不用理会。 G) TxAdd、RxAdd 用来表示发送该广播帧的蓝牙设备的蓝牙地址类型。1 表 示 random address 0 表示 public address。 H) Length 表示后面 PDU Payload 的大小。
5) PDU Payload 为广播的实际载荷。 AdvA:蓝牙的 MAC 地址,48 位的 IEEE 地址。(如 0x78C5E56EACD2)。 AdvData:从设备广播数据。 6)CRC:位整个广播帧的 24bitCRC 值。 7) FCS:接收报文时都会有 FCS 校验,如果 FCS 错误,该报文会被丢弃,这个 在收包时就会判断,上层不用考虑。 生成 AdvData 数据的函数: static uint8 advertData[] = { 0x02, GAP_ADTYPE_FLAGS, DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED, // 第 一 段 数据的主体,设置默认的广播格式,并且不支持 BR/EDR 模式,CC2540 是 ble 单模芯片,是 不支持 BR/EDR 的。 // 表示接下来这一段数据的长度(不包括 0x02 本身) //表示这段数据的类型或者用途(有哪些种类) // service UUID, to notify central devices what services are included // in this peripheral 0x03, GAP_ADTYPE_16BIT_MORE, LO_UINT16( SIMPLEPROFILE_SERV_UUID ), HI_UINT16( SIMPLEPROFILE_SERV_UUID ), //Server 的 UUID //表示接下来这一段数据的长度(不包括 0x03 本身) // 广播时所展示的 Server 的 UUID }; #define GAP_ADTYPE_ADV_IND 0x00 //可连接、未指定 #define GAP_ADTYPE_ADV_HDC_DIRECT_IND 0x01 //可连接、高占空比、指定 #define GAP_ADTYPE_ADV_SCAN_IND 0x02 //!< Scannable undirected advertisement #define GAP_ADTYPE_ADV_NONCONN_IND 0x03 //!< Non-Connectable undirected advertisement #define GAP_ADTYPE_ADV_LDC_DIRECT_IND// uint8 advType = GAP_ADTYPE_ADV_SCAN_IND; GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType ); 协议栈有个工程专门发送广播包的,可参考: C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\SimpleBLEBroadcaster
分享到:
收藏