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 的具体步骤如下:
访问 https://sourceforge.net/projects/mingw-w64/,点击 Files。

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

将下载的压缩包 x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z 解压,右击 此电脑 → 属性 → 高级系统设置,然后参照下图添加环境变量。
a) 添加环境变量 MinGW_HOME 并将变量值设置为本地路径 D:\MinGW\mingw64:

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

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

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

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

在 user_code 文件夹中新建文件夹 inc 和 src,分别用来存放头文件和源文件。

应用程序实例说明
QuecOpen SDK 中提供应用程序实例,用户可参考 SDK 中 quectel_demo 目录下的示例进行应用程序的开发。
添加用户应用程序
创建应用代码
新建并编写文件 user_code.c 和 user_code.h,分别存放在 user_code/src 和 user_code/inc 目录下。
使用 VS Code 打开 QuecOpen SDK(File → Open Folder... → H01ZAARXXAXX_C_SDK)。

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

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

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

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

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

应用程序编译
编译方式
编译应用程序的方式有两种,用户可以根据实际需求在 命令行窗口编译 和 VS Code 编译 中选择。
命令行窗口编译
使用命令行窗口进行编译的步骤如下:
按下 WIN+R 键打开“运行”对话框并输入 cmd,点击 确定 打开 cmd.exe;
输入 cd + 路径,进入 makefile 文件所在的路径(H01ZAARXXAXX_C_SDK\quectel_demo\ql_ble_peripheral_demo\gcc);
输入 make 后按回车键即可开始编译。

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

VS Code 编译
使用 VS Code 进行编译的步骤如下:
- 使用 VS Code 在 Terminal 窗口点击 New Terminal;

- 在新终端中输入 cd + 路径,进入 makefile 文件所在的路径(H01ZAARXXAXX_C_SDK\quectel_demo\ql_ble_peripheral_demo\gcc);
- 输入 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 上运行此工具。具体步骤如下:
- 选择目标串口端口,波特率选择 115200;
- 点击 打开串口 按钮(点击后,该按钮变为 关闭串口)打开目标串口;
- 选择芯片型号 FR801XH;
- 点击 加载烧录文件,选择编译生成的 bin 文件;
- 点击 打开烧录,然后复位模块。如下图所示,在右侧窗口显示 已连接,则表示下载工具与模块连接成功;
- 点击 烧录,右侧窗口显示 开始烧录,并开始烧录固件。待显示 烧录成功,即表示固件烧录成功。

在 PC 端使用 FreqChip_Download 工具会将固件烧录到 Application A 分区。若固件需更新,也可在手机端通过 Fr8010 OTA 应用程序进行固件升级。若两种固件升级方式混合使用,则需要在 FreqChip_Download 工具中 选项 的下拉框中点击 擦除 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),以确保固件版本更新成功。

user_entry_before_ble_init
user_entry_before_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_after_sleep_imp
模块从睡眠模式中被唤醒后,可调用 user_entry_after_sleep_imp() 重新初始化相关外设。

内存分区定义

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

Flash 中各分区默认大小如下,其中 Application、OTA Backup 及 Reserve 分区的大小可随意调整。

附录 术语表
| 缩写 | 英文全称 | 中文全称 |
|---|---|---|
| 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 | 软件开发工具包 |