通用API开发指南

引言

移远通信FC41D模块、FCM100D模块、FCM740D模块和FLMx40D模块支持QuecOpen®方案;QuecOpen®是基于RTOS开发环境的嵌入式开发平台,可简化IoT应用的软件设计和开发过程。有关QuecOpen®的详细信息,请参考 快速入门指南

本文适用于SDK构建环境的QuecOpen®方案。本文档主要介绍在QuecOpen®方案下,移远通信FC41D模块、FCM100D模块、FCM740D模块和FLMx40D模块的Flash、SPI Flash、定时器、看门狗和低功耗模式功能相关的API及其开发流程,以及OTA功能相关的API和OTA升级流程。

适用模块

适用模块:

模块系列 模块
FC41D
FCM100D
FCM740D
FLMx40D FLM040D
FLM140D
FLM240D
FLM340D

Flash

头文件

Flash API的头文件为ql_flash.h,位于SDK包的ql_components/qadpt/include/目录下。若无特别说明,本文档所涉及头文件均在该目录下。

Flash API

ql_flash_set_security

该函数用于设置Flash的保护类型。向Flash写入数据或擦除Flash中的数据之前需取消Flash保护。

函数原型

ql_errcode_flash_e ql_flash_set_security(ql_flash_protect_type_e type)

参数

type

[In] 保护类型;详见ql_flash_protect_type_e

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_flash_protect_type_e

Flash保护类型枚举定义如下:

typedef enum
{
    QL_FLASH_PROTECT_NONE = 0,
    QL_FLASH_PROTECT_ALL,
    QL_FLASH_PROTECT_HALF,
    QL_FLASH_UNPROTECT_LAST_BLOCK,
} ql_flash_protect_type_e

成员

成员 描述
QL_FLASH_PROTECT_NONE 无保护
QL_FLASH_PROTECT_ALL 保护整个Flash
QL_FLASH_PROTECT_HALF 保护Flash的一半分区
QL_FLASH_UNPROTECT_LAST_BLOCK 不保护Flash的最后一个分区
ql_errcode_flash_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_FLASH_SUCCESS = 0,
    QL_FLASH_EXECUTE_ERR,
    QL_FLASH_PARAM_ERROR,
} ql_errcode_flash_e

成员

成员 描述
QL_FLASH_SUCCESS 函数执行成功
QL_FLASH_EXECUTE_ERR 函数执行失败
QL_FLASH_PARAM_ERROR 参数无效

ql_flash_write

该函数用于将数据写入Flash。

函数原型

ql_errcode_flash_e ql_flash_write(unsigned char *data, unsigned int addr, unsigned int len)

参数

  • data

    [In] 待写入的数据。

  • addr

    [In] Flash中待写入数据的地址。

  • len

    [In] 写入数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_flash_read

该函数用于从Flash中读取数据。

函数原型

ql_errcode_flash_e ql_flash_read(unsigned char *data, unsigned int addr, unsigned int len)

参数

  • data

    [Out] 读取的数据。

  • addr

    [In] 数据读取后的存放地址。

  • len

    [In] 读取的数据长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_flash_erase

该函数用于擦除Flash中的数据。每次最少擦除一个扇区(4
KB大小)的数据,每次擦除的数据大小均为扇区大小的整数倍。

函数原型

ql_errcode_flash_e ql_flash_erase(unsigned int addr, unsigned int len)

参数

  • addr

    [In] 待擦除数据的地址。

  • len

    [In] 擦除的数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_flash_parttion_erase

该函数用于擦除Flash中指定分区的数据。

函数原型

ql_errcode_flash_e ql_flash_parttion_erase(ql_partition_t inPartition, uint32_t off_set, uint32_t size)

参数

  • inPartition

    [In] 待擦除数据的分区;详见ql_partition_t

  • off_set

    [In] 需擦除的数据在分区的起始偏移地址。

  • size

    [In] 擦除的数据长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_partition_t

Flash分区枚举定义如下:

typedef enum
{
    QL_PARTITION_BOOTLOADER = 0,
    QL_PARTITION_APPLICATION,
    QL_PARTITION_OTA,
    QL_PARTITION_RF_FIRMWARE,
    QL_PARTITION_NET_PARAM,
    QL_PARTITION_USR_CONFIG,
    QL_PARTITION_BLE_BONDING_FLASH,
    QL_PARTITION_USR_RESERVE,
    QL_PARTITION_MAX,
} ql_partition_t

成员

成员 描述
QL_PARTITION_BOOTLOADER Bootloader分区
QL_PARTITION_APPLICATION App分区
QL_PARTITION_OTA OTA分区
QL_PARTITION_RF_FIRMWARE 射频分区
QL_PARTITION_NET_PARAM 网络分区
QL_PARTITION_BLE_BONDING_FLASH BLE分区
QL_PARTITION_USR_RESERVE 用户配置保留分区
QL_PARTITION_MAX Flash内的分区数目

ql_flash_parttion_write

该函数用于向Flash指定分区中写入数据。

函数原型

ql_errcode_flash_e ql_flash_parttion_write( ql_partition_t inPartition, volatile uint32_t off_set, uint8_t *inBuffer , uint32_t inBufferLength)

参数

  • inPartition

    [In] 待写入数据的分区;详见ql_partition_t

  • off_set

    [In] 需写入的数据在分区的起始偏移地址。

  • inBuffer

    [In] 需写入的数据。

  • inBufferLength

    [In] 需写入的数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

ql_flash_parttion_read

该函数用于读取Flash中指定分区中的数据。

函数原型

ql_errcode_flash_e ql_flash_parttion_read( ql_partition_t inPartition, volatile uint32_t off_set, uint8_t *outBuffer, uint32_t inBufferLength)

参数

  • inPartition

    [In] 待读取数据的分区;详见ql_partition_t

  • off_set

    [In] 需读取的数据在分区的起始偏移地址。

  • outBuffer

    [In] 存放读取到的数据。

  • inBufferLength

[in] 需读取的数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_flash_e

开发流程

本章节主要介绍在应用程序中如何使用上述Flash API并进行基础功能调试。

操作流程

模块SDK代码中提供了操作Flash的示例,示例程序在ql_application/quectel_demo目录下ql_flash_demo.c文件中。相关函数解析如下:

若需运行该示例程序,打开宏定义CFG_ENABLE_QUECTEL_DEMCFG_ENABLE_QUECTEL_FLASHql_flash_demo_thread_creat()ql_flash_demo_thread()会自动被调用以创建测试任务。

  • ql_flash_demo_thread_creat():该函数用于创建Flash任务,运行此Flash示例程序时需要调用该函数;

  • ql_flash_demo_thread():该函数是任务执行函数,实现向Flash中写入数据、从Flash中读取数据和擦除Flash中的数据。

    创建Flash任务-1

    Flash API使用示例-1

    Flash API使用示例-2

功能调试

用户需使用模块的TE-B板进行GPIO功能调试。调试时先参考操作流程运行Flash示例程序,之后重新编译固件版本并将新固件版本烧录至模块中,最后重启模块。使用串口工具打开串口2获取Log信息,如下图所示。

串口工具获取Log

通过对比数据可以看出,向Flash中写入数据、从Flash中读取数据和擦除Flash中的数据均执行成功。

SPI Flash

头文件

SPI Flash API的头文件为ql_spi_flash.h,位于SDK包的ql_components/qadpt/include/目录下。若无特别说明,本文档所涉及头文件均在该目录下。

SPI Flash API

ql_spi_flash_read

该函数用于通过SPI读取Flash数据。无需初始化SPI,可直接使用该函数读取Flash中的数据。

函数原型

ql_errcode_spi_nor_e ql_spi_flash_read( unsigned char* data, unsigned int addr, unsigned int len)

参数

  • data

    [Out] 读取的数据。

  • addr

    [In] 读取的数据的地址。

  • len

    [In] 读取的数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_spi_nor_e

ql_errcode_spi_nor_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_SPI_FLASH_SUCCESS = 0,
    QL_SPI_FLASH_EXECUTE_ERR,
    QL_SPI_FLASH_PARAM_ERROR,
} ql_errcode_spi_nor_e

成员

成员 描述
QL_SPI_FLASH_SUCCESS 函数执行成功
QL_SPI_FLASH_EXECUTE_ERR 函数执行失败
QL_SPI_FLASH_PARAM_ERROR 无效参数

ql_spi_flash_write

该函数用于通过SPI将数据写入Flash。无需初始化SPI,可直接使用该函数将数据写入Flash。

函数原型

ql_errcode_spi_nor_e ql_spi_flash_write(unsigned char *data, unsigned int addr, unsigned int len)

参数

  • data

    [In] 写入的数据。

  • addr

    [In] 写入的数据的地址。

  • len

    [In] 写入的数据的长度;单位:字节。

返回值

函数执行结果码;详见ql_errcode_spi_nor_e

ql_spi_flash_erase_chip

该函数用于擦除整片Flash中的数据。

函数原型

ql_errcode_spi_nor_e ql_spi_flash_erase_chip(void)

参数

返回值

函数执行结果码;详见ql_errcode_spi_nor_e

ql_spi_flash_erase_sector

该函数用于擦除Flash指定扇区(4 KB大小)中的数据。

函数原型

ql_errcode_spi_nor_e ql_spi_flash_erase_sector(unsigned int addr)

参数

addr

[In] 待擦除数据的Flash指定扇区地址。

返回值

函数执行结果码;详见ql_errcode_spi_nor_e

ql_spi_flash_erase_64k_block

该函数用于擦除Flash指定块(64 KB大小)的数据。

函数原型

ql_errcode_spi_nor_e ql_spi_flash_erase_64k_block(unsigned int addr)

参数

addr

[In] 待擦除数据的Flash指定块(64 KB大小)地址。

返回值

函数执行结果码;详见ql_errcode_spi_nor_e

开发流程

本章节主要介绍在应用程序中如何使用上述SPI Flash API并进行基础功能调试。

操作流程

模块SDK代码中提供了操作SPI Flash的示例,示例程序在ql_application/quectel_demo目录下ql_spi_flash_demo.c文件中。相关函数解析如下:

若需要运行该示例程序,打开宏定义CFG_ENABLE_QUECTEL_DEMOCFG_ENABLE_QUECTEL_SPI_FLASHCFG_SUPPORT_SPI_FLASH_TESTql_spi_flash_demo_thread_creat()ql_spi_flash_demo_thread()会自动被调用以创建测试任务。

  • ql_spi_flash_demo_thread_creat():该函数用于创建SPI Flash任务,运行此SPI Flash示例程序需要调用该函数。

  • ql_spi_flash_demo_thread():该函数是任务执行函数,实现了SPI Flash数据写入、数据读取和数据擦除,示例程序中使用的Flash型号为FM25W32。

    创建SPI Flash任务

    SPI Flash API使用示例(一)

    SPI Flash API使用示例(二)

功能调试

用户需使用模块的TE-B板进行SPI Flash功能调试,调试时先参考操作流程运行SPI Flash示例程序,之后重新编译固件版本并将新固件版本烧录至模块中,最后重启模块。使用串口工具打开串口2获取Log信息,如下图所示:

串口工具获取Log

通过对比数据可以看出,通过SPI向Flash中写入数据、从Flash中读取数据和擦除Flash中的数据均执行成功。

OTA升级

环境搭建

硬件准备

硬件条件:移远通信模块(以FC41D模块为例)。

固件烧录

  1. 联系移远通信技术支持获取BKFIL开发工具及工具相关使用信息。

  2. 打开BKFIL工具,点击工具主界面的"选择串口"按钮,选择主串口进行固件烧录

  3. 点击"Bin文件路径"后的icon图标,选择ql_out/all_2M.1220.bin文件。

    BKFIL工具界面

  4. 点击 "烧录"选项后,再按下模块上的复位键,进行固件烧录。

  5. 烧录完成后,"实时状态"区域显示"done"表示烧录成功。重启模块,选择模块通讯端口,使用串口工具连接模块串口。

模块开机log如下图所示:

开机启动Log

OTA升级流程

OTA升级包制作步骤

OTA升级包制作步骤如下:

  1. 将编译后在ql_out目录下生成的FC41D.bin文件拷贝到ql_tools/rtt_ota目录下。

  2. 联系移远通信技术支持获取rt_ota_packaging_tool_cli工具,将其拷贝至ql_tools/rtt_ota
    录下(有关该工具的使用方法,可联系移远通信技术支持)。

  3. 使用rt_ota_packaging_tool_cli工具执行以下命令将FC41D.bin文件打包成OTA升级包,生
    成的升级包名称默认为FC41D.rbl

    ./rt_ota_packaging_tool_cli -f FC41D.bin -v 1.1.1 -p app -c gzip -s aes -i 0123456789ABCDEF -k 0123456789ABCDEF0123456789ABCDEF

OTA升级步骤

OTA升级步骤如下:

  1. 请联系移远通信技术支持获取HTTP File
    Server(HFS)工具,作为固件升级的工具(固件存 放在局域网设备中)。

  2. 双击HFS.exe文件,打开HTTP File
    Server(HFS)工具,打开工具后,会自动获取本机局
    域网地址,并默认设置HTTP服务端口为80,如下图所示。

  3. 在HFS工具左侧空白处右键点击"Add
    files...
    ",选择升级固件包FC41D.rbl,此时从HTTP
    服务器下载升级固件包的URL地址为http://192.168.94.41/FC41D.rbl

    HFS工具界面-1

    HFS工具界面-2

  4. 执行如下命令关联AP(需确保AP和升级服务器在同一个局域网下):

    sta ssid 12345678

  5. 在终端执行如下命令进行OTA升级:

    # http_ota http://192.168.94.41/FC41D.rbl(服务器地址)

升级成功后将显示如下界面:

OTA升级成功Log

OTA API

http_ota_download

函数原型

Int http_ota_download(const char *uri,int port)

参数

  • uri

    [In] 远程HTTP服务器地址。

  • port

    [In] 远程HTTP服务器的端口号。

返回值

  • 0 函数执行成功

  • -1 函数执行失败

定时器

模块具有6路定时器,其中定时器0、1、2的时钟源为26MHz,定时器3、4、5的时钟源为32KHz。定时器2为系统时间的补偿定时器,定时器3为系统时基定时器。模块不支持定时器2、3,仅支持定时器0、1、4、5。

头文件

定时器API的头文件为ql_timer.h,位于SDK包的ql_components/qadpt/include/目录下。若无特别说明,本文档所涉及头文件均在该目录下。

定时器API

ql_TimerInit

该函数用于初始化定时器,计时时间单位为毫秒。

函数原型

ql_timer_errcode_e ql_TimerInit(ql_timer_number_e timer_id, UINT32 time_ms, ql_timer_callback timer_cb)

参数

  • timer_id

    [In] 定时器编号;详见ql_timer_number_e

  • time_ms

    [In] 定时时间;单位:毫秒。

  • timer_cb

    [In] 定时器中断的回调函数;详见ql_timer_callback

返回值

函数执行结果码;详见ql_timer_errcode_e

ql_timer_number_e

定时器编号信息枚举定义如下:

typedef enum
{
    QL_TIMER_0 =0,
    QL_TIMER_1,
    QL_TIMER_2,
    QL_TIMER_3,
    QL_TIMER_4,
    QL_TIMER_5,
}ql_timer_number_e

成员

成员 描述
QL_TIMER_0 定时器0
QL_TIMER_1 定时器1
QL_TIMER_2 定时器2
QL_TIMER_3 定时器3
QL_TIMER_4 定时器4
QL_TIMER_5 定时器5
ql_timer_errcode_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_TIMER_SUCCESS = 0,
    QL_TIMER_EXECUTE_ERR,
    QL_TIMER_INVALID_PARAM_ERR,
    QL_TIMER_NOT_OPEN_ERR,
} ql_timer_errcode_e

成员

成员 描述
QL_TIMER_SUCCESS 函数执行成功
QL_TIMER_EXECUTE_ERR 函数执行失败
QL_TIMER_INVALID_PARAM_ERRR 无效参数
QL_TIMER_NOT_OPEN_ERR 定时器未启动

ql_TimerInit_us

该函数用于初始化定时器,仅定时器0、1、2支持该函数。

函数原型

ql_timer_errcode_e ql_TimerInit_us(ql_timer_number_e timer_id, UINT32 time_us, ql_timer_callback timer_cb)

参数

  • timer_id

    [In] 定时器编号;详见ql_timer_number_e

  • time_us

    [In] 定时时间;单位:微秒。

  • timer_cb

    [In] 用于定时器中断的回调函数;详见ql_timer_callback

返回值

函数执行结果码;详见ql_timer_errcode_e

ql_get_timer_cnt

该函数用于获取定时器计数值。

函数原型

ql_timer_errcode_e ql_get_timer_cnt(ql_timer_number_e timer_id, UINT32 *cont)

参数

  • timer_id

    [In] 定时器编号;详见ql_timer_number_e

  • cont

    [In] 指向计数值的指针。

返回值

函数执行结果码;详见ql_timer_errcode_e

ql_TimerStart

该函数用于开始定时器。

函数原型

ql_timer_errcode_e ql_TimerStart(ql_timer_number_e timer_id)

参数

timer_id

[In] 定时器编号;详见ql_timer_number_e

返回值

函数执行结果码;详见ql_timer_errcode_e

ql_TimerStop

该函数用于停止定时器。

函数原型

ql_timer_errcode_e ql_TimerStop(ql_timer_number_e timer_id)

参数

timer_id

[In] 定时器编号;详见ql_timer_number_e

返回值

函数执行结果码;详见ql_timer_errcode_e

ql_timer_callback

该函数为用于定时器中断的回调函数。

函数原型

typedef void (*ql_timer_callback)(UINT8 arg)

参数

arg

[In] 输入的参数。

返回值

开发流程

本章节主要介绍在应用程序中如何使用上述定时器API并进行基础功能调试。示例中默认使用定时器5进行测试。

操作流程

模块SDK代码中提供了操作定时器的示例,示例程序在ql_application/quectel_demo目录下ql_timer_demo.c文件中。相关函数解析如下:

若需要运行该示例程序,打开宏定义CFG_ENABLE_QUECTEL_DEMOCFG_ENABLE_QUECTEL_TIMERql_timer_demo_thread_creat()ql_timer_demo_thread()会自动被调用以创建测试任务。

  • ql_timer_demo_thread_creat():该函数用于创建定时器任务,运行此定时器示例程序需要调用该函数。

  • ql_timer_demo_thread():该函数是任务执行函数,实现定时器的初始化、执行中断函数和停止计时功能。

    创建定时器任务

    定时器API使用示例

功能调试

用户需使用模块的测试板进行GPIO功能调试,调试时先参考操作流程运行定时器示例程序,之后重新编译固件版本并将新固件版本烧录至模块中,最后重启模块。使用串口工具打开串口2获取log信息,如下图所示:

串口工具获取Log

打印20次的系统时间,定时时间间隔为1秒。

看门狗

头文件

看门狗API的头文件为ql_watchdog.h,位于SDK包的ql_components/qadpt/include/目录下。若无特别说明,本文档所涉及头文件均在该目录下。

看门狗API

ql_WdgInit

该函数用于初始化看门狗。

函数原型

ql_wdg_errcode_e ql_WdgInit(UINT32 timeout)

参数

timeout

[In] 看门狗溢出时间;单位:毫秒;最大值:0xFFF(约为65秒)。

返回值

函数执行结果码;详见ql_wdg_errcode_e

ql_wdg_errcode_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_WDG_SUCCESS = 0,
    QL_WDG_EXECUTE_ERR,
    QL_WDG_INVALID_PARAM_ERR,
} ql_wdg_errcode_e

成员

成员 描述
QL_WDG_SUCCESS 函数执行成功
QL_WDG_EXECUTE_ERR 函数执行失败
QL_WDG_INVALID_PARAM_ERR 无效参数

ql_wdg_reload

该函数用于喂看门狗。

函数原型

void ql_wdg_reload(void)

参数

返回值

ql_wdg_finalize

该函数用于关闭看门狗。

函数原型

void ql_wdg_finalize(void)

参数

返回值

使用示例

模块SDK代码中提供了操作看门狗API的示例,示例程序在ql_application/quectel_demo目录下ql_watchdog_demo.c文件中。相关函数解析如下:

  • ql_wdg_demo_thread_creat():该函数用于创建看门狗任务,运行此看门狗示例程序需要调用该函数。

  • ql_wdg_demo_thread():该函数是任务执行函数,实现初始化看门狗和喂看门狗功能。

    创建看门狗任务

    看门狗API使用示例

低功耗模式

头文件

低功耗模式API头文件为ql_lowpower_demo.h,位于SDK包的ql_components/qadpt/include/目录下。若无特别说明,本文档所涉及头文件均在该目录下。

低功耗模式API

ql_deep_sleep_enter

该函数用于使MCU进入深度睡眠模式。

函数原型

ql_lowpower_errcode_e ql_deep_sleep_enter(ql_sleep_ctrl_parm_s deep_sleep_param)

参数

deep_sleep_param

[In] 深度睡眠模式相关配置;详见ql_sleep_ctrl_parm_s

返回值

函数执行结果码;详见ql_lowpower_errcode_e

ql_lowpower_errcode_e

函数执行结果码枚举定义如下:

typedef enum
{
    QL_LOWPOWER_SUCCESS = 0,
    QL_LOWPOWER_EXECUTE_ERR,
    QL_LOWPOWER_INVALID_PARAM_ERR,
} ql_lowpower_errcode_e

成员

成员 描述
QL_LOWPOWER_SUCCESS 函数执行成功
QL_LOWPOWER_EXECUTE_ERR 函数执行失败
QL_LOWPOWER_INVALID_PARAM_ERR 函数参数错误
ql_sleep_ctrl_parm_s

深度睡眠模式和低电压待机模式的相关配置结构体定义如下:

typedef struct ql_ps_sleep_ctrl {
    ql_deep_wakeup_way wake_up_way;
    UINT32 gpio_index_map;
    UINT32 gpio_edge_map;
    UINT32 gpio_stay_lo_map;
    UINT32 gpio_last_index_map;
    UINT32 gpio_last_edge_map;
    UINT32 gpio_stay_hi_map;
    UINT32 sleep_time;
    UINT32 lpo_32k_src;
} ql_sleep_ctrl_parm_s

参数

类型 参数 描述
ql_deep_wakeup_way wake_up_way 唤醒方式;详见ql_deep_wakeup_way
UINT32 gpio_index_map 唤醒引脚。GPIO 0~GPIO31,GPIO寄存器的bit位与引脚按顺序一一对应。
UINT32 gpio_edge_map 唤醒边沿。GPIO 0~GPIO31,GPIO寄存器的bit位与引脚按顺序一一对应。
0 上升沿
1 下降沿
UINT32 gpio_stay_lo_map MCU处于深度睡眠模式时引脚是否需要保持原状态。GPIO 0~GPIO31,GPIO寄存器的bit位与引脚按顺序一一对应。
0 不保持
1 保持
UINT32 gpio_last_index_map 唤醒引脚(无需配置)。
UINT32 gpio_last_edge_map 唤醒边沿(无需配置)。
UINT32 gpio_stay_hi_map MCU处于深度睡眠模式时引脚是否需要保持原状态(无需配置)。
UINT32 sleep_time 睡眠时间。唤醒方式为RTC定时唤醒MCU时该参数有效。单位:秒。
UINT32 lpo_32k_src RTC时钟源(无需配置)。
ql_deep_wakeup_way

唤醒深度睡眠模式和低电压待机模式的方式枚举如下:

typedef enum {
    QL_DEEP_WAKEUP_GPIO = 1,
    QL_DEEP_WAKEUP_RTC = 2,
} ql_deep_wakeup_way

成员

成员 描述
QL_DEEP_WAKEUP_GPIO GPIO中断唤醒
QL_DEEP_WAKEUP_RTC RTC定时唤醒

ql_lowvol_sleep_enter

该函数用于使MCU进入低电压待机模式。

函数原型

ql_lowpower_errcode_e ql_lowvol_sleep_enter(ql_sleep_ctrl_parm_s lowvol_sleep_param)

参数

lowvol_sleep_param

[In] 低电压待机模式的相关配置;详见ql_sleep_ctrl_parm_s

返回值

函数执行结果码;详见ql_lowpower_errcode_e

ql_deep_mcudtim_enter

该函数用于使MCU进入或退出正常待机模式。

函数原型

ql_lowpower_errcode_e ql_deep_mcudtim_enter(UINT32 enable, UINT32 dtimnum)

参数

  • enable

    [In] 进入或退出正常待机模式。

    • 0 退出

    • 1 进入

  • dtimnum

    [In] 在正常待机模式下,MCU是否进入Wi-Fi保活模式。

    • 0 不进入

其他值 Wi-Fi保活模式下唤醒MCU的时间间隔;单位:100毫秒(建议将参数值设置为30,即3000毫秒)。

返回值

函数执行结果码;详见ql_lowpower_errcode_e

ql_deep_rfdtim_enter

该函数用于打开或关闭RF睡眠模式。

函数原型

ql_lowpower_errcode_e ql_deep_rfdtim_enter(UINT32 enable,UINT32 arpenable)

参数

  • enable

    [In] 打开或关闭RF睡眠模式。

    • 0 关闭

    • 1 打开

  • arpenable

    [In] 正常待机模式下,MCU进入Wi-Fi保活模式时,是否开启唤醒MCU的ARP广播。

    • 0 关闭

    • 1 打开。打开ARP广播会增大功耗,减少丢包率。

返回值

函数执行结果码;详见ql_lowpower_errcode_e

开发流程

本章节主要介绍在应用程序中如何使用上述低功耗模式API并进行基础功能调试。示例中默认使用Wi-Fi保活模式进行测试。

操作流程

模块SDK代码中提供了操作低功耗模式API的示例,示例程序在ql_application/quectel_demo目录下ql_lowpower_demo.c文件中。相关函数解析如下:

若需要运行该示例程序,打开宏定义CFG_ENABLE_QUECTEL_DEMOCFG_ENABLE_QUECTEL_LOWPOWERql_lowpower_demo_thread_creat()ql_lowpower_demo_thread()会被自动调用来创建测试任务。

  • ql_lowpower_demo_thread_creat():该函数用于创建低功耗任务,运行此低功耗示例程序时需要调用该函数;

  • ql_lowpower_demo_thread():该函数是任务执行函数,用于MCU进入Wi-Fi保活模式。

    创建低功耗任务{width="5.6in" height="3.3in"}

    低功耗模式API使用示例

功能调试

用户需使用模块的测试板进行调试,调试时参考操作流程运行低功耗示例程序,之后重新编译固件版本并将新固件版本烧录至模块中,最后重启模块。使用串口工具打开串口2获取复位Log信息。然后发送STA命令(STA SSID Key)连接Wi-Fi,否则MCU将无法进入Wi-Fi保活模式。

使用串口工具获取Log

Wi-Fi连接成功后,需等待一会MCU方可进入Wi-Fi保活模式。

进入Wi-Fi保活模式

MCU进入Wi-Fi保活模式后,Wi-Fi保持连接。RTC定时器唤醒MCU后串口工具会打印"wake up"。

附录

参考文档:

文档名称
Quectel_FC41D&FCM100D&FCM740D&FLMx40D_QuecOpen(SDK)_快速开发指导

术语缩写:

缩写 英文全称 中文全称
AP Access Point 接入点
API Application Programming Interface 应用程序接口
ARP Address Resolution Protocol 地址解析协议
GPIO General-Purpose Input/Output 通用型输入/输出
HTTP Hyper Text Transfer Protocol 超文本传输协议
IoT Internet of Things 物联网
MCU Microprogrammed Control Unit 微程序控制器
OTA Over-the-Air Technology 空中下载技术
RF Radio Frequency 射频
RTC Real-Time Clock 实时时钟
RTOS Real-Time Operating System 实时操作系统
SSID Service Set Identifier 服务集标识符
STA Station 站点
SDK Software Development Kit 软件开发工具包
SPI Serial Peripheral Interface 串行外设接口