HCM010S&HCM511S系列 Open(SDK)快速开发指导

简介

移远通信 HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块支持 Open 开发方案,可简化 IoT 应用的软件设计和开发过程。有关所述 Open 开发方案的详细信息,请参考 https://github.com/SiliconLabs/gecko_sdk

本文档适用于 SDK 构建环境的 Open 方案,主要介绍 HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块的编译环境搭建、应用程序开发和编译流程、固件烧录、程序调试、OTA 升级和移远通信 MAC 地址使用等内容。

搭建编译环境

硬件环境

硬件名称 数量
HCM010S-TE-B 开发板、HCM010S-E-TE-B 开发板、HCM511S-E-TE-B 开发板或 HCM511S-TE-B 开发板 1
HCM010S、HCM010S-E、HCM511S 或 HCM511S-E 模块 1
J-Link 仿真器或 SI-DBG1015A Simplicity Link 调试器 1
USB 线(连接模块开发板与 PC) 1
转接线(用于 J-Link 仿真器或 SI-DBG1015A Simplicity Link 调试器连接至模块开发板) 1
PC 1
手机 1

备注:

  1. 本文档以 J-Link 仿真器为例,介绍模块的应用程序开发、固件烧录以及程序调试等内容。有关 J-Link 仿真器与开发板的连接步骤以及跳线帽配置 JTAG 接口的详情,请参考相关文档。
  2. 若使用 SI-DBG1015A Simplicity Link 调试器,请参考相关文档中模块与 SI-DBG1015A Simplicity Link 调试器的连接方法。

HCM010S-TE-B(左)和 HCM511S-TE-B(右)

J-Link 仿真器

SI-DBG1015A Simplicity Link 调试器

硬件连接

软件环境

类型 说明
工具 - EFR Connect APP
- Simplicity Studio 开发工具
SDK gecko_sdk-gsdk_4.2

备注:

  1. 有关 EFR Connect APP 的详情,请参考 https://www.silabs.com/documents/public/software/android-efr-connect.apk
  2. 有关 Simplicity Studio 的使用方法,请参考 https://docs.silabs.com/simplicity-studio-5-users-guide/5.9.1/ss-5-users-guide-getting-started
  3. 本文档以 gecko_sdk-gsdk_4.2 为例,用户可根据需求从 https://github.com/SiliconLabs/gecko_sdk 下载对应的 SDK 版本。
  4. 更多例程资源,详见 https://github.com/SiliconLabs

安装 Simplicity Studio

  1. https://www.silabs.com/developers/simplicity-studio 下载 Simplicity Studio 工具包。

    下载 Simplicity Studio 工具包

    下载的Simplicity Studio工具包如下图所示:
    工具包

  2. 解压 SimplicityStudio-5.iso 工具包后,双击工具包中 setup.exe 进行安装。

    安装 Simplicity Studio

  3. 安装开发包。

    • 打开 Simplicity Studio,等待 "Progress Information" 界面加载完毕。

    Progress Information 界面

    • 弹出 "Install Required Package(s)" 界面,点击 "Yes"。

    Install Required Package(s) 界面

    • 在 "Installation Manager" 界面,点击 "Update All" 开始安装。

    Installation Manager 界面

    安装界面如下图所示

    安装界面

    • 安装完成后,点击 "Restart" 重启工具。

    安装完成界面

    • Simplicity Studio工具重启后弹出如下“Installation Manager”界面,点击左下角的“Cancel”关闭该界面。

    关闭 Installation Manager 界面

更新 Simplicity Studio 软件包

  1. 在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击该 J-Link 仿真器,选择 "Device configuration"。

    选择 J-Link 仿真器

  2. 在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。

    配置 J-Link 仿真器

  3. 点击工具界面的 "Install",弹出 "Installation Manager" 界面,选择 "Install by connecting device(s)"。

    选择 Install by connecting device(s)

  4. 选择 J-Link 仿真器,点击 "Next"。

    选择 J-Link 仿真器

  5. 在 "Package Installation Options" 下方选择 "Auto",然后点击 "Next"。

    选择安装选项

  6. 勾选 "Accept all agreements" 和 "Accept this agreement",然后点击 "Next"。

    接受许可协议

    等待安装完成,完成后点击 "OK" 重启 Simplicity Studio。

    安装界面

  7. 安装完成后,弹出如下界面提示重启Simplicity Studio,点击“OK”进行重启。

    重启 Simplicity Studio

下载添加 SDK

  1. 执行 git clone https://github.com/SiliconLabs/gecko_sdk.git 下载 gecko_sdk-gsdk_4.2,下载后解压(解压后的路径不能包含中文字符)。

  2. 选中 Simplicity Studio 工具主界面左侧 "Debug Adapters" 区域的 J-Link 仿真器,工具右侧会显示设备信息,选择 "OVERVIEW",然后点击 "Manage SDKs" 进入 "SDKs" 页面。

    选中设备

  3. 点击 "Add SDK..." → 点击 "Browse..." → 选择 gecko_sdk-gsdk_4.2 → 点击 "选择文件夹" → 点击 "OK" → 点击 "Apply and Close"。

    添加 SDK

开发应用程序

HCM010S/HCM010S-E 应用程序开发示例

本章基于 HCM010S-TE-B 介绍应用程序 SoC Blinky、Sleeptimer Bare-metal 和 Soc Empty 的开发流程。

HCM010S 模块引脚号 HCM010S-E 模块引脚号 引脚名 芯片引脚名
- 1 GND GND
- 2 ANT_BT RF2G4
1 3 GND GND
2 4 USART_TXD PA05
3 5 USART_RXD PA06
4 6 SWDIO PA02
5 7 SWCLK PA01
6 8 GPIO4 PB01
7 9 GPIO5 PB00
8 10 GPIO1 PA00
9 11 GPIO6 PC02
10 12 GPIO7 PC01
11 13 GPIO8 PC00
12 14 GPIO9 PC03
13 15 GND GND
14 16 RESET_N RESET_N
15 - GPIO12 PD01
- 17 RESERVED PD01
16 18 VBAT VBAT
17 19 GND GND
18 20 GPIO13 PD04
19 21 GPIO14 PD03
20 22 GPIO15 PD02
21 23 GPIO10 PC04
22 24 GPIO11 PC05
23 - GPIO16 PD00
- 25 RESERVED PD00
24 26 GPIO2 PA03
25 27 GPIO3 PA04

备注: 有关引脚详细信息,请参考相关硬件设计手册。

Bluetooth - SoC Blinky

本章节以开发名为 "bt_soc_blinky_010s" 的 SoC Blinky 应用程序为例,详细介绍应用程序的开发流程。此应用程序通过蓝牙连接实现对 HCM010S-TE-B 上 LED1 灯亮灭的控制。

工程创建
  1. 在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击该 J-Link 仿真器,选择 "Device configuration..."。

  2. 在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。

  3. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Blinky" → 点击 "NEXT",进入 "Project Configuration" 界面。

    创建 Bluetooth-Soc Blinky 工程

  4. 在 "Project Configuration" 界面,设置工程名称为 "bt_soc_blinky_010s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

    设置 Soc Blinky 工程名称

    创建的bt_soc_blinky_010s工程如下图所示:

    bt_soc_blinky_010s 工程

    创建工程后,会弹出bt_soc_blinky_010s工程的readme文件,如下图所示:

    bt_soc_blinky_010s 工程的 readme 文件

  5. 创建 bootloader 工程。根据 readme 文件的内容,bt_soc_blinky_010s 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。
    bt_soc_blinky_010s 所需 Bootloader 类型

    1. 点击工具界面右上方的“Launcher”可切换至初始界面(点击“Simplicity IDE”则返回至开发环境)。

    1. 选中设备 -> 选择Gecko SDK Suite v4.2.3 -> 点击“Create New Project” -> 在“Example Project Selection”界面左侧“Filter on keywords”搜索框中输入“Bootloader”进行搜索 -> 在搜索结果中选择“Bootloader-Soc Bluetooth AppLoader OTA DFU” -> 点击“Next”。

    选择 Bootloader

    1. 在“Project Configuration”界面,设置工程名称为“bootloader-apploader_010s”(工程路径不可浏览,后续更改工程名称时,其路径会随着变化),选中“Link sdk and copy project sources”后,点击“FINISH”。

    设置 Bootloader 工程名称

    创建的bootloader-apploader_010s工程如下图所示,有关bootloader的详细信息,请参考https://www.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf

    bootloader-apploader_010s 工程

工程配置
  1. 查找并安装所需组件。

    • 在 bt_soc_blinky_010s 工程中找到 bt_soc_blinky_010s.slcp。双击该文件,进入 "bt_soc_blinky_010s" 页面。选择 "SOFTWARE COMPONENTS" 页签,在上方搜索框输入 "SWO" 进行搜索,在搜索结果中选中 "SWO Debug",点击 "Install" 安装 SWO Debug 组件。

    安装 SWO Debug 组件

  2. 对未配置的组件进行配置。

    1. 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入IO Stream: USART组件配置界面。
    • 搜索 "led" 并配置 Simple LED (led1) 组件,选择 PD02 作为 LED1。

    查找 IO Stream: USART 组件
    按照下图红框1配置IO Stream: USART组件,然后点击“</> View Source”。

    配置 IO Stream: USART 组件
    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息
    2) 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”(不同版本的SDK,LED名字可能不同,但功能相同),点击“Configure”进入配置Simple LED (led1)组件界面。
    查找 Simple LED (led1) 组件
    按照下图的红框1配置Simple LED (led1)组件,选择PD02作为LED1,然后点击“</> View Source”。

    配置 Simple LED (led1) 组件
    弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:
    Simple LED (led1) 组件配置信息

  3. HCM010S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0去除。具体如下:

    1. 双击bt_soc_blinky_010s.slcp,进入“bt_soc_blinky_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

    查找 btn0
    2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”,然后点击“Done”。

    删除 btn0

    1. 在bt_soc_blinky_010s工程中找到app.c文件并双击打开,删除文件中的update_report_button_characteristic()。

    删除按钮相关代码
    4) 删除如下图所示的app.c文件中的sl_button_on_change()。
    删除按钮相关代码
    5) 参照下图在app.c文件中Toggle LED的上方添加红框中的内容。
    添加代码
    6) 删除app.c文件中下图红框中所示内容。
    删除代码

    删除代码
    删除代码

  4. 其他配置。
    打开GATT配置文件gatt_configuration.btconf,可查看具体配置,也可根据实际需求进行修改:展开目标工程 -> 展开config -> 展开btconf -> 双击gatt_configuration.btconf。

    GATT 配置文件
    GATT 配置界面

程序释义

Platform - Sleeptimer Bare-metal

本章以裸机环境下的定时器应用开发为例,通过示例程序 "sleeptimer_baremetal_010s" 详解应用程序开发流程。该示例创建了两个周期性定时器和一个单次定时器:单次定时器和一个周期定时器用于控制两个 LED 灯的状态(亮/灭),另一个周期定时器则用于打印前两个定时器的剩余时间。相关日志信息可在串口工具的调试窗口中查看。

工程创建
  1. 参考前述步骤配置设备。

  2. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,在左侧 "Filter on keywords" 搜索框中输入 "timer" 进行搜索 → 选择 "Platform - Sleeptimer Bare-metal" → 点击 "NEXT",进入 "Project Configuration" 界面。

    创建 Sleeptimer Bare-metal 工程

  3. 在 "Project Configuration" 界面,设置工程名称为 "sleeptimer_baremetal_010s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。

    设置 Sleeptimer Bare-metal 工程名称

    创建的sleeptimer_baremetal_010s工程如下图所示。工程目录结构详细信息。
    sleeptimer_baremetal_010s 工程

工程配置
  1. 查找并安装所需组件。

    1. 在sleeptimer_baremetal_010s工程中找到sleeptimer_baremetal_010s.slcp。双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“usart”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

    安装 IO Stream: USART 组件

    1. 点击上图的“install”后弹出下图所示界面,在“INSTANCE NAME”下方文本框中将示例重命名为“vcom”,然后点击“Done”。

    重命名组件示例
    3) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。
    安装 SWO Debug 组件

  2. 对未配置的组件进行配置。

    1. 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入IO Stream: USART组件配置界面。

    查找 IO Stream: USART 组件

    按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。

    配置 IO Stream: USART 组件

    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息
    2) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led0”,点击“Configure”进入配置Simple LED (led0)组件界面。
    查找 Simple LED (led0) 组件
    按照下图的红框1配置Simple LED (led0)组件,选择PD02作为LED0,然后点击“</> View Source”:
    配置 Simple LED (led0) 组件
    会弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:
    Simple LED (led0) 组件配置信息
    3) 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。

  3. HCM010S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0和btn1去除。具体操作如下:
    按照下图的红框1配置Simple LED (led1)组件,选择PD03作为LED1,然后点击“</> View Source”。

    1. 双击sleeptimer_baremetal_010s.slcp,进入“sleeptimer_baremetal_010s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

    查找 btn0 和 btn1
    2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”和“btn1”,然后点击“Done”。

    删除 btn0 和 btn1
    3) 在sleeptimer_baremetal_010s工程中找到sleeptimer_app.c文件并双击打开,删除文件中的sl_button_on_change()。
    删除按钮相关代码
    4) 删除sleeptimer_app.c文件中下图红框中所示内容:
    删除代码
    删除代码

程序释义
  • 应用程序启动
  • 通过 app_init() 进行初始化
  • app_process_action() 被不断循环执行
  • sleeptimer_app_init() 执行 Log 打印等操作
  • sleepertimer_app_process_action() 每秒打印定时器的剩余时间

Bluetooth - Soc Empty

Soc Empty 是一款面向蓝牙应用开发的极简项目框架,专为自定义蓝牙应用程序提供标准化起点。相较前述提供完整功能的示例工程,Soc Empty 仅提供基础通信架构,可作为独立蓝牙应用的开发模板:设备启动后自动进入广播模式,并在断开连接后立即恢复广播,开发者需基于此框架自行添加相应的功能代码并集成所需组件。

本章以构建支持 GPIO 外设控制的蓝牙应用(项目命名 "bt_soc_empty_hcm010s_led")为例,介绍基于 Soc Empty 框架的应用程序开发流程。

外设示例可参考如下 git 代码资源:https://github.com/SiliconLabs/peripheral_examples/tree/master/series2

示例导入
  1. 复制外设 git 代码资源链接至浏览器中打开。
    浏览器中打开外设 git 代码资源链接
  2. 点击 "<> Code" → "Code" → "Download ZIP" 下载代码资源。
    下载代码资源
  3. 将下载的peripheral_examples-master.zip解压后,导入解压后的资源包中需参考的外 设示例。以导入GPIO外设示例为例,具体操作如下:
    1. 点击Simplicity Studio工具界面的“File” -> “Import…”,进入“Import Project”界面。
    导入工程
    2) 点击“Browse…”选择解压后的GPIO外设示例的路径,选中红框②工程,然后点击“Next>”。
    选择工程
    参照下图,继续点击“Next>”。
    继续下一步
    3) 参照下图设置工程名称,然后点击“Finish”完成示例导入。
    设置工程名称
    可参考所导入工程的源文件等内容配置用户自己的工程。
    导入的示例工程
工程创建
  1. 参考前述步骤配置设备。

  2. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth - Soc Empty" → 点击 "NEXT",进入 "Project Configuration" 界面。

    创建 Soc Empty 工程

  3. 在 "Project Configuration" 界面,设置工程名称为 "bt_soc_empty_hcm010s_led",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。
    设置 Soc Empty 工程名称
    创建的bt_soc_empty_hcm010s_led工程如下图所示。工程目录结构详细信息。
    bt_soc_empty_hcm010s_led 工程
    创建工程后,会弹出bt_soc_empty_hcm010s_led工程的readme文件,如下图所示:
    bt_soc_empty_hcm010s_led 工程的 readme 文件

  4. 创建 bootloader 工程。根据 readme 文件的内容,bt_soc_empty_hcm010s_led 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。如果已经创建了一个bootloader工程,则不需要再次创建。
    bt_soc_empty_hcm010s_led 所需 Bootloader 类型

工程配置
  1. 查找并安装所需组件。

    1. 在bt_soc_empty_hcm010s_led工程中找到bt_soc_empty_hcm010s_led.slcp。双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“delay”进行搜索,在搜索结果中选中“Microsecond Delay”,点击“Install”安装Microsecond Delay组件。

    安装 Microsecond Delay 组件
    2) 双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“ios”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。
    安装 IO Stream: USART 组件
    3) 点击上图的“Install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。
    重命名组件示例
    4) 双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“log”进行搜索,在搜索结果中选中“Log”,点击“Install”安装Log组件。
    安装 Log 组件

  2. 对未配置的组件进行配置。
    双击bt_soc_empty_hcm010s_led.slcp,进入“bt_soc_empty_hcm010s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。
    查找 IO Stream: USART 组件
    按照下图的红框1配置IO Stream: USART组件,然后点击“</> view source”。
    配置 IO Stream: USART 组件
    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息

  3. 在工程中找到main.c文件并双击打开,添加下图红框2和红框3中内容。
    在 main.c 中添加代码
    在main.c的while(1)部分添加如下内容:
    在 while(1) 部分添加代码

程序释义

HCM511S/HCM511S-E 应用程序开发示例

本章节基于 HCM511S-TE-B 介绍应用程序 SoC Blinky、Sleeptimer Bare-metal 和 Soc Empty 的开发流程。

HCM511S 模块引脚号 HCM511S-E 模块引脚号 引脚名 芯片引脚名
- 1 GND GND
- 2 ANT_BT RF2G4
1 3 GND GND
2 4 VBAT VBAT
3 5 SWCLK PA01
4 6 SWDIO PA02
5 7 RESET_N RESET_N
6 8 GPIO2 PA03
7 9 GPIO3 PA04
8 10 GND GND
9 11 GND GND
10 12 GPIO1 PA00
11 13 GPIO6 PB00
12 14 GPIO7 PB01
13 15 GPIO8 PB02
14 16 GPIO14 PD01
15 17 GPIO13 PD00
16 18 GPIO9 PC02
17 19 GPIO10 PC03
18 20 GPIO11 PC04
19 21 GPIO12 PC05
20 22 GPIO4 PA05
21 23 GPIO5 PA06
22 24 USART_TXD PC00
23 25 USART_RXD PC01
24 26 RESERVED RESERVED

备注: 有关引脚详细信息,请参考相关硬件设计手册。

Bluetooth - SoC Blinky

本章节以开发名为 "bt_soc_blinky_511s" 的 SoC Blinky 应用程序为例,详细介绍应用程序的开发流程。此应用程序通过蓝牙连接实现对 HCM511S-TE-B 上 LED 灯亮灭的控制。需注意,HCM511S-TE-B 并无 LED 灯亮灭状态提示,是通过 LED 灯对应 GPIO 引脚的电平来体现的:低电平表示 LED 灯灭,高电平表示 LED 灯亮。

工程创建
  1. 在 Simplicity Studio 工具主界面的 "Debug Adapters" 区域找到当前使用的 J-Link 仿真器,右键单击 J-Link 仿真器,选择 "Device configuration"。
    选择 J-Link 仿真器

  2. 在弹出的配置界面的 "Target part" 文本框中,输入并选择模块对应的芯片型号,然后点击 "OK"。
    配置 J-Link 仿真器

  3. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Blinky" → 点击 "NEXT",进入 "Project Configuration" 界面。
    创建 Bluetooth-Soc Blinky 工程

  4. 在 "Project Configuration" 界面,设置工程名称为 "bt_soc_blinky_511s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。
    设置 Soc Blinky 工程名称和路径
    创建的bt_soc_blinky_511s工程如下图所示。工程目录结构详细信息。
    bt_soc_blinky_511s 工程
    创建工程后,会弹出bt_soc_blinky_511s工程的readme文件,如下图所示:
    bt_soc_blinky_511s 工程的 readme 文件

  5. 创建 bootloader 工程。根据 readme 文件的内容,bt_soc_blinky_511s 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。
    bt_soc_blinky_511s 所需 Bootloader 类型

    1. 点击工具界面右上方的“Launcher”可以切换至初始界面(点击“Simplicity IDE”则返回至开发环境)。

    1. 选中设备 -> 选择Gecko SDK Suite v4.2.3 -> 点击“Create New Project” -> 在“Example Project Selection”界面左侧“Filter on keywords”搜索框中输入“Bootloader”进行搜索 -> 选择“Bootloader-Soc Bluetooth AppLoader OTA DFU” -> 点击“Next”。

    选择 Bootloader
    3) 在“Project Configuration”界面,设置工程名称为“bootloader-apploader_511s”(工程路径不可浏览,后续更改工程名称时,其路径会随着变化),选中“Link sdk and copy project sources”后,点击“FINISH”。
    设置 Bootloader 工程名称和路径
    创建的bootloader-apploader_511s工程如下图所示:
    bootloader-apploader_511s 工程

工程配置
  1. 查找并安装所需组件。
    在bt_soc_blinky_511s工程中找到bt_soc_blinky_511s.slcp。双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。
    安装 SWO Debug 组件

  2. 对未配置的组件进行配置。

    1. 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

    查找 IO Stream: USART 组件
    按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。
    配置 IO Stream: USART 组件
    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息
    2) 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。
    查找 Simple LED (led1) 组件
    按照下图的红框1配置Simple LED (led1)组件,LED1引脚可配置成任一未使用的GPIO引脚,以PB00为例。然后点击“</> View Source”。
    配置 Simple LED (led1) 组件
    会弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED (led1)组件后会生成下图红框内容:
    Simple LED (led1) 组件配置信息

  3. HCM511S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0去除。具体如下:

    1. 双击bt_soc_blinky_511s.slcp,进入“bt_soc_blinky_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

    查找 btn0
    2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”,然后点击“Done”。
    删除 btn0
    3) 在bt_soc_blinky_511s工程中找到app.c文件并双击打开,删除文件中的update_report_button_characteristic()。
    删除按钮相关代码
    4) 删除如下图所示的app.c文件中的sl_button_on_change()。
    删除按钮相关代码
    5) 参照下图在app.c文件中Toggle LED的上方添加红框中的内容。
    添加代码
    6) 删除app.c文件中下图红框中所示内容。
    删除代码
    删除代码
    删除代码

  4. 其他配置。
    打开GATT配置文件gatt_configuration.btconf,可查看具体配置,也可根据实际需求进行修改:展开目标工程 -> 展开config -> 展开btconf -> 双击gatt_configuration.btconf。
    GATT 配置文件
    GATT 配置界面

程序释义

GATT 配置文件
GATT 配置界面

Platform - Sleeptimer Bare-metal

本章以裸机环境下的定时器应用开发为例,通过示例程序 "sleeptimer_baremetal_511s" 详解应用程序开发流程。该示例创建了两个周期性定时器和一个单次定时器:单次定时器和一个周期定时器用于控制两个 LED 灯的状态(亮/灭),另一个周期定时器则用于打印前两个定时器的剩余时间。相关日志信息可在串口工具的调试窗口中查看。

需注意,HCM511S-TE-B 并无 LED 灯亮灭状态提示,是通过 LED 灯对应 GPIO 引脚的电平来体现的:低电平表示 LED 灯灭,高电平表示 LED 灯亮。

工程创建
  1. 参考前述步骤配置设备。
  2. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,在左侧 "Filter on keywords" 搜索框中输入 "timer" 进行搜索 → 选择 "Platform - Sleeptimer Bare-metal" → 点击 "NEXT",进入 "Project Configuration" 界面。
    创建 Sleeptimer Bare-metal 工程
  3. 在 "Project Configuration" 界面,设置工程名称为 "sleeptimer_baremetal_511s",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。
    设置 Sleeptimer Bare-metal 工程名称
    创建的sleeptimer_baremetal_511s工程如下图所示。工程目录结构详细信息。
    sleeptimer_baremetal_511s 工程
工程配置
  1. 查找并安装所需组件。

    1. 在sleeptimer_baremetal_511s工程中找到sleeptimer_baremetal_511s.slcp。双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。

    安装 IO Stream: USART 组件
    2) 点击上图的“install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。
    重命名组件示例
    3) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“SWO”进行搜索,在搜索结果中选中“SWO Debug”,点击“Install”安装SWO Debug组件。
    安装 SWO Debug 组件

  2. 对未配置的组件进行配置。

    1. 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。

    查找 IO Stream: USART 组件
    按照下图的红框1配置IO Stream: USART组件,然后点击“</> View Source”。
    配置 IO Stream: USART 组件
    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息
    2) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led0”,点击“Configure”进入配置Simple LED (led0)组件界面。
    查找 Simple LED (led0) 组件
    按照下图的红框1配置Simple LED (led0)组件,LED0引脚可配置成任一未使用的GPIO引脚,以PB00为例。然后点击“</> View Source”。
    配置 Simple LED (led0) 组件
    会弹出如下图所示的sl_simple_led_led0_config.h文件,配置Simple LED (led0)组件后会生成下图红框内容:
    Simple LED (led0) 组件配置信息
    3) 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“led”进行搜索,在搜索结果中选中“led1”,点击“Configure”进入配置Simple LED (led1)组件界面。
    查找 Simple LED (led1) 组件
    按照下图的红框1配置Simple LED (led1)组件,LED1引脚可配置成任一未使用的GPIO引脚,以PB01为例。然后点击“</> View Source”。
    配置 Simple LED (led1) 组件
    弹出如下图所示的sl_simple_led_led1_config.h文件,配置Simple LED(led1)组件后会生成下图红框内容:
    Simple LED (led1) 组件配置信息

  3. HCM511S-TE-B上只有一个复位按钮,没有其他按钮,需将btn0和btn1去除。具体操作如下:
    Simple LED (led1) 组件配置信息

    1. 双击sleeptimer_baremetal_511s.slcp,进入“sleeptimer_baremetal_511s”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“button”进行搜索,在搜索结果中选中“Simple Button”,点击“Uninstall”。

    查找 btn0 和 btn1
    2) 点击上图的“Uninstall”后,弹出下图所示界面,选中“btn0”和“btn1”,然后点击“Done”。
    删除 btn0 和 btn1
    3) 在sleeptimer_baremetal_511s工程中找到sleeptimer_app.c文件并双击打开,删除文件中的sl_button_on_change()。
    删除按钮相关代码
    4) 删除sleeptimer_app.c文件中下图红框中所示内容:
    删除代码
    删除代码

程序释义
  • 应用程序启动
  • 通过 app_init() 进行初始化
  • app_process_action() 被不断循环执行
  • sleeptimer_app_init() 执行 Log 打印等操作
  • sleepertimer_app_process_action() 每秒打印定时器的剩余时间

Bluetooth - Soc Empty

Soc Empty 是一款面向蓝牙应用开发的极简项目框架,专为自定义蓝牙应用程序提供标准化起点。相较前述提供完整功能的示例工程,Soc Empty 仅提供基础通信架构,可作为独立蓝牙应用的开发模板:设备启动后自动进入广播模式,并在断开连接后立即恢复广播,开发者需基于此框架自行添加相应的功能代码并集成所需组件。

本章以构建支持 GPIO 外设控制的蓝牙应用(项目命名 "bt_soc_empty_hcm511s_led")为例,介绍基于 Soc Empty 框架的应用程序开发流程。

外设示例可参考如下 git 代码资源:https://github.com/SiliconLabs/peripheral_examples/tree/master/series2

示例导入

示例导入步骤参考前述章节,用户可参考所导入的工程的源文件等内容配置用户自己的工程。

工程创建
  1. 参考前述步骤配置设备。

  2. 在 Simplicity Studio 工具界面选中设备 → 选择 Gecko SDK Suite v4.2.3 → 点击 "Create New Project" → 在弹出的 "New Project Wizard" 中,按照提示操作进入 "Example Project Selection" 界面,勾选左下角的 "Bluetooth" → 选择 "Bluetooth-Soc Empty" → 点击 "NEXT",进入 "Project Configuration" 界面。
    创建 Soc Empty 工程

  3. 在 "Project Configuration" 界面,设置工程名称为 "bt_soc_empty_hcm511s_led",选中 "Link sdk and copy project sources" 后,点击 "FINISH"。
    设置 Soc Empty 工程名称
    创建的bt_soc_empty_hcm511s_led工程如下图所示。工程目录结构详细信息。
    bt_soc_empty_hcm511s_led 工程
    创建工程后,会弹出bt_soc_empty_hcm511s_led工程的readme文件,如下图所示:
    bt_soc_empty_hcm511s_led 工程的 readme 文件

  4. 创建 bootloader 工程。根据 readme 文件的内容,bt_soc_empty_hcm511s_led 工程需要一个 bootloader。所需的 bootloader 类型为 Bluetooth Apploader OTA DFU type bootloader。
    bt_soc_empty_hcm511s_led 所需 Bootloader 类型

工程配置
  1. 查找并安装所需组件。
    1. 在bt_soc_empty_hcm511s_led工程中找到bt_soc_empty_hcm511s_led.slcp。双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“delay”进行搜索,在搜索结果中选中“Microsecond Delay”,点击“Install”安装Microsecond Delay组件。
    安装 Microsecond Delay 组件
    2) 双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Install”安装IO Stream: USART组件。
    安装 IO Stream: USART 组件
    3) 点击上图的“Install”后弹出下图所示界面,在“INSTANCE NAME”下方将示例重命名为“vcom”,然后点击“Done”。
    重命名组件示例
    4) 双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“log”进行搜索,在搜索结果中选中“Log”,点击“Install”安装Log组件。
    安装 Log 组件
  2. 对未配置的组件进行配置。
    双击bt_soc_empty_hcm511s_led.slcp,进入“bt_soc_empty_hcm511s_led”页面。选择“SOFTWARE COMPONENTS”页签,在上方搜索框输入“io stream”进行搜索,在搜索结果中选中“IO Stream: USART”,点击“Configure”进入配置IO Stream: USART组件界面。
    查找 IO Stream: USART 组件
    按照下图的红框1配置IO Stream: USART组件,然后点击“</> view source”。
    配置 IO Stream: USART 组件
    弹出如下图所示的sl_iostream_usart_vcom_config.h文件,配置IO Stream: USART组件后会生成下图红框内容:
    IO Stream: USART 组件配置信息
  3. main.c 文件中添加相应代码。
    在 main.c 中添加代码
    在main.c的while(1)部分添加如下内容:
    在 while(1) 部分添加代码
程序释义

编译应用程序

HCM010S、HCM010S-E、HCM511S 和 HCM511S-E 模块的应用程序示例的编译步骤一致,本章节以 bt_soc_blinky_010s 工程为例展示编译步骤和编译结果。

编译说明

在 Simplicity Studio 工具界面选中目标工程,右键单击该工程并选择 "build project" 进行编译。

编译 bt_soc_blinky_010s 工程

编译成功的界面如下图所示:
编译成功界面

编译结果

编译过程中,将在 SimplicityStudio/v5_workspace/<project_name>/GNU ARM v10.3.1 -- Default(工程创建时所设置的工程路径)生成工程 .hex 文件,如下图所示。

编译结果

烧录固件

本章节主要介绍如何烧录固件。烧录固件前,请检查 J-Link 仿真器接线是否准确,若接线无误,请先按下开发板上的复位按钮,然后再进行固件烧录。

对于 HCM010S 和 HCM010S-E 模块,在烧录前请参考前述章节配置 J-Link 仿真器;对于 HCM511S 和 HCM511S-E 模块,在烧录前请参考前述章节配置 J-Link 仿真器。

HCM010S/HCM010S-E 固件烧录

bt_soc_blinky_010s

根据 bt_soc_blinky_010s 的 readme 文件,在烧录 bt_soc_blinky_010s 的固件(.hex 文件)前,需要一个 bootloader,因此需先烧录编译 bootloader 工程(bootloader-apploader_010s)生成的固件,再烧录 bt_soc_blinky_010s 工程的固件。

  1. 点击 Simplicity Studio 工具界面 "Flash Programmer" 图标,打开 Flash Programmer 工具。
    打开 Flash Programmer 工具
  2. 烧录固件(.hex 文件)前,先进行擦除操作。
    • 打开 Flash Programmer 工具,点击工具界面的 "Advanced Settings...",在 "Advanced Settings" 弹窗中选择 "Full Erase",点击 "OK",然后点击工具界面的 "Erase" 按钮。
    擦除操作
    • 将擦除选项修改为 "Page Erase",点击 "OK"。
    修改擦除选项
  3. 点击 "Browse..." 按钮,在弹出的 "Select File" 页面选择 bootloader 工程(bootloader-apploader_010s)的固件(.hex 文件),点击 "打开",然后点击工具界面的 "Program" 即可烧录 bootloader 工程固件。
    烧录 Bootloader 工程固件
  4. 点击 "Browse..." 选择 bt_soc_blinky_010s 工程的 .hex 文件,然后点击工具界面的 "Program" 即可烧录 bt_soc_blinky_010s 工程固件。
    烧录 bt_soc_blinky_010s 工程固件

sleeptimer_baremetal_010s

  1. 参考前述步骤打开 Flash Programmer 工具。
  2. 参考前述步骤进行擦除操作。
  3. 参考前述步骤烧录 sleeptimer_baremetal_010s 工程的固件。

bt_soc_empty_hcm010s_led

  1. 参考前述步骤打开 Flash Programmer 工具。
  2. 参考前述步骤进行擦除操作。
  3. 参考前述步骤烧录 bootloader-apploader_010s 工程的固件。
  4. 参考前述步骤烧录 bt_soc_empty_hcm010s_led 的固件。

HCM511S/HCM511S-E 固件烧录

bt_soc_blinky_511s

  1. 参考前述步骤打开 Flash Programmer 工具。
  2. 参考前述步骤进行擦除操作。
  3. 参考前述步骤烧录 bootloader-apploader_511s 工程的固件。
  4. 参考前述步骤烧录 bt_soc_blinky_511s 的固件。

sleeptimer_baremetal_511s

  1. 参考前述步骤打开 Flash Programmer 工具。
  2. 参考前述步骤进行擦除操作。
  3. 参考前述步骤烧录 sleeptimer_baremetal_511s 工程的固件。

bt_soc_empty_hcm511s_led

  1. 参考前述步骤打开 Flash Programmer 工具。
  2. 参考前述步骤进行擦除操作。
  3. 参考前述步骤烧录 bootloader-apploader_511s 工程的固件。
  4. 参考前述步骤烧录 bt_soc_empty_hcm511s_led 的固件。

调试程序

HCM010S/HCM010S-E 调试程序

SoC Blinky

  1. 打开手机 EFR Connect APP 开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。
    连接 Blinky Example
  2. 连接后,先点击 "Notify" 图标使能通知功能,再点击 "Write" 图标发送数据。
    使能通知功能
  3. 输入 hex 数据 0x01,选择 "Write with response (write request)",然后点击 "SEND" 发送该数据。此时可发现开发板上 LED1 灯(PD02)亮。
    发送数据
    手机端APP收到通知数据如下图所示:
    收到通知数据
    若发送数据 0x00,则 LED1 灯(PD02)灭。
  4. 在串口工具的调试窗口中可查看 Log。
    串口 Log

Sleeptimer Bare-metal

设置三个计时器:1 个单次定时器和 2 个周期定时器。开发板复位后,单次定时器 10 秒后切换一次 LED1(PD03)的状态(亮/灭)。一个周期定时器每 10 秒切换一次 LED0(PD02)的状态(亮/灭),另一个周期定时器实现每 1 秒打印上述两个定时器的剩余时间。可通过串口调试窗口查看 Log。

Sleeptimer Bare-metal Log

Soc Empty

复位开发板,串口调试工具输出相应 Log,开发板上的 3 个 LED 灯(PD02、PD03 和 PD04)将依次点亮,随后同步熄灭并循环此流程。

Soc Empty Log

HCM511S/HCM511S-E 调试程序

SoC Blinky

  1. 打开手机 EFR Connect APP 开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。
    连接 Blinky Example

  2. 连接后,先点击 "Notify" 图标使能通知功能,再点击 "Write" 图标发送数据。
    使能通知功能

  3. 输入数据 0x01,选择 "Write with response (write request)",然后点击 "SEND" 发送该数据。此时 LED0 亮,表现为开发板上 PB00 为高电平。
    发送数据
    手机端APP收到通知数据如下图所示:
    收到通知数据
    若发送数据0x00,则LED0灭,表现为开发板上PB00为低电平。
    在串口工具的调试窗口中可收到下图所示Log:
    串口 Log

    用逻辑分析仪测量到的LED0对应的电平变化如下:
    电平变化

Sleeptimer Bare-metal

设置三个计时器:1 个单次定时器和 2 个周期定时器。开发板复位后,单次定时器在 10 秒后切换一次 LED1 的状态为亮/灭,即在 10 秒后切换一次 PB01 的电平值。一个周期定时器每 10 秒切换一次 LED0 的状态为亮/灭,即每 10 秒切换一次 PB00 的电平值。另一个周期定时器实现每 1 秒打印上述两个定时器的剩余时间。可通过串口调试窗口查看 Log。

Sleeptimer Bare-metal Log
用逻辑分析仪测量到的LED0和LED1对应的电平变化如下:

电平变化

Soc Empty

复位开发板,串口调试工具输出相应 Log。LED0 亮 0.5 秒后再灭 0.5 秒,表现为开发板上的 PB00 保持 0.5 秒的高电平后再设置 0.5 秒的低电平,循环此过程。

Soc Empty Log

用逻辑分析仪测量到的LED0对应的电平变化如下:
电平变化

OTA 和移远通信 MAC 地址

OTA

OTA 服务

在使用 Simplicity Studio 创建蓝牙项目时一般会自动添加 OTA 服务,用户可在 config//btconf//gatt_configuration.btconf 文件中查看相关 OTA 服务,如下图所示。

OTA 服务

通过 OTA 服务进入 Bluetooth Apploader OTA DFU type bootloader 中进行 OTA 升级,以 HCM010S 模块为例,升级流程如下图所示:

OTA 升级流程

OTA 升级

本章以 SoC Blinky 工程为例,介绍 OTA 升级的步骤。

  1. 烧录SoC Blinky工程的固件和bootloader工程的固件

  2. 右击“此电脑”->“属性”->“高级系统设置”-> “环境变量(N)…”-> “新建(N)…”,然后参照下图添加环境变量。
    新建用户变量PATH_GCCARM并将变量值设置为本地路径C:/SiliconLabs/SimplicityStudio/v5/developer/toolchains/gnu_arm/10.3_2021.10:
    新建变量 PATH_GCCARM
    新建用户变量PATH_SCMD并将变量值设置为本地路径C:/SiliconLabs/SimplicityStudio/v5/developer/adapter_packs/commander:
    新建变量 PATH_SCMD

  3. 在 SoC Blinky 工程所在的路径下,双击 create_bl_files.bat 文件后,自动生成 output_gbl 文件夹,拷贝其中的 application.gbl 文件至手机目标文件夹。
    生成 GBL 文件
    拷贝 GBL 文件

  4. 打开手机 EFR Connect APP,开启扫描,待扫描到 Blinky Example 后,点击 "CONNECT" 进行连接。然后点击 "OTA Firmware" 进行 OTA 升级。在弹出的 "OTA Device Firmware Update" 界面的 "Application" 文本框中选择 "application.gbl",最后点击 "Upload"。
    OTA 升级
    OTA 升级
    OTA 升级
    OTA 升级

  5. 如果出现异常情况导致升级中断,可在扫描界面选择名为 "OTA" 的设备,再点击 "CONNECT" 进行重新升级。
    重新升级

移远通信 MAC 地址

模块默认使用芯片厂商的 MAC 地址,用户也可以选择使用移远通信的 MAC 地址。移远通信的 MAC 地址信息存放在芯片内置 Flash 的 FLASH_USERDATA 区域,如下图所示。

MAC 地址信息

执行如下步骤使用移远通信 MAC 地址。

  1. 在用户创建的工程的 app.c 文件中添加如下代码。
typedef struct tag_quec_mac_info{
  uint8_t mac_flag[2];
  bd_addr mac;
}QUEC_MAC_INFO_T;

void flash_param_read(uint8_t *buffer , uint32_t len)
{
  memcpy(buffer,(void *)(USERDATA_BASE) , len);
}

int quec_get_mac(bd_addr *addr)
{
    QUEC_MAC_INFO_T _mac_info;
    flash_param_read((uint8_t *)&_mac_info,sizeof(QUEC_MAC_INFO_T));

    if(_mac_info.mac_flag[0] != 0xAA || _mac_info.mac_flag[1] != 0xAA)
      return -1;

    addr->addr[0] = _mac_info.mac.addr[5];
    addr->addr[1] = _mac_info.mac.addr[4];
    addr->addr[2] = _mac_info.mac.addr[3];
    addr->addr[3] = _mac_info.mac.addr[2];
    addr->addr[4] = _mac_info.mac.addr[1];
    addr->addr[5] = _mac_info.mac.addr[0];

    return 0;
}
  1. app.c 文件的 sl_bt_on_event() 里的 sl_bt_evt_system_boot_id 事件中添加如下代码。
case sl_bt_evt_system_boot_id:
{
      ......
      uint8_t type = 0;
      bd_addr get_addr;
      if(!quec_get_mac(&get_addr))
      {
          // Using Quectel MAC address
          sl_bt_system_set_identity_address(get_addr,0);//0 mean public address
      }
      else
      {
          // Using Default Silicon labs Mac address
          sl_bt_system_get_identity_address(&get_addr,&type);
      }
      sl_bt_system_get_identity_address(&get_addr,&type);
      ......
}break;

  1. 将 bootloader 工程里 ./config/btl_apploader_config.h 文件里的宏 BTL_APPLOADER_USE_CUSTOM_ADDRESS 由 0 修改为 1。
    修改宏
  2. 在bootloader工程中修改./gecko_sdk_4.2.3/platform/bootloader/communication/ apploader/btl_apploader_common.c文件中的bootloader_apploader_get_custom_device_address(),具体修改如下所示。
#define MFG_CUSTOM_EUI_64_OFFSET 0x0000
SL_WEAK void bootloader_apploader_get_custom_device_address(sl_apploader_address_t *btAddress)
{
  uint8_t *mfgToken = (uint8_t*)USERDATA_BASE + MFG_CUSTOM_EUI_64_OFFSET;
  uint8_t mfgAddressType = 0;
  uint8_t *mac_flag = &mfgToken[0];
  uint8_t *mfgAddress = &mfgToken[2];
  uint8_t mfgAddressLen = sizeof(btAddress->address);

  if(mac_flag[0] == 0xAA && mac_flag[1] == 0xAA)
  {
      //Adjust token byte Endianness
      for (uint8_t i = 0; i < mfgAddressLen; i++) {
        btAddress->address[i] = mfgAddress[(mfgAddressLen - 1) - i];
      }
  }

  if (mfgAddressType == 0) {
    btAddress->type = sl_apploader_address_type_public;
  } else if (mfgAddressType == 1) {
    btAddress->type = sl_apploader_address_type_random;
  } else {
    // if invalid address type assume public
    btAddress->type = sl_apploader_address_type_public;
  }
} 

附录 参考文档及术语缩写

参考文档

文档名称
1. Quectel_HCM010S-TE-B_User_Guide
2. Quectel_HCM511S-TE-B_User_Guide
3. Quectel_HCM010S-E-TE-B_User_Guide
4. Quectel_HCM511S-E-TE-B_User_Guide
5. Quectel_HCM010S_硬件设计手册
6. Quectel_HCM010S-E_硬件设计手册
7. Quectel_HCM511S_硬件设计手册
8. Quectel_HCM511S-E_硬件设计手册

术语缩写

缩写 英文全称 中文全称
APP Application 应用程序
DFU Device Firmware Update 设备固件升级
GATT Generic Attribute Profile 通用属性协议
GND Ground
GPIO General-Purpose Input/Output 通用型输入/输出
IDE Integrated Development Environment 集成开发环境
LED Light Emitting Diode 发光二极管
MAC Medium Access Control 媒体访问控制
OTA Over-the-air programming 空中编程
PC Personal Computer 个人电脑
RTOS Real-Time Operating System 实时操作系统
SDK Software Development Kit 软件开发工具包
USART Universal Synchronous/Asynchronous Receiver/Transmitter 通用同步/异步串行接收/发送器
USB Universal Serial Bus 通用串行总线