3439|3

565

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【BLE 5.3无线MCU CH582】10、ble广播者角色 [复制链接]

  本帖最后由 freeelectron 于 2022-3-28 14:41 编辑

系列文章:

【BLE 5.3无线MCU CH582】1、初识CH582开发板(开箱)

【BLE 5.3无线MCU CH582】2、MounRiver IDE初体验

【BLE 5.3无线MCU CH582】3、非阻塞方式点灯

【BLE 5.3无线MCU CH582】4、串口不定长数据接收

【BLE 5.3无线MCU CH582】5、硬件I2C驱动0.96吋OLED

【BLE 5.3无线MCU CH582】6、pwm呼吸灯

【BLE 5.3无线MCU CH582】7、按键——GPIO外部中断

【BLE 5.3无线MCU CH582】8、adc采样(内部bat、内部温度,外部输入)

【BLE 5.3无线MCU CH582】9、硬件spi驱动lcd

 

0、前面的话

一般蓝牙的协议栈,都符合蓝牙核心规范,蓝牙核心规范可以从蓝牙联盟的官网上下载到,但是各个厂家的蓝牙协议栈都是不开源的,典型的协议栈有nimble,bluedroid,其中bluedroid也是安卓说是用的协议栈,本文使用的ch58x,协议栈是不开源的,官方以静态库(LIBCH58xBLE.a)的形式给出,因此只需要关心api即可,api相关文件是CH58xBLE_LIB.h。

 

1、GAP层四种角色

Broadcaster :广播者,广播数据,不支持连接;

Observer:观察者,接收广播数据,不支持连接;

Peripheral:外围设备,也叫从机,只支持单一链接;

Central:中心设备,也叫主机,支持多个连接。

 

2、广播数据格式

可以看出广播数据格式由多个AD Structure 组成,每个AD Structure由3部分构成,LengthAD TypeAD Data组成,Length为1字节,表示AD Type、AD Data的总长度,现有的AD Type也都是一字节的。

 

3、CH58x中关于广播数据类型的定义

// 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: -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_URI                          0x24 //!< URI
#define GAP_ADTYPE_SUPPORTED_FEATURES           0x27 //!< LE Supported Features
#define GAP_ADTYPE_CHANNEL_MAP_UPDATE           0x28 //!< Channel Map Update Indication
#define GAP_ADTYPE_BIG_INFO                     0x2C //!< BIGInfo
#define GAP_ADTYPE_BROADCAST_CODE               0x2D //!< Broadcast_Code
#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

 可以看出只规定了部分,剩余未定义的,其余可以自定义使用。

 

4、CH58x代码中关于广播数据的定义

static uint8 advertData[] = {
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
    0x02,// length of this data
    GAP_ADTYPE_FLAGS,
    GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

    // Broadcast of the data
    0x04,// length of this data including the data type byte
    GAP_ADTYPE_MANUFACTURER_SPECIFIC,    // manufacturer specific advertisement data type
    'b', 'l', 'e',

    0x06,
    GAP_ADTYPE_LOCAL_NAME_SHORT,
    'm','y','b', 'l', 'e',

    0x03,
    GAP_ADTYPE_APPEARANCE,
    (GAP_APPEARE_GENERIC_TAG>>0)&0xff,
    (GAP_APPEARE_GENERIC_TAG>>8)&0xff,

    0x07,
    0xfe,
    0x01,0x02,0x03,0x04,0x05,0x06,
};

其中GAP_ADTYPE_FLAGS是标志;

GAP_ADTYPE_MANUFACTURER_SPECIFIC:标识厂商,如果是蓝牙联盟的会员,会给分配一个固定值,用来表示某个具体的厂商;

GAP_ADTYPE_LOCAL_NAME_SHORT:蓝牙名称;

GAP_ADTYPE_APPEARANCE:外观,例如设备是一个蓝牙耳机,鼠标等,蓝牙核心规范里面都有对应的定义,本文测试显示为一个tag;

0xfe,是个人自定义的一个,可以通过这个传递一些私有数据。

 

5、app调试

本文使用“nRF Connect”进行测试

   

 可以看出广播数据,刚好是我们代码中设定的,其中蓝牙联盟规定的一些,可以显示出具体的含义,个人自定义的是不能显示的。

 

 

 

最新回复

楼主准备做一个什么样的Demo?期待中!   详情 回复 发表于 2022-3-28 16:17
点赞 关注
个人签名stm32/LoRa物联网:304350312
 
 

回复
举报

565

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

分享两个文档:

蓝牙核心规范v5.3: Core_v5.3.part1.rar (15 MB, 下载次数: 224)

  Core_v5.3.part2.rar (2.77 MB, 下载次数: 7)

核心规范补充v10: CSS_v10(核心规范补充).pdf (346.55 KB, 下载次数: 8)

个人签名stm32/LoRa物联网:304350312
 
 
 

回复

6842

帖子

11

TA的资源

版主

板凳
 
楼主分析源码很透彻,我现在只用了Peripheral 有时间试一下Central
 
 
 

回复

6881

帖子

2

TA的资源

版主

4
 

楼主准备做一个什么样的Demo?期待中!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表