第一章 Silicon labs BLE 开发介绍

本文档详述了Silicon Labs BLE开发过程,包括应用开发流程、无线Gecko资源、蓝牙堆栈事件处理及中断管理。文档强调了在多协议环境中的配置、中断处理、内存和资源分配,以及如何使用gecko_wait_event和gecko_peek_event进行事件监听。同时,介绍了蓝牙协议栈的初始化、GATT数据库的创建以及如何在不同RTOS中使用蓝牙堆栈。
摘要由CSDN通过智能技术生成

Silicon labs BLE 开发人员指南

  • 介绍

该文档涵盖了各个方面的发展,并且是对使用C开发的所有运行Bluetooth堆栈的Wireless Gecko产品的所有人的重要参考。

该文档涵盖以下主题:

  • “ 应用程序开发流程”部分讨论了应用程序开发流程和项目结构。

  • 部分配置的蓝牙协议栈和无线设备壁虎解释该项目包括库和应用程序代码的实际无线壁虎配置。

  • 蓝牙堆栈事件处理是每个人与Silicon Labs的蓝牙协议栈开发的一个重要部分,因为它说明了在基于事件的架构堆栈的同步运行应用程序如何。

  • “ 中断无线Gecko资源 ”部分讨论了外设和芯片组资源的主题,涵盖了为堆栈使用保留的内容,应如何处理中断以及堆栈的内存占用空间和应用程序可用内存。

  • 应用开发流程

下图描述了高级固件结构。开发人员在堆栈的顶部创建一个应用程序,Silicon Labs将其作为预编译的目标文件提供给应用程序,从而为最终设备实现蓝牙连接。

                                                 

                                                                           蓝牙堆栈架构框图

蓝牙堆栈包含以下块。

  • 引导加载程序— Gecko引导加载程序不是堆栈的一部分,而是随蓝牙SDK一起提供的。有关更多信息,请参见UG266:Gecko引导程序用户指南和AN1086:将Gecko引导程序与Silicon Labs蓝牙应用程序配合使用。有关常规引导加载的信息,请参见UG103.06:引导加载基础。

  • 蓝牙堆栈-蓝牙功能,包括链接层,通用访问配置文件,安全管理器,属性协议和通用属性配置文件。

  • 蓝牙AppLoader-在引导程序之后启动的应用程序。它检查用户应用程序是否有效,如果有效,则AppLoader启动该应用程序。如果应用程序映像无效,则AppLoader将启动OTA进程以尝试接收有效的应用程序映像。这需要使用Gecko Bootloader。

  • 应用程序构建流程

 蓝牙项目构建流程

按照QSG139:Simplicity Studio中的蓝牙应用程序开发中的描述,通过定义蓝牙服务和特性(GATT定义)并编写来自Silicon Labs提供的示例的应用程序源代码或空的项目模板开始构建项目。SDK v2.1.0和更高版本提供了两种定义蓝牙服务和特性的方法。第一个选项是Simplicity Studio中的Visual GATT编辑器GUI。这是用于设计GATT并生成gatt_db.c和gatt_db.h的图形工具。此外,它可以导入.xml和.bgproj GATT定义文件。Visual GATT编辑器是Simplicity Studio项目中用于GATT定义和生成的默认工具。第二种选择是根据UG118:Blue GeckoBluetooth®Profile Toolkit开发人员指南创建.xml或.bgproj,然后将BGBuild可执行文件用作预编译步骤,以将GATT定义文件转换为.c和.h。此方法在IAR Embedded Workbench项目中使用。编译项目会生成一个目标文件,然后将其与SDK中提供的预编译库链接。链接的输出是一个闪存图像,可以对支持的Wireless Gecko设备进行编程。

  • 项目结构

本节说明了应用程序项目结构以及必须包含在项目中的必需和可选资源。

  • 蓝牙文件

库文件:

蓝牙堆栈库是:

  • binapploader.o:蓝牙AppLoader的二进制映像,提供了可选的OTA(无线)功能。

  • binapploader_nvm3.o:具有NVM3支持的Series 1的Bluetooth AppLoader的二进制映像。

  • libbluetooth.a:蓝牙堆栈库。

  • libmbedtls.a:蓝牙堆栈的mbed TLS加密库。

  • libpsstore.a:蓝牙堆栈的PS Store功能。这在EFR32BG2x器件上不可用。必须改用NVM3。

RAIL:

     蓝牙堆栈使用RAIL访问无线电,并且RAIL库需要与蓝牙堆栈链接。对于每个设备系列以及单协议和多协议环境,RAIL都有单独的库。Gecko SDK中提供了RAIL库。有关更多信息,请参考UG103.13:RAIL基础知识和其他RAIL文档。

注意:为了确保无线电模块符合法规要求,需要将无线电模块的蓝牙堆栈与无线电模块的RAIL库和配置库链接在一起。这些是librail_module__release.a和librail_conFIG。一个。

EMLIB和EMDRV:

蓝牙堆栈使用EMLIB和EMDRV库访问EFR32硬件。EMLIB和EMDRV外设库在源代码中提供,并且需要包含在项目中。EMLIB和EMDRV是Gecko SDK的一部分。有关EMLIB和EMDRV的更多详细信息,请参阅《 Gecko Bootloader API参考》中的\ platform \ bootloader \ documentation \ Gecko_Bootloader_API_Reference \ index.html,以及相应文件夹下的文档 \平台。

睡眠定时器

睡眠计时器是一个平台组件,提供单次计时器和定期计时器。蓝牙协议栈将其用于深度睡眠,并且必须包含在项目中。

头文件

bg_version.h

该文件包含蓝牙协议栈版本。

API头文件

这些文件定义了蓝牙协议栈API。对于不同的用例,有三个不同的文件。只能包含其中一个文件。native_gecko.h与裸机蓝牙应用程序一起使用。在构建支持NCP的SoC应用程序时使用ncp_gecko.h。rtos_gecko.h与Micrium RTOS一起使用。

这些文件用于两个目的:首先,它们包含实际的Bluetooth堆栈API以及该堆栈的命令和事件;其次,它们为Bluetooth堆栈提供配置,事件和睡眠管理API。

下面介绍了配置,事件和睡眠管理API。

errorcode_t gecko_init(const gecko_configuration_t*config)

该函数接受一个参数-指向gecko_configuration_t结构的指针。其目的是使用结构中提供的参数配置和初始化Bluetooth堆栈。gecko_init()在使用gecko_stack_init()进行的蓝牙配置一节中将详细讨论配置选项及其使用方法。gecko_init()必须由应用程序调用以初始化蓝牙堆栈。

提供此功能是为了方便。它将初始化蓝牙堆栈中的所有功能。要使配置更加详细,请按以下说明使用gecko_stack_init()。

errorcode_t gecko_stack_init(const gecko_configuration_t*config)

此函数接受一个参数-指向gecko_configuration_t结构的指针。其目的是使用结构中提供的参数配置和初始化Bluetooth堆栈。gecko_stack_init()调用函数后,必须分别初始化每个使用的堆栈组件。这种分离允许通过不包括那些不需要的堆栈组件来优化内存。

以下API可用于分别初始化堆栈组件:

gecko_bgapi_class_dfu_init();

gecko_bgapi_class_system_init();

gecko_bgapi_class_le_gap_init();

gecko_bgapi_class_le_connection_init();

gecko_bgapi_class_gatt_init();

gecko_bgapi_class_gatt_server_init();

gecko_bgapi_class_endpoint_init();

gecko_bgapi_class_hardware_init();

gecko_bgapi_class_flash_init();

gecko_bgapi_class_test_init();

gecko_bgapi_class_sm_init();

struct gecko_cmd_packet* gecko_wait_event(void)

    这是一个阻止功能,它等待来自蓝牙堆栈的事件并阻止,直到接收到事件为止。接收到事件后,将gecko_cmd_packet返回指向结构的指针。

    如果在蓝牙堆栈配置中启用了EM睡眠模式,则当未从蓝牙堆栈接收到任何事件时,设备将自动进入EM1或EM2模式。使用gecko_wait_event()是确保设备尽可能处于最低功耗睡眠模式的最简单方法。

蓝牙堆栈事件处理中将详细讨论蓝牙堆栈的事件处理

struct gecko_cmd_packet* gecko_peek_event(void)

    这是一种非阻塞功能,用于从蓝牙堆栈请求蓝牙事件。当请求事件且事件队列不为空时,将gecko_cmd_packet struct返回指向的指针。如果事件队列中没有事件,则返回NULL。

    使用此非阻塞事件侦听器时,必须由应用程序代码管理EM睡眠模式,因为它们不会由Bluetooth堆栈自动管理。睡眠模式管理通过gecko_can_sleep_ms()和gecko_sleep_for_ms()功能完成,稍后将进行讨论。

堆栈的事件处理将在蓝牙堆栈事件处理一节中详细讨论。

     int gecko_event_pending(void)

    此功能检查事件队列中是否有任何未解决的蓝牙堆栈事件。如果找到了未决的蓝牙事件,该函数将返回一个非零值,以指示该事件应由gecko_peek_event()或进行处理gecko_wait_event()。如果未找到事件,则返回零。

    uint32 gecko_can_sleep_ms(void)

    此功能用于确定蓝牙协议栈可以休眠多长时间。返回值是堆栈必须休眠的毫秒数,直到必须进行下一个蓝牙操作为止。如果无法休眠,则返回零。此功能仅与非阻塞gecko_peek_event()事件处理一起使用。

    uint32 gecko_sleep_for_ms(uint32 max)

    此函数用于将堆栈放入EM睡眠中的最大毫秒数(在函数的单个参数中设置)。返回值是实际睡眠的毫秒数。堆栈可能由于外部事件而唤醒。此功能仅与非阻塞gecko_peek_event()事件处理一起使用。

native_gecko.h

该文件用于没有RTOS的应用程序。它使用直接函数调用向蓝牙协议栈提供IPC(进程间通信)。

ncp_gecko.h

该文件将在为主机提供NCP功能的应用程序中使用。它使用NCP标头作为函数调用向蓝牙堆栈提供IPC。

host_gecko.h和gecko_bglib.h 这些文件在为外部主机开发应用程序时使用。host_gecko.h具有API定义,而gecko_bglib.h包含主机应用程序和BGAPI串行协议之间的适配层。

rtos_gecko.h

当为Micrium OS构建应用程序时,将使用rtos_gecko.h。蓝牙堆栈是Micrium OS的一项单独任务,并使用其电源,睡眠和内存管理。rtos_gecko.h为IPC提供了一个包装器,以使用Micrium OS中任何任务中的蓝牙堆栈。该文件包含蓝牙协议栈API,该协议栈的命令和事件以及蓝牙协议栈的配置API。

  • GATT数据库

    GATT(通用属性配置文件)数据库是描述蓝牙配置文件,服务和蓝牙设备特征的标准化方法。使用Silicon Labs蓝牙堆栈,可以在Simplicity Studio的Visual GATT编辑器GUI中直接编辑GATT定义,也可以用XML编写GATT定义,并将其作为预构建任务传递给BGBuild可执行文件。有关如何创建GATT数据库和语法的更多信息,请参阅UG118:Blue GeckoBluetooth®Smart Profile Toolkit开发人员指南。

gatt_db.c和gatt_db.h

所述gatt_db.c定义GATT数据库结构和内容,以及是自动生成由BGBuild.exe或由Visual GATT编辑器。gatt_db.h包含此数据库以及本地特征和服务的句柄。GATT的类型定义会自动从gatt_db_def.h包含到gatt_db.h中。

  • 设备固件升级

设备固件升级(DFU)是通过串行链接或无线(OTA)升级应用程序的过程。在这两种情况下,应用程序都需要添加以下文件来启用对DFU的支持。

application_properties.c

该文件包括应用程序属性结构,该结构包含有关应用程序映像的信息,例如类型,版本和安全性。该结构是在Gecko Bootloader API的application_properties.h中定义的(请参阅参考资料中的Gecko Bootloader API参考)。\ platform \ bootloader \ documentation \ Gecko_Bootloader_API_Reference \ index.html)。Simplicity Studio项目中包含一个预生成的文件,可以对其进行修改以包含特定于应用程序的属性。可以使用Gecko Bootloader API访问应用程序属性。可以通过更改定义来更新以下成员:

// Version number for this application (uint32_t)

#define BG_APP_PROPERTIES_VERSION

// Capabilities of this application (uint32_t)

#define BG_APP_PROPERTIES_CAPABILITIES

// Unique ID (e.g
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值