HCM111Z QuecOpen® 快速开发指导

简介

移远通信 HCM111Z 模块支持 QuecOpen® 方案。本文档适用于基于 SDK 构建环境的 QuecOpen® 方案,主要介绍 HCM111Z 模块的 SDK 目录结构、编译环境搭建、应用程序开发、编译流程、固件烧录、关键代码及内存分区定义。

SDK 目录结构

不同软件版本的 QuecOpen SDK 目录存在差异,但目录下存放的文件功能并无差异。以 Windows 操作系统下的目录为例,目录结构如下表所示:

目录名称 描述
components 存放基本功能代码
quectel_demo 存放各类功能测试的应用程序示例
tools 存放相关的软件工具

编译环境搭建

安装 MinGW-W64 GCC-8.1.0

下载并安装 MinGW-W64 GCC-8.1.0 的具体步骤如下:

  1. 访问 https://sourceforge.net/projects/mingw-w64/,点击 Files

    点击 Files

  2. 下拉界面并点击 x86_64-win32-sjlj,等待 5 秒后自动开始下载。

    开始下载 MinGW-W64 GCC-8.1.0

  3. 将下载的压缩包 x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z 解压,右击 此电脑属性高级系统设置,然后参照下图添加环境变量。

    a) 添加环境变量 MinGW_HOME 并将变量值设置为本地路径 D:\MinGW\mingw64

    添加环境变量 MinGW_HOME

    b) 添加环境变量 %MinGW_HOME%\bin

    添加环境变量 %MinGW_HOME%\\bin

安装 gcc-arm-none-eabi-10.3-2021.10

下载并安装 gcc-arm-none-eabi-10.3-2021.10 的具体步骤如下:

  1. 访问 https://developer.arm.com/downloads/-/gnu-rm,点击 gcc-arm-none-eabi-10.3-2021.10-win32.exe 下载并按照提示完成安装。

    点击 gcc-arm-none-eabi-10.3-2021.10-win32.exe

  2. 右击 此电脑属性高级系统设置,参照下图添加环境变量 C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin

    添加环境变量

应用程序开发

创建应用程序目录

  1. 在 QuecOpen SDK 的目录下创建所需的用户文件夹,比如创建存放源文件和头文件的文件夹。以创建 user_code 为例,如下所示。

    创建文件夹 user_code

  2. user_code 文件夹中新建文件夹 incsrc,分别用来存放头文件和源文件。

    新建文件夹 inc 和 src

应用程序实例说明

QuecOpen SDK 中提供应用程序实例,用户可参考 SDK 中 quectel_demo 目录下的示例进行应用程序的开发。

添加用户应用程序

创建应用代码

新建并编写文件 user_code.cuser_code.h,分别存放在 user_code/srcuser_code/inc 目录下。

  1. 使用 VS Code 打开 QuecOpen SDK(FileOpen Folder...H01ZAARXXAXX_C_SDK)。

    打开 QuecOpen SDK

  2. 右击 inc,点击 New File 新建 user_code.h 文件。

    新建 user_code.h 文件

  3. 右击 src,点击 New File 新建 user_code.c 文件。

    新建 user_code.c 文件

文件创建完成之后的页面如下图所示。

文件创建完成

添加编译文件

  1. 打开 quectel_demo\ql_ble_peripheral_demo\gcc 路径下的 makefile 文件,参照下图中的格式添加源文件。

    添加源文件

  2. 参照下图中的格式添加头文件的目录。

    添加头文件目录

应用程序编译

编译方式

编译应用程序的方式有两种,用户可以根据实际需求在 命令行窗口编译VS Code 编译 中选择。

命令行窗口编译

使用命令行窗口进行编译的步骤如下:

  1. 按下 WIN+R 键打开“运行”对话框并输入 cmd,点击 确定 打开 cmd.exe

  2. 输入 cd + 路径,进入 makefile 文件所在的路径(H01ZAARXXAXX_C_SDK\quectel_demo\ql_ble_peripheral_demo\gcc);

  3. 输入 make 后按回车键即可开始编译。

    使用命令行窗口编译

若成功生成 bin 文件,则表示编译成功,如下图所示:

编译成功

VS Code 编译

使用 VS Code 进行编译的步骤如下:

  1. 使用 VS Code 在 Terminal 窗口点击 New Terminal

使用 VS Code 编译

  1. 在新终端中输入 cd + 路径,进入 makefile 文件所在的路径(H01ZAARXXAXX_C_SDK\quectel_demo\ql_ble_peripheral_demo\gcc);
  2. 输入 make 后按回车键即可开始编译。

开始编译

编译结果

编译完成后会在 quectel_demo\ql_ble_peripheral_demo\gcc\build 目录下生成 bin 文件,如下图所示:

编译结果

固件烧录

在进行固件烧录前,模块需先通过 HCM111Z-TE-B 连接 PC,然后在 SDK 包 H01ZAARxxAxx_C_SDK\tools 路径下获取 FreqChip_Download 工具和 Fr8010 OTA 应用程序。有关 HCM111Z-TE-B 的使用详情,请参考 Quectel_HCM111Z-TE-B_User_Guide

模块可通过 FreqChip_Download 工具进行固件烧录,在 PC 上运行此工具。具体步骤如下:

  1. 选择目标串口端口,波特率选择 115200;
  2. 点击 打开串口 按钮(点击后,该按钮变为 关闭串口)打开目标串口;
  3. 选择芯片型号 FR801XH
  4. 点击 加载烧录文件,选择编译生成的 bin 文件;
  5. 点击 打开烧录,然后复位模块。如下图所示,在右侧窗口显示 已连接,则表示下载工具与模块连接成功;
  6. 点击 烧录,右侧窗口显示 开始烧录,并开始烧录固件。待显示 烧录成功,即表示固件烧录成功。

固件烧录

在 PC 端使用 FreqChip_Download 工具会将固件烧录到 Application A 分区。若固件需更新,也可在手机端通过 Fr8010 OTA 应用程序进行固件升级。若两种固件升级方式混合使用,则需要在 FreqChip_Download 工具中 选项 的下拉框中点击 擦除 OTA 区,防止固件烧录无效。

点击擦除 OTA 区

关键代码介绍

firmware_version

系统启动后,Bootloader 会根据固件中的 firmware_version 值自行决定运行 Application A 分区还是 Application B 分区,优先运行 firmware_version 值更高的分区。

在手机端使用 Fr8010 OTA 应用程序进行 OTA 升级时,Fr8010 OTA 会先获取当前运行分区的 firmware_version 值,并将该值加 1 后写入另外一个程序分区(即若当前运行的程序分区为 Application A,则将 firmware_version 值加 1 后写入 Application B),以确保固件版本更新成功。

firmware_version 说明

user_entry_before_ble_init

user_entry_before_ble_init() 为应用程序入口函数,并且在初始化蓝牙协议栈之前,用户可通过此接口初始化外设,但不可进行蓝牙相关操作。

user_entry_before_ble_init 说明

user_entry_after_ble_init

在初始化蓝牙协议栈之后,可调用 user_entry_after_ble_init() 初始化外设或进行蓝牙相关操作。

user_entry_after_ble_init 说明

user_entry_before_sleep_imp

模块进入睡眠模式前可调用 user_entry_before_sleep_imp() 保存应用参数、设置唤醒引脚等。在模块进入睡眠模式后,非 PMU 的外设会被去初始化。

user_entry_before_sleep_imp 说明

user_entry_after_sleep_imp

模块从睡眠模式中被唤醒后,可调用 user_entry_after_sleep_imp() 重新初始化相关外设。

user_entry_after_sleep_imp 说明

内存分区定义

内存分区

  • ROM: 只读存储器,用于存储启动代码、BLE controller 部分协议栈。
  • RAM: 随机存储器,用于存储各种变量、堆栈、重新映射后的中断向量地址、对运行速度较为敏感的代码(中断响应等)等,该空间支持低功耗的数据保持功能。
  • Peripheral: 外设地址空间,用于存储外设寄存器地址。外设地址空间是各种外设的地址映射,可进行外设的配置。
  • FLASH: Flash 空间,用于存储用户程序、升级备份区、用户数据及移远通信生产测试数据等。

其中用户数据及升级备份区的大小可在 demo 的 code/proj_main.c 中的 jump_table 中更改:

jump_table 设置

Flash 中各分区默认大小如下,其中 ApplicationOTA BackupReserve 分区的大小可随意调整。

Flash 各分区默认大小

附录 术语表

缩写 英文全称 中文全称
ADC Analog-to-Digital Converter 模数转换器
API Application Programming Interface 应用程序接口
APP Application 应用程序
BLE Bluetooth Low Energy 蓝牙低功耗
IoT Internet of Things 物联网
OTA Over-the-air programming 空中编程
PC Personal Computer 个人电脑
RAM Random Access Memory 随机存储器
ROM Read Only Memory 只读存储器
RTOS Real-Time Operating System 实时操作系统
SDK Software Development Kit 软件开发工具包