NXP

NXP QN9020 BLE协议栈学习笔记

2019-07-12 11:15发布

1.需要的硬件及软件工具:
硬件工具:
1) QN9020 Mini DK board
2)USB dongle
软件工具:
1)BLE协议栈(QBlue-1.3.9)
2)KEIL/ IAR开发软件
BLE协议栈安装目录下文件夹说明:
BinFiles_B2—–所有例程的可执行bin文件;
Documents—–有关QN9020 SDK开发及帮助文档;
Projects—–BLE协议栈源代码和具体例程以及各种通信接口驱动代码,支持IAR和KEIL工程;
Tools—–各种应用程序软件开发工具。
2.芯片及flash结构:
QN9020是ARM Crotex-M0内核的单片机,最高工作频率是32Mhz,支持BLE4.1,QN9020 flash大小为128K, 96Kb ROM,64Kb RAM。flash分为 4 个区域,分别为NVDS 区、 bootloader 区、APP区和 NVDS 备份区。如下: 这里写图片描述
3.协议栈软件结构:
Qn9020 BLE 协议栈分为 LL、 L2CAP、 SMP、 ATT、 GATT、 GAP、 Profiles 及 APP八个层。每一层又分成很多子层,每层都是独立的状态机来管理任务。
4.低功耗
QN9020 有四种电源模式: active 、 idle 、Sleep和Deep sleep四种模式。在active 和 idle中,可单独关闭外设时钟,以降低功耗。Sleep 模式一般工作在连接或者广播事件中。Deep sleep模式下,关闭了32k 时钟源,此时BLE不工作。通过这四种电源模式来设置工作模式及进入低功耗方式。
QN902x低功耗的两种睡眠模式:睡眠Sleep和深睡眠Deep sleep。随便打开一个协议栈例程进入main函数while(1)里面enter_sleep函数,可以发现执行后等待中断指令,单片机停止运行,进入睡眠模式,并立即停止时钟。要设置进入睡眠模式,单片机开启睡眠定时器,使能32 kHz时钟。如果进入深度睡眠模式,必须等待外部中断唤醒。当外部中断或睡眠定时器超时时,唤醒中断控制器(WIC)使能系统时钟。
这里写图片描述
5.睡眠模式下设置睡眠持续时间: set_max_sleep_duration(QN_BLE_MAX_SLEEP_DUR); //设置睡眠时间 #if (defined(CFG_BLE_MAX_SLEEP_DUR)) #define QN_BLE_MAX_SLEEP_DUR CFG_BLE_MAX_SLEEP_DUR #else #define QN_BLE_MAX_SLEEP_DUR 0x320 // 625us * 0x320 = 0.5s #endif /// BLE MAX sleep duration #define CFG_BLE_MAX_SLEEP_DUR 0x3e80 // 625us * 0x3e80 = 10s 单位为625us,参数最大可设置为209715199,对应的最大睡眠时间大概是36小时16分钟。
6.修改广播时间间隔: /// Minimum to maximum advertisement interval in any discoverable /// or connectable mode when user initiated: TGAP(adv_fast_interval1) /// recommended value: 30 to 60 ms; N * 0.625 #define GAP_ADV_FAST_INTV1 0x00F0 //150ms /// Minimum to maximum advertisement interval in any discoverable /// or connectable mode when user initiated: TGAP(adv_fast_interval2) /// recommended value: 100 to 150 ms; N * 0.625 #define GAP_ADV_FAST_INTV2 0x00F0 //150ms