1:前言
先了解一下什么是OpenCpu,OpenCPU是一种以模块作为主处理器的应用方式。这种方式可以简化用户对通信终端的开发流程,精简硬件结构设计,从而满足客户对成本、功耗、安全性等方面的需求。
举个最简单的例子,在做mcu+4G模块相关开发的时候是mcu通过串口向4G模块发送AT指令然后4G模块返回响应。
而有了OpenCpu的出现就不需要再有mcu这个东西了,直接在模组内进行开发
这样就可以大大的优化了产品设计的大小和开发流程。
此为博主个人学习笔记记录内容,相关资料信息内容均为公开资料,如有需要评论区见。
本文在Windows7/Windows10 X64环境下,我在Windows11上试了一下也没出现报错。
使用的模组系列型号:ML307R
模组子型号:ML307R-DC
2:SDK开发包
OpenCPU SDK开发包内含交叉编译器,必要的库文件和头文件以及示例程序等;解压后的文件内容图:
SDK开发包文件说明:
custom | 存放用户空白工程,自己开发程序存放路径 |
doc | 存放参考文档 |
examples | 存放示例程序 |
include | 存放头文件 |
out | 存放编译生成的中间文件、版本文件、固件生成后存放的位置。 |
prebuild | 存放厂商提供的库文件、中间文件等 |
src | 存放cmiot库源码 |
tools | 存放交叉编译链、脚本工具、配置文件等 |
对于这个模组的硬件属性我在这就做简单的介绍:
模组主要应用接口包括:
▪ POWER接口
▪ UART接口
▪ USIM接口
▪ GPIO接口
▪ RF接口
▪ USB接口
▪ ANALOG接口
▪ SPI接口
▪ IIC接口
▪ AUDIO接口
▪ CONTROL接口
▪ LCD接口
▪ KEYPAD接口
▪ GND接口
▪ RESERVED接口
引脚定义类型、状态以及参数
AI | 模拟输入信号 | 信号类型 |
AO | 模拟输出信号 | |
AIO | 模拟输入输出双向信号 | |
DI | 数字输入信号 | |
DO | 数字输出信号 | |
DIO | 数字输入输出双向信号 | |
PI | 电源输入信号 | |
PO | 电源输出信号 | |
IO | 输入输出双向信号 | |
SI | 施密特输入信号 | |
OD | 开漏输出信号 | |
OC | 开集输出信号 | |
BOD | 开漏输入输出双向信号 | |
BOC | 开集输入输出双向信号 | |
RF | 射频信号 | |
OL | 输出低电平 | 默认状态 |
OH | 输出高电平 | |
Z | 高阻态 | |
Float | 浮空 | |
PU | 默认上拉 | |
PD | 默认下拉 | |
VIH | 高电平输入电压 | 参数 |
VIL | 低电平输入电压 | |
VOH | 高电平输出电压 | |
VOL | 低电平输出电压 |
详细的硬件设计要求查看硬件手册,有需要评论区。
3:编译环境
3.1:编译环境要求
OpenCPU SDK开发包,仅支持在Windows 7/Windows 10 X64环境下开发和编译,需预安装python3.7以上版本,安装完python后,打开命令行执行
pip install scons
安装scons工具。
想要知道自己电脑安装的python版本是多少符不符合要求,在终端输入命令即可查看
python --version
安装scons工具直接输命令就行了
pip install scons
3.2 搭建编译环境
OpenCPU SDK开发包自带交叉编译工具,使用前解压开发包至任意非中文路径下即可进行编译。请注意解压路径不能包含中文、空格及“&”符号。
其实就是在解压后的SDK包里面不能有中文和其他符号就行了。
3.3 编译SDK
SDK编译命令为scons
执行以下步骤编译SDK:
1. 确认模组硬件版本。
2. 在SDK根目录下,打开命令行执行scons -c清除历史编译信息。
3. 执行scons启动编译。
如无编译错误,可在out/image/目录下获取编译生成的软件版本。
4:SDK开发流程
4.1:用户入口函数
个人开发保存的位置在上面提到的custom文件夹中
用户入口函数cm_opencpu_entry()会在系统初始化过程中被调用;用户可在此函数中执行必要的初始化、用户线程创建等操作。就在custom\custom_main\src里面的custom_main.c里面。
4.2 示例程序说明
OpenCPU程序示例覆盖大部分API,用户通过cm_demo_main.c中的命令数组可获取API示例程序的入口函数;通过串口发送命令即可测试示例代码。
测试示例代码前需下载默认的demo版本固件至模组中。
参照以下步骤完成示例代码测试:
1. 模组开机。
开机后,串口会打印如下信息。不同型号模组及OpenCPU SDK版本打印信息存在差异,请以实际为准。
CM OpenCPU Starts
Compile Time:20211109172220
Boot Cause:6
SDK VERSION:ML302_OpenCPU_Standard_1.0.0.202111091716_release
BASELINE VERSION:8910_Module_V1_4_W21.31.2__20210810_1531
fs total:1441792,remain:339000
heap total:2864576,remain:1581472
sim ready
waiting for network...
[NET_REGISTER]:state:7
[NET_REGISTER]:PDP not ready
[NET_REGISTER]:state:2
[NET_REGISTER]:SIM ready
[NET_REGISTER]:state:3
[NET_REGISTER]:Attaching
[NET_REGISTER]:state:5
[NET_REGISTER]:Attach success
[NET_REGISTER]:state:8
[NET_REGISTER]:PDP ready
network ready
Now:2021-12-9:17:21:52,Tuesday
SN:92588066126970
IMEI:352273017386340
IMSI:460047933913534
ICCID:89860459112190003534
cm_test_asocket_init
please input cmds:
2. 按如下命令格式,通过串口输入命令,执行测试。
CM:FUNC:PARAM1:PARAM2:PARAM3......
▪ FUNC代表命令名称,可在cm_demo_main.c的命令数组中查询;
▪ PARAM代表参数,参数间以冒号(:)分隔。
4.3 添加源文件
添加源文件主要是在custom/路径下添加源文件和将custom路径加入头文件搜索路径为例说明操作步骤。
添加流程:
1. 打开custom/SConscript
2. 在ram_source_fles列表中增加的源文件,其代码段运行于内存中;若模组支持XIP模式,则可在flash_source_fles列表中增加以XIP模式运行的源文件,代码段运行于Flash中。
3. 在public_incs列表中增加公共头文件,private_incs列表中增加私有头文件。
4. 可在cpp_defnes列表中添加模块私有的宏定义,仅对本模块生效
Sconscript内容:
4.4 添加库文件
本节以在prebuild/libs路径下添加libxxx.a库文件为例说明操作步骤。
参照以下步骤添加库文件:
1. 打开tools/scons/EnvironConfig.py。
2. 在BuildConfg->LIBS列表中添加xxx变量。
3. 在BuildConfg->LIBPATH列表中添加libxxx.a的存放路径。
4.5 制作库文件
制作流程:
1. 确定需要打包的目标文件,如out\obj\examples\adc\src\cm_demo_adc.o和out\obj\examples\mqtt\src\cm_demo_mqtt.o。
2. 在命令行环境下,进入SDK根目录,选择SDK中的ar工具,执行打包命令。如"tools/toolchain/gcc-armnone-eabi/bin/arm-none-eabi-ar.exe" qc liboc_demo.a out/obj/examples/adc/src/cm_demo_adc.o out/obj/examples/mqtt/src/cm_demo_mqtt.o。
根目录下生成liboc_demo.a库文件,该文件可替代上述两个目标文件参与编译链接。
5:驱动安装
驱动在压缩包里面的ASR_Drivers文件夹里面
直接运行就可以了。
固件下载就不做具体介绍了,每一个的工具都有不同,有可用的就可以了。
6:SDK API简介
SDK中API含操作系统接口、网络接口、模组基础功能接口和硬件外设接口等,详细信息请参见该型号对应
的API资料。
下表为OpenCPU SDK支持的模块,不同SDK发布版本在API的支持范围上有细微差别,请以实际发布版本
为准。
接口模块 | 接口模块描述 | 参考文件 |
ADC | ADC功能 | cm_adc.h |
ALARM | 闹钟功能 | cm_alarm.h |
ASOCKET | 异步socket功能 | cm_asocket.h |
ASOCKET_DNS | 异步DNS解析接口 | cm_async_dns.h |
AUDIO | 音频功能 | cm_audio_common.h/cm_audio_pl |
BLE | BLE功能 | cm_ble.h |
CAMERA | CAMERA功能 | cm_camera.h |
DM | DM功能 | cm_dm.h |
ELOOP | Event Loop功能 | cm_eloop.h |
ETIMER | etimer功能 | cm_etimer.h |
FILE_SYSTEM | 文件系统 | cm_fs.h |
FTP | FTP功能 | cm_ftp.h |
GNSS | GNSS功能 | cm_gnss.h |
GPIO | 通用IO接口 | cm_gpio.h |
HTTP | HTTP功能 | cm_http.h |
I2C | I2C接口 | cm_i2c.h |
IOMUX | IOMUX功能 | cm_iomux.h |
KEYPAD | 矩阵键盘接口 | cm_keypad.h |
LBS | LBS功能 | cm_lbs.h |
LCD | LCD功能 | cm_lcd.h |
MEM | 内存管理功能 | cm_mem.h |
MQTT | MQTT功能 | cm_mqtt.h |
NTP | NTP功能 | cm_ntp.h |
OS | 操作系统接口 | cm_os.h |
OTA | 通用ota功能 | cm_ota.h |
PM | PM功能 | cm_pm.h |
PWM | PWM功能 | cm_pwm.h |
QR | QR功能 | cm_qr.h |
SD | SD功能 | cm_sd.h |
SIM | SIM功能 | cm_sim.h |
SPI | SPI接口 | cm_spi.h |
SSL | SSL功能 | cm_ssl.h |
SYS | 模组基础功能 | cm_sys.h |
TTS | TTS功能 | cm_tts.h |
UART | 串口接口 | cm_uart_h |
USB | USB虚拟串口通信功能 | cm_usb.h |
VIRT_AT | 虚拟AT功能 | cm_virt_at.h |
WIFI_SCAN | Wi-Fi扫描功能 | cm_wifi.h |