开发注意事项及FAQ_Rev1.0
文件修订历史
版本 |
日期 |
作者 |
审核 |
修订内容 |
|---|---|---|---|---|
Rev1.0 |
2026-09-21 |
zlc |
更新文档 |
1 引言
本文档介绍利尔达移芯平台Cat.1 模组在 Open 开发和使用过程中重要注意事项和常见的问题,用户可以把本文档作为工具手册使用。在实际客户项目开发中,如遇到问题可优先参考此文档检查是否有相同或者相似的问题解决方案,以便快速解决问题,提高项目开发速度和问题解决效率,当前为初版,后续会持续进行优化。
2 基础通用类
2.1 使用OpenCPU是否需要指定出厂固件
不需要,任何出厂固件都可以,烧录用户程序后不会擦除校准(独立分区)等信息。
2.2 使用OpenCPU时不同系列模组是否相互兼容
不兼容,每款模组或者不同系列内部引脚连接有所区别,用户开发使用的模组型号,量产时必须型号完全一致。
2.3 使用OpenCPU是否支持AT指令
只支持有限的基础指令,如下:
+CGMR 获取厂商版本号
+ECRST 系统重启
+ECFSINFO 获取文件系统信息
+CGSN 获取产品序列号
+ECPMUCFG 设置 PMU 睡眠等级
+ECIPR 设置 AT 串口通信波特率(掉电不保存)
+ECTASKINFO 显示 Task 相关信息
+ECPCFG 设置平台配置信息
+ECNETCFG 网卡参数配置
+ECNETDEVCTL 设置网卡数据通路
+CREG 网络注册
+CEREG EPS 网络注册状态
+CGPADDR 显示 PDP 地址
+ECCFG 获取和设置 UE 扩展配置
+CSQ 获取信号质量
+CPIN 输入 PIN
+ECFREQ 设置优先频点/锁频或锁小区
+ECBAND 设置频段信息
+ECICCID 返回 SIM 卡 ICCID 信息
+COPS PLMN 选择
+CFUN 设置电话功能等级
+CIMI 获取 IMS
+ECSIMCFG SIM 相关配置(睡眠/探测)
+ECSTATUS 返回 UE 端关键参数状态
2.4 相关配置修改
config/default.ini 中包含了部分配置参数,用户可自行修改。注意,烧录时需要进行擦除配置后烧录,否则会导致配置失效。
faultAction:发生dump后复位 或 保存dump,一般用于抓软件dump使用,量产软件必须设置为4。
logPortSel:模组底层日志从那个口输出,默认为USB log口。
usbVBUSModeEn / usbVBUSWkupPad:用于使能VBUS功能。根据原理图配置对应的唤醒源。
cfun:默认开机cfun功能。
AutoApn:是否开启 auto APN功能,建议海外出货模组打开该配置。
dataCont:是否使能流量控制。
uart1At:UART1是否初始化为AT口。
appLogPort:应用日志输出口,默认是USB AT口输出。
2.5 AON是什么意思
Always-On Domain Pin,普通IO口休眠时掉电,无法保持其电平输出,AON对应的接口在模组休眠后仍然可以维持其电平输出或者保证其功能有效性。
2.6 引脚复用表中的NI&NP是什么含义
通电后默认不配置的话就是浮空的。通过软件配置去初始化这些功能。
2.7 驻留不上网络导致持续30mA大电流
实测标准固件由于开了网络强制驻留的功能(AT+ECCFG="EmergencyCamp",1),所以会一直搜网。关闭该功能后(AT+ECCFG="EmergencyCamp",0),实测会进入间歇性搜网状态(十分钟左右会停止然后再搜网)。
但在OPEN应用上,想要控制功耗,通常做法还是关闭CFUN进入休眠。
2.8 如何修改分区
当前SDK版本app分区与FS分区动态可调,以F6D_A底包为例,文件位置为 components/basePkg/F6D_A/partition_info.txt。
默认APP分区大小:0x0CB000,FS分区大小:0x01D000。编译输出如下:
APP分区增大100K,配置文件修改如下:
修改后,clean重新编译,编译输出如下:
警告
注意事项:
版本量产后,修改分区会导致差分或者全量升级失败,所以在量产前务必确认好分区,后续不可进行分区修改。
修改必须4k对齐。
当前全量升级的方案是通过保存APP镜像包到文件系统中进行全量升级,若APP分区过大导致FS无法保存APP镜像,则会使全量升级功能失效。
3 FreeRTOS相关问题
3.1 如何创建task
参考 examples/demo/src/demo_os.c 中的代码进行任务创建:
// Task 1 function
void vTask1(void *pvParameters) {
liot_trace( "Task1 in");
UINT32 uxBits;
for (;;) {
liot_trace( "Task1 1111Received event, starting task...");
// Wait for event
LiotOSStatus_t result = liot_rtos_flag_wait(xEventGroupHandle, TASK_1_EVENT, LIOT_FLAG_AND_CLEAR, &uxBits, LIOT_WAIT_FOREVER);
if (0 == result)
{
if(uxBits & TASK_1_EVENT) {
liot_trace( "Task1 Received event, starting task...");
// Execute task
// ...
}
}
}
}
// Create task 1
liot_task_t task1_handle = NULL;
result = liot_rtos_task_create(&task1_handle, 1024, LIOT_APP_TASK_PRIORITY, "Task1", &vTask1, NULL);
if(result == 0)
{
liot_trace("Task1 task create success %d", result);
}
else
{
liot_trace("Task1 task create fail %d", result);
}
3.2 创建task时分配空间大小如何确认
task为运行内存的大小,与程序多少无关,只跟局部变量和调用深度有关系,一般分配2KBytes即可,根据task中变量定义的总大小进行适当调整。
更多内容可参考:使用freertos如何确定分配堆栈空间大小_freertos堆栈空间设置-CSDN博客
示例:
当看到 liot_httpc_perform 该接口返回错误码为 LIOT_HTTPC_ERR_UNKNOWN 时,请检查当前任务栈的大小,建议使用 liot_rtos_task_get_stack_space 接口去获取栈剩余空间的大小(结果×4 得到剩余字节数),如果为0则表示栈溢出,需要调整栈的大小,建议栈的分配大小为:如实际最大使用量为 A,则设置堆栈大小为 A / 0.9。




