模块信息(hmeta)
一、模块信息概述
模块信息是合宙每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性;
包含设备唯一 id,硬件型号,模组的硬件版本号,固件版本号等;
模块远程升级需要上传模块信息,解决和分析某些问题的时候可能也会需要确认模块信息.
二、演示功能概述
使用烧录底层固件(LuatOS-SoC_V10001_Air8101_20250101_201800.soc)和 hmeta 例程脚本学习有关模块信息的 api 函数.
三、硬件准备
“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”
参考:硬件环境清单 - luatos@air8101 - 合宙文档中心,准备以及组装好硬件环境。
四、软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools 工具;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V10001_Air8101.soc;参考项目使用的内核固件;
3. luatos 需要的脚本和资源文件
脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8101/tree/master/demo/hmeta
lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板 - luatos@air8101 - 合宙文档中心,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
五、API 说明
可以参考:hmeta - 硬件元数据
5.1 mcu.unique_id()
获取设备唯一 id.
参数
无
返回值
**返回值类型** | **解释** |
string | 设备唯一 id |
例子
--注意,可能包含不可见字符,如需查看建议 toHex()后打印
local unique_id = mcu.unique_id()
log.info("unique_id", unique_id:toHex())
-- 实例输出:unique_id 4C4D19333C 10
5.2 mobile.imei(index)
获取设备 IMEI
参数
**传入值类型** | **解释** |
int | 编号,默认0. 在支持双卡的模块上才会出现0或1的情况 |
返回值
**返回值类型** | **解释** |
string | 设备 IMEI |
例子
--4G 模组只支持双卡单待/单卡,只有一个 IMEI,可以通过 mobile.imei()直接获取
-- 获取 IMEI
log.info("imei", mobile.imei())
-- 实例输出:imei 866374063853768
5.3 hmeta.model()
获取硬件型号
参数
无
返回值
**返回值类型** | **解释** |
string | 若能识别到,返回硬件型号, 否则会是 nil |
例子
log.info("hmeta-model", hmeta.model())
-- 实例输出:hmeta-model D602
5.4 rtos.bsp()
获取硬件 bsp 型号
参数
无
返回值
**返回值类型** | **解释** |
string | 硬件 bsp 型号 |
例子
log.info("rtos.bsp", rtos.bsp())
-- 实例输出:rtos-bsp Air8101
5.5 hmeta.hwver()
获取模组的硬件版本号
参数
无
返回值
**返回值类型** | **解释** |
string | 若能识别到,返回模组的硬件版本号, 否则会是 nil |
例子
log.info("hmeta", hmeta.hwver and hmeta.hwver())
-- 实例输出:hmeta A10
5.6 rtos.version()
获取固件版本号
参数
无
返回值
**返回值类型** | **解释** |
string | 固件版本号 |
例子
log.info("luatos_version ", rtos.version())
-- 实例输出:luatos_version V10001
六、功能验证
6.1 例程
参考一下例程部分代码
sys.taskInit(function()
while hmeta do
-- hmeta识别底层模组类型的
-- 不同的模组可以使用相同的bsp,但根据封装的不同,根据内部数据仍可识别出具体模块
log.info("hmeta", hmeta.model(), hmeta.hwver and hmeta.hwver())
--hmeta D602 A10
log.info("bsp", rtos.bsp())
--bsp Air8101
local unique_id = mcu.unique_id()
log.info("unique_id", unique_id:toHex())
-- 实例输出:unique_id 4C4D19333C 10
log.info("luatos_version ", rtos.version())
-- 实例输出:luatos_version V10001
sys.wait(3000)
end
log.info("这个bsp不支持hmeta库哦")
end)
6.2 对应 log
[2025-01-01 23:19:13.158] I/pm reset reason: 0
[2025-01-01 23:19:13.158] D/pm boot up by power on
[2025-01-01 23:19:13.158] D/pm poweron reason 0
[2025-01-01 23:19:13.158] D/main UID: 4C4D19333C
[2025-01-01 23:19:13.158] cal:W(8):temp in otp is:567
[2025-01-01 23:19:13.269] D/main STA MAC: C8478C8F027E
[2025-01-01 23:19:13.269] D/main AP MAC: C8478C8F027F
[2025-01-01 23:19:13.269] D/main BLE MAC: C8478C8F0280
[2025-01-01 23:19:13.269] D/main ETH MAC: C8478C8F0281
[2025-01-01 23:19:13.269] I/main LuatOS@D602 base 24.10 bsp V10001 32bit
[2025-01-01 23:19:13.269] I/main ROM Build: Jan 1 2025 20:17:40
[2025-01-01 23:19:13.270] D/main loadlibs luavm 204792 14256 14336
[2025-01-01 23:19:13.270] D/main loadlibs sys 301544 95320 95320
[2025-01-01 23:19:13.270] I/user.hmeta D602 A10
[2025-01-01 23:19:13.270] I/user.bsp Air8101
[2025-01-01 23:19:13.270] I/user.unique_id 4C4D19333C 10
[2025-01-01 23:19:13.270] I/user.luatos_version V10001
[2025-01-01 23:19:16.272] I/user.hmeta D602 A10
[2025-01-01 23:19:16.272] I/user.bsp Air8101
[2025-01-01 23:19:16.272] I/user.unique_id 4C4D19333C 10
[2025-01-01 23:19:16.272] I/user.luatos_version V10001
七、总结
通过本章学习,你可以学习到模块唯一 ID,模块硬件型号,固件版本,硬件版本的获取方法.
八、常见问题
8.1 模块唯一 ID 文档
mobile.sn()获取 SN,出厂未必有写 SN; 一般用途的唯一 id, 可以用 mobile.imei()代替; 如需要真正的唯一 ID, 使用 mcu.unique_id()