CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
文档中心 > GR533x开发者指南/ 使用SDK开发调试/ 创建Bluetooth LE Application Copy URL

创建Bluetooth LE Application

本节介绍基于Keil开发环境,利用GR533x SDK快速创建用户自定义的Bluetooth LE应用。

准备ble_app_example

基于GR533x SDK提供的模板工程,创建一个新工程。

进入SDK_Folder\projects\ble\ble_peripheral\,拷贝ble_app_template目录,并将其重命名为ble_app_example。将ble_app_example\Keil_5中的.uvoptx.uvprojx的主文件名修改为ble_app_example

图 13 ble_app_example文件夹

双击ble_app_example.uvprojx,在Keil中打开工程。点击 ,打开Options for Target 'GRxx_Soc'窗口,选择Output标签页,在Name of Executable栏中输入ble_app_example,将生成的目标文件名称设置为ble_app_example

图 14 修改Name of Executable

在Keil Project Explorer中,可查看到ble_app_example工程下的所有groups。

图 15 ble_app_example groups

ble_app_example工程下的groups主要分为两类:SDK groups和User groups。

  • SDK groups

    包括gr_startup、gr_arch、gr_soc、gr_board、gr_stack_lib、gr_app_drivers、gr_libraries、g r_profiles及external。

    图 16 SDK groups

    SDK groups下的源文件无需修改,各group的具体描述如下:

    表 7 SDK groups
    SDK group名称 描述

    gr_startup

    系统启动文件。

    gr_arch

    System Core、PMU的初始化配置文件和系统中断的接口实现。

    gr_soc 与SoC相关的处理文件,主要是在进入main函数之前,对Clock、PMU、Vector等模块进行初始化与校准。
    gr_board 板级描述文件,主要实现Log、Key、Led等相关组件。

    gr_stack_lib

    GR533x SDK lib文件。

    gr_app_drivers

    易于Application开发者使用的驱动API源文件。开发者可根据实际需求,添加项目所需App 驱动。

    gr_libraries

    SDK提供的常用辅助软件模块、外设驱动的开源文件。

    gr_profiles

    GATT Services/Service Clients源文件。开发者可根据实际需求,添加项目所需GATT源文件。

    external

    第三方程序的源文件,例如FreeRTOS、SEGGER RTT。开发者可根据实际需求,添加项目所需第三方程序。

  • User groups

    User groups包括user_platform和user_app。

    图 17 user_groups

    User groups下的源文件需要开发者实现,各group的具体描述如下:

    表 8 User groups
    User group名称 描述

    user_platform

    软硬件资源的配置和应用程序的初始化,开发者需要根据实际项目需求,实现相应接口。

    user_app

    主函数入口、开发者创建的其他源文件,配置Bluetooth LE协议栈运行时参数和实现GATT Service/Service Client的事件处理函数。

配置工程

开发者需根据产品特性,配置相应的工程选项,包括NVDS、代码运行模式、存储器布局、After Build以及其他配置项等。

配置custom_config.h

custom_config.h用于配置Application工程参数,开发者可选择直接修改文件或者使用Wizard界面进行配置。

提示:

各Application示例工程的custom_config.h位于其工程目录下的Src\config

  • 修改文件

    GR533x SDK提供了一个Application工程配置模板文件(SDK_Folder\build\config\custom_config.h),开发者可直接修改该模板文件,配置Application工程参数。

    表 9 custom_config.h中的参数
    描述
    SOC_GR533X 定义芯片版本号。
    CHIP_TYPE 芯片型号。

    1:GR5331AENI

    2:GR5331CENI

    3:GR5332AENE

    4:GR5331CENI

    说明

    工程编译时,应根据实际使用的芯片型号配置该参数。

    SYS_FAULT_TRACE_ENABLE

    使能/禁用Trace信息打印。

    使能该功能后,发生HardFault时,可打印Call Stack 中的Trace信息。

    0:禁用Trace打印

    1:使能Trace打印

    ENABLE_BACKTRACE_FEA

    使能/禁用栈回溯功能。

    0:禁用栈回溯功能

    1:使能栈回溯功能

    APP_LOG_ENABLE

    APP LOG模块开关。

    0:禁用Application Log模块

    1:使能Application Log模块

    APP_LOG_STORE_ENABLE

    APP LOG STORE模块开关。

    0:禁用APP LOG STORE模块

    1:使能APP LOG STORE模块

    APP_LOG_PORT

    设置APP LOG输出方式。

    0:UART

    1:J-Link RTT

    2:ARM ITM

    说明

    默认状态下,该宏在custom_config.h中已被删除,开发者可根据需求重新定义。

    PLATFORM_SDK_INIT_ENABLE

    使能/禁用Platform初始化。

    0:使能Platform初始化

    1:禁用Platform初始化

    PMU_CALIBRATION_ENABLE

    使能/禁用PMU校准功能。

    使能该功能后,系统将自动监测温度与电压,并自适应调整。建议默认使能。

    0:使能PMU校准

    1:禁用PMU校准

    说明:

    在高/低温使用场景下,必须使能PMU校准功能。

    NVDS_START_ADDR

    NVDS占用Flash区域的起始地址。

    说明:

    默认状态下该宏在custom_config.h中已被删除。开发者如需更改NVDS占用区域的配置,可启用该宏,再设置自定义值(必须按4 KB对齐)。

    NVDS_NUM_SECTOR NVDS占用的Flash Sector数。

    SYSTEM_STACK_SIZE

    Application所需的Call Stack的大小,默认为8 KB。

    开发者可根据实际使用情况,调整该值 。

    说明:

    ble_app_example示例工程编译后,可在其目录下的Keil_5\Objects\ble_app_example.htm文件中查看参考的Maximum Stack Usage。

    SYSTEM_HEAP_SIZE

    Application所需的Heap大小,默认为0 KB。

    开发者可根据实际使用情况,调整该值。

    CHIP_VER 固件使用的芯片版本,默认值为0x5332。
    APP_CODE_LOAD_ADDR *

    程序存储空间的起始地址。

    说明:

    该地址需在Flash地址范围内。

    APP_CODE_RUN_ADDR * 程序运行空间的起始地址

    说明:

    该地址值需与APP_CODE_LOAD_ADDR保持一致,Application采用XIP模式运行。

    SYSTEM_CLOCK *

    设置系统时钟频率。

    0:64 MHz

    1:32 MHz

    2:16 MHz(XO)

    3:16 MHz

    4:8 MHz

    5:2 MHz

    SYSTEM_POWER_MODE

    设置系统供电方式。

    0:采用DC-DC供电

    1:采用SYS_LDO供电

    CFG_LF_ACCURACY_PPM Bluetooth LE低频睡眠时钟精度,其取值范围为1 ~ 500,单位PPM。

    CFG_LPCLK_INTERNAL_EN

    是否使用芯片内部的OSC时钟作为Bluetooth LE低频睡眠时钟。

    若使用,则CFG_LF_ACCURACY_PPM将被强 制 设 置 为 500 PPM 。

    0:不使用

    1:使用

    BOOT_LONG_TIME *

    设置芯片启动时是否需要延迟1s再执行后半段启动代码。

    0:不延迟

    1:延迟1秒

    BOOT_CHECK_IMAGE

    在XIP模式下,冷启动时是否对Image进行校验。

    0:不进行校验

    1:进行校验

    DTM_TEST_ENABLE

    使能/禁用DTM测试。

    0:禁用DTM测试

    1:使能DTM测试

    RF_TX_PA_SELECT

    选择射频功率放大器。

    1:SPA(适用于GR533x系列:GR5331支持-20 dBm ~6 dBm TX 功率;GR5332支持-20 dBm ~ 5 dBm TX功率)

    2:UPA(适用于GR5331,支持-15 dBm ~ 2 dBm TX 功率)

    3:HPA(适用于GR5332,支持-10 dBm ~ 15 dBm TX功率)

    CFG_PATCH_ENABLE

    使能补丁。

    0:禁用补丁

    1:使能补丁

    CFG_MAX_PRFS

    支持的最大GATT Profile/Service数。

    开发者可根据实际需求,设置该值。值越大,占用的RAM空间越大。

    取值范围:1 ~ 64

    CFG_MAX_BOND_DEVS 支持的最大绑定设备数,默认值为4。

    CFG_MAX_CONNECTIONS

    支持的最大连接数,最大值为10。

    开发者可根据实际需求,设置该值。值越大,Bluetooth LE Stack Heap占用的RAM空间就越大。

    Bluetooth LE Stack Heap具体大小由以下四个宏(位于flash_scatter_config.h)定义:

    • ENV_HEAP_SIZE
    • ATT_DB_HEAP_SIZE
    • KE_MSG_HEAP_SIZE
    • NON_RET_HEAP_SIZE

    说明:

    开发者不可修改上述四个宏。

    CFG_ MAX_ADVS

    支持的最大Bluetooth LE Legacy/Extended Advertising 数。

    取值范围:0 ~ 5

    注意:

    Bluetooth LE 广播(Legacy/Extended/Periodic Advertisings)总数不应超过 5

    CFG_ MAX_SCAN

    支持的最大 Bluetooth LE 扫描数。

    取值范围:0 ~ 1

    CFG_MUL_LINK_WITH_SAME_DEV

    是否支持同一设备的多个链接。

    0:不支持

    1:支持

    CFG_BT_BREDR

    是否支持LE链路生成Bluetooth Classic Link Key。

    0:不支持

    1:支持

    CFG_CAR_KEY_SUPPORT

    是否支持车钥匙功能。

    0:不支持

    1:支持

    CFG_CONTROLLER_ONLY

    是否只支持 Bluetooth LE 控制器(用于外部主机或 HCI uart 传输)。

    0:支持 Bluetooth LE 控制器和主机

    1:仅支持 Bluetooth LE 控制器

    CFG_MASTER_SUPPORT

    是否支持Master角色。

    0:不支持

    1:支持

    CFG_SLAVE_SUPPORT

    是否支持Slave角色。

    0:不支持

    1:支持

    CFG_LEGACY_PAIR_SUPPORT

    是否支持Legacy配对。

    0:不支持

    1:支持

    CFG_SC_PAIR_SUPPORT

    是否支持Secure配对。

    0:不支持

    1:支持

    CFG_COC_SUPPORT

    是否支持面向连接通道(COC)。

    0:不支持

    1:支持

    CFG_GATTS_SUPPORT

    是否支持GATT Server。

    0:不支持

    1:支持

    CFG_GATTC_SUPPORT

    是否支持GATT Client。

    0:不支持

    1:支持

    CFG_CONN_AOA_AOD_SUPPORT

    是否支持基于连接AoA/AoD。

    0:不支持(默认)

    1:支持

    说明:

    该宏固定配置为0。

    CFG_CONNLESS_AOA_AOD_SUPPORT

    是否支持无连接AoA/AoD。

    0:不支持

    1:支持

    说明:

    该宏固定配置为0。

    CFG_RANGING_SUPPORT

    是否支持测距(Ranging)。

    0:不支持

    1:支持

    说明:

    该宏固定配置为0。

    EM_BUFF_ENABLE

    是否启用EM 缓冲区。

    0:不含Bluetooth LE业务,仅外设工程,关闭EM缓冲区。

    1:含Bluetooth LE业务,启用EM 缓冲区。

    CFG_MESH_SUPPORT

    是否支持Mesh功能。

    0:不支持

    1:支持

    CFG_SNIFFER_SUPPORT

    是否支持RSSI监听功能。

    0:不支持

    1:支持

    说明:

    后续SDK版本将支持该功能。

    SECURITY_CFG_VAL

    安全配置

    0: 启用一级算法

    1: 启用二级算法

    说明:

    *:上表中带*的宏可用于初始化BUILD_IN_APP_INFO结构体,该结构体被定义在固件的0x200地址处,并使用custom_config.h中的宏进行初始化。系统启动时,Bootloader程序会从该地址读取固件的配置信息,作为启动参数。

  • 使用Wizard配置参数

    custom_config.h文件中的注释符合Keil的ConfigurationWizard Annotations规范。因此,开发者可在Keil中打开custom_config.h文件,利用图形化的Keil Configuration Wizard界面配置Application工程参数。

    提示:

    推荐开发者使用Wizard进行参数配置,以避免出现非法参数值。

    图 18 Configuration Wizard for custom_config.h

配置存储器布局

在Keil工程中,Scatter (.sct)文件描述链接器使用的存储区域。GR533x SDK提供了一个Scatter示例文件(SDK_Folder\platform\soc\linker\keil\flash_scatter_common.sct),可帮助开发者快速完成存储器布局配置。另外,flash_scatter_common.sct使用的宏定义在flash_scatter_config.h中。

说明:

在Keil中,__attribute__((section("name")))可用于将一个函数或变量定义在特定的内存段中,其中name由开发者自定义。Scatter(.sct)文件可用于将自定义字段定义在特定位置。例如,将应用程序的ZI(零初始化)数据定义在名称为.bss.app的内存段中,则可设置attributeattribute ((section(".bss.app ")))

开发者可按照以下步骤配置存储器布局:

  1. 点击Keil 工具栏中的Options for Target按钮 ,打开Options for Target ‘GRxx_Soc’对话框,再选中Linker标签页。
  2. Linker页面中的Scatter File栏,点击按钮...,浏览选择SDK_Folder\platform\soc\linker\keil下的flash_scatter_common.sct文件。开发者还可先将Scatter文件(.sct)和配置文件(.h)拷贝至ble_app_example工程的对应目录,再浏览选择文件。
    说明:
    • flash_scatter_common.sct中的#! armcc -E –I语句指定了flash_scatter_common.sct依赖的头文件的目录。若该路径错误,则会产生Linker Error。
    • 在GR533x SDK的Scatter文件flash_scatter_common.sct中,可利用custom_config.h的宏定义EM_BUFF_ENABLE确定SRAM末端区域是否需要配置用于Bluetooth LE的EM。开发者需根据工程是否包含Bluetooth LE业务,对EM_BUFF_ENABLE进行定义。
  3. 点击Edit...按钮,打开.sct文件,然后根据实际的产品存储器布局,修改相应代码。
    图 19 配置Scatter File
  4. 点击OK按钮,保存设置。

配置After Build

在Keil中,After Build可用于指定工程Build完成后执行的命令行语句。

ble_app_template工程已默认配置After Build。因此,基于Template工程创建的新工程(ble_app_example)可无需手动配置。

若开发者直接通过Keil的新建工程创建一个工程,则需要按照以下步骤配置After Build:

  1. 点击Keil Toolbar的Options for Target按钮 ,打开Options for Target ‘GRxx_Soc’对话框,选择User标签页。
  2. After Build/Rebuild展开的选项中勾选Run #1,并在对应的User Command栏输入fromelf.exe --text -c --output Listings\@L.s Objects\@L.axf,以便调用Keil fromelf工具,基于axf文件生成汇编文件。
  3. After Build/Rebuild展开的选项中勾选Run #2,并在对应的User Command栏输入fromelf.exe --bin --output Listings\@L.bin Objects\@L.axf,以便调用Keil fromeIf工具,基于axf文件生成汇编文件。
  4. 点击OK,保存设置。
图 20 配置After Build

添加用户代码

开发者可根据实际应用需求,修改ble_app_example中相应代码。

修改主函数

以下为典型的main.c文件内容:

/**@brief Stack global variables for Bluetooth protocol stack. */ STACK_HEAP_INIT(heaps_table);
…
int main (void)
{
    // Initialize user peripherals.
    app_periph_init();

    // Initialize ble stack.
    ble_stack_init(ble_evt_handler, &heaps_table);

    // loop
    while (1)
    {
        app_log_flush();
        pwr_mgmt_schedule();
    }
}
  • STACK_HEAP_INIT(heaps_table)定义了7个全局数组,供Bluetooth LE协议栈作为Heap使用。开发者不可修改此定义,否则Bluetooth LE协议栈可能无法正常运行。Heap大小与配置custom_config.h中的Bluetooth LE业务量有关。
  • app_periph_init()用于初始化外设。在开发调试阶段,该函数中的SYS_SET_BD_ADDR可用于设置临时的Public Address,pwr_mgmt_mode_set()中可设置在自动功耗管理时MCU的工作模式(SLEEP/IDLE/ACTIVE)。app_periph_init()函数实现位于user_periph_setup.c文件,其示例代码如下所示:
/**@brief Bluetooth device address. */
static const uint8_t s_bd_addr[SYS_BD_ADDR_LEN] = {0x11, 0x11, 0x11, 0x11,0x11, 0x11};
…
void app_periph_init(void)
{
    SYS_SET_BD_ADDR(s_bd_addr); 
    board_init(); 
    pwr_mgmt_mode_set(PMR_MGMT_SLEEP_MODE);
}
  • while(1) { }中添加Application的Main Loop代码,比如处理外部输入、更新GUI。
  • 若需打开App Log模块,则应在Main Loop中调用app_log_flush(),以保证系统进入Sleep状态之前,完整输出所有Log。关于App Log模块使用,参考输出调试Log
  • 调用pwr_mgmt_shcedule()实现自动功耗管理,以降低系统功耗。

实现Bluetooth LE业务逻辑

Application的Bluetooth LE业务逻辑由GR533x SDK中定义的若干Bluetooth LE Events进行驱动。因此,Application需要实现相应的Event Handler,以获取Bluetooth LE Stack的运行结果或状态变更通知。由于Event Handler是在Bluetooth LE SDK IRQ的中断上下文(Interrupt Context)中被调用的,因此开发者不能在Handler中执行比较耗时的操作,例如阻塞式函数调用、无限循环等。否则,可能阻塞整个系统运行,导致Bluetooth LE Stack与SDK Bluetooth LE模块无法按照正常时序运行。

Bluetooth LE Events按照Common、GAP Management 、GAP Connection Control、Security Manager、L2CAP、GATT Common、GATT Server和GATT Client分类。

GR533x SDK支持的Bluetooth LE Events,如下表所示:

表 10 Bluetooth LE Events
Event 类别 Event名称 描述
Common BLE_COMMON_EVT_STACK_INIT BLE Stack init complete event.

GAP Management

BLE_GAPM_EVT_CH_MAP_SET Channel Map Set complete event.
BLE_GAPM_EVT_WHITELIST_SET Whitelist Set complete event.

BLE_GAPM_EVT_PER_ADV_LIST_SET

Periodic Advertising List Set complete event.

BLE_GAPM_EVT_PRIVACY_MODE_SET Privacy Mode for Peer Device Set complete event.
BLE_GAPM_EVT_LEPSM_REGISTER LEPSM Register complete event.
BLE_GAPM_EVT_LEPSM_UNREGISTER LEPSM Unregister complete event.
BLE_GAPM_EVT_DEV_INFO_GOT Device Info Get event.
BLE_GAPM_EVT_ADV_START Advertising Start complete event.
BLE_GAPM_EVT_ADV_STOP Advertising Stop complete event.
BLE_GAPM_EVT_SCAN_REQUEST Scan Request event.
BLE_GAPM_EVT_ADV_DATA_UPDATE Advertising Data update event.
BLE_GAPM_EVT_SCAN_START Scan Start complete event.
BLE_GAPM_EVT_SCAN_STOP Scan Stop complete event.
BLE_GAPM_EVT_ADV_REPORT Advertising Report event.

BLE_GAPM_EVT_SYNC_ESTABLISH

Periodic Advertising Synchronization Establish event.

BLE_GAPM_EVT_SYNC_STOP

Periodic Advertising Synchronization Stop event.

BLE_GAPM_EVT_SYNC_LOST

Periodic Advertising Synchronization Lost event.
BLE_GAPM_EVT_READ_RSLV_ADDR Read Resolvable Address event.

GAP Connection Control

BLE_GAPC_EVT_PHY_UPDATED PHY Update event.
BLE_GAPC_EVT_CONNECTED Connected event.
BLE_GAPC_EVT_DISCONNECTED Disconnected event.
BLE_GAPC_EVT_CONNECT_CANCEL Connect Cancel event.
BLE_GAPC_EVT_AUTO_CONN_TIMEOUT Auto Connect Timeout event.
BLE_GAPC_EVT_CONN_PARAM_UPDATED Connect Parameter Updated event.
BLE_GAPC_EVT_CONN_PARAM_UPDATE_REQ Connect Parameter Request event.
BLE_GAPC_EVT_PEER_NAME_GOT Peer Name Get event.
BLE_GAPC_EVT_CONN_INFO_GOT Connect Info Get event.
BLE_GAPC_EVT_PEER_INFO_GOT Peer Info Get event.
BLE_GAPC_EVT_DATA_LENGTH_UPDATED Data Length Updated event.
BLE_GAPC_EVT_DEV_INFO_SET Device Info Set event.
BLE_GAPC_EVT_CONNECT_IQ_REPORT Connection IQ Report info event.
BLE_GAPC_EVT_CONNECTLESS_IQ_REPORT Connectionless IQ Report info event.
BLE_GAPC_EVT_LOCAL_TX_POWER_READ Local transmit power read indication info event.
BLE_GAPC_EVT_REMOTE_TX_POWER_READ Remote transmit power read indication info event.
BLE_GAPC_EVT_TX_POWER_CHANGE_REPORT Transmit power change reporting info event.
BLE_GAPC_EVT_PATH_LOSS_THRESHOLD_REPORT Path loss threshold reporting info event.
BLE_GAPC_EVT_RANGING_IND Ranging indication event.
BLE_GAPC_EVT_RANGING_SAMPLE_REPORT Ranging sample report event.
BLE_GAPC_EVT_RANGING_CMP_IND Ranging complete indication event.
BLE_GAPC_EVT_DFT_SUBRATE_SET Default subrate param set complete event.
BLE_GAPC_EVT_SUBRATE_CHANGE_IND Subrate change indication event.

GATT Common

BLE_GATT_COMMON_EVT_MTU_EXCHANGE MTU Exchange event.
BLE_GATT_COMMON_EVT_PRF_REGISTER Service Register event.

GATT Server

BLE_GATTS_EVT_READ_REQUEST GATTS Read Request event.
BLE_GATTS_EVT_WRITE_REQUEST GATTS Write Request event.
BLE_GATTS_EVT_PREP_WRITE_REQUEST GATTS Prepare Write Request event.
BLE_GATTS_EVT_NTF_IND GATTS Notify or Indicate Complete event.
BLE_GATTS_EVT_CCCD_RECOVERY GATTS CCCD Recovery event.
BLE_GATTS_EVT_MULT_NTF GATTS Multiple Notifications event.
BLE_GATTS_EVT_ENH_READ_REQUEST GATTS Enhanced Read Request event.
BLE_GATTS_EVT_ENH_WRITE_REQUEST GATTS Enhanced Write Request event.
BLE_GATTS_EVT_ENH_PREP_WRITE_REQUEST GATTS Enhanced Prepare Write Request event.
BLE_GATTS_EVT_ENH_NTF_IND GATTS Enhanced Notify or Indicate Complete event.
BLE_GATTS_EVT_ENH_CCCD_RECOVERY GATTS Enhanced CCCD Recovery event.
BLE_GATTS_EVT_ENH_MULT_NTF GATTS Enhanced Multiple Notifications event.

GATT Client

BLE_GATTC_EVT_SRVC_BROWSE GATTC Service Browse event.
BLE_GATTC_EVT_PRIMARY_SRVC_DISC GATTC Primary Service Discovery event.
BLE_GATTC_EVT_INCLUDE_SRVC_DISC GATTC Include Service Discovery event.
BLE_GATTC_EVT_CHAR_DISC GATTC Characteristic Discovery event.
BLE_GATTC_EVT_CHAR_DESC_DISC GATTC Characteristic Descriptor Discovery event.
BLE_GATTC_EVT_READ_RSP GATTC Read Response event.
BLE_GATTC_EVT_WRITE_RSP GATTC Write Response event.
BLE_GATTC_EVT_NTF_IND GATTC Notify or Indicate Receive event.
BLE_GATTC_EVT_CACHE_UPDATE GATTC Cache Update event.
BLE_GATTC_EVT_ENH_SRVC_BROWSE GATTC Enhanced Service Browse event.
BLE_GATTC_EVT_ENH_PRIMARY_SRVC_DISC GATTC Enhanced Primary Service Discovery event.
BLE_GATTC_EVT_ENH_INCLUDE_SRVC_DISC GATTC Enhanced Include Service Discovery event.
BLE_GATTC_EVT_ENH_CHAR_DISC GATTC Enhanced Characteristic Discovery event.
BLE_GATTC_EVT_ENH_CHAR_DESC_DISC GATTC Enhanced Characteristic Descriptor Discovery event.
BLE_GATTC_EVT_ENH_READ_RSP GATTC Enhanced Read Response event.
BLE_GATTC_EVT_ENH_WRITE_RSP GATTC Enhanced Write Response event.
BLE_GATTC_EVT_ENH_NTF_IND GATTC Enhanced Notify or Indicate Receive event.
Security Manager BLE_SEC_EVT_LINK_ENC_REQUEST Link Encrypted Request event.
BLE_SEC_EVT_LINK_ENCRYPTED Link Encrypted event.
BLE_SEC_EVT_KEY_PRESS_NTF Key Press event.
BLE_SEC_EVT_KEY_MISSING Key Missing event.

L2CAP

BLE_L2CAP_EVT_CONN_REQ L2CAP Connect Request event.
BLE_L2CAP_EVT_CONN_IND L2CAP Connected Indicate event.
BLE_L2CAP_EVT_ADD_CREDITS_IND L2CAP Credits Add Indicate event.
BLE_L2CAP_EVT_DISCONNECTED L2CAP Disconnected event.
BLE_L2CAP_EVT_SDU_RECV L2CAP SDU Receive event.
BLE_L2CAP_EVT_SDU_SEND L2CAP SDU Send event.
BLE_L2CAP_EVT_ADD_CREDITS_CPLT L2CAP Credits Add Completed event.
BLE_L2CAP_EVT_ENH_CONN_REQ L2CAP Enhanced Connect Request event.
BLE_L2CAP_EVT_ENH_CONN_IND L2CAP Enhanced Connected Indicate event.
BLE_L2CAP_EVT_ENH_RECONFIG_CPLT L2CAP Enhanced Reconfig Completed event.
BLE_L2CAP_EVT_ENH_RECONFIG_IND L2CAP Enhanced Reconfig Indicate event.

开发者需根据产品的功能需求,实现所需的Bluetooth LE Event Handler。例如,若产品不支持Security Manager,则可无需实现对应的Event;若产品只支持GATT Server而不支持GATT Client,则可无需实现GATT Client对应的Event。并且,对于每类Event的Event Hander也并非需全部实现,仅需实现产品所必须的Event Hander即可。

提示:

关于Bluetooth LE API和Event API的使用方法,请参考SDK_Folder\documentation\GR533x_API_Reference以及SDK_Folder\projects\ble中的Bluetooth LE示例源代码。

BLE_Stack_IRQ、BLE_SDK_IRQ与Application的调度机制

Bluetooth LE Stack是低功耗蓝牙协议实现核心,可直接操作Bluetooth 5.3 Core硬件(参考软件架构)。因此,BLE_Stack_IRQ具有整个系统中次高的优先级(SVCall IRQ具有最高优先级),以保证Bluetooth LE Stack严格按照Bluetooth Core Spec规定的时序运行。

Bluetooth LE Stack的状态改变会触发优先级较低的BLE_SDK_IRQ中断。在该中断处理函数中,可通过调用Application实现的Bluetooth LE Event Handler,将Bluetooth LE Stack的状态变更通知以及相关的业务数据发送至Application。在这些Event Handler中,应避免操作耗时的业务,而应将耗时业务转移至Main Loop或用户级线程中处理。开发者可使用SDK_Folder\components\libraries\app_queue模块(或自定义的Application Framework)从Bluetooth LE Event Handler向Main Loop传递事件。

图 21 Non-OS system schedule

扫描关注

打开微信,使用“扫一扫”即可关注。