init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
--[[
|
||||
@module main
|
||||
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
|
||||
@version 001.999.000
|
||||
@date 2025.9.05
|
||||
@author 马亚丹
|
||||
@usage
|
||||
本demo演示的功能为:使用Air780EPM核心板演示otp核心库API 的用法,
|
||||
详细逻辑请看otp_test.lua文件
|
||||
|
||||
|
||||
]]
|
||||
|
||||
--[[
|
||||
必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
|
||||
PROJECT:项目名,ascii string类型
|
||||
可以随便定义,只要不使用,就行
|
||||
VERSION:项目版本号,ascii string类型
|
||||
如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
|
||||
X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
|
||||
因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为999
|
||||
如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
|
||||
]]
|
||||
PROJECT = "Air780EPM_otp"
|
||||
VERSION = "001.999.000"
|
||||
|
||||
|
||||
-- 在日志中打印项目名和项目版本号
|
||||
log.info("main", PROJECT, VERSION)
|
||||
|
||||
|
||||
|
||||
|
||||
-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
|
||||
-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
|
||||
-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
|
||||
-- 启动errDump日志存储并且上传功能,600秒上传一次
|
||||
-- if errDump then
|
||||
-- errDump.config(true, 600)
|
||||
-- end
|
||||
|
||||
|
||||
-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
|
||||
-- 可以使用合宙的iot.openluat.com平台进行远程升级
|
||||
-- 也可以使用客户自己搭建的平台进行远程升级
|
||||
-- 远程升级的详细用法,可以参考fota的demo进行使用
|
||||
|
||||
|
||||
-- 启动一个循环定时器
|
||||
-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
|
||||
-- 方便分析内存使用是否有异常
|
||||
-- sys.timerLoopStart(function()
|
||||
-- log.info("mem.lua", rtos.meminfo())
|
||||
-- log.info("mem.sys", rtos.meminfo("sys"))
|
||||
-- end, 3000)
|
||||
|
||||
|
||||
|
||||
|
||||
-- 加载otp_test功能模块
|
||||
require "otp_test"
|
||||
|
||||
|
||||
|
||||
-- 用户代码已结束---------------------------------------------
|
||||
-- 结尾总是这一句
|
||||
sys.run()
|
||||
-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
|
||||
@@ -0,0 +1,83 @@
|
||||
--[[
|
||||
@module otp_test
|
||||
@summary otp_test测试功能模块
|
||||
@version 1.0
|
||||
@date 2025.11.21
|
||||
@author 马亚丹
|
||||
@usage
|
||||
本demo演示的功能为:使用Air780EPM核心板演示otp核心库API的用法,演示写入,读取,擦除otp数据等操作。
|
||||
|
||||
运行核心逻辑:
|
||||
1.读取指定 OTP 区域的数据
|
||||
2.进入飞行模式,擦除指定的 OTP 区域的数据
|
||||
3.擦除完成后向该区域写入数据
|
||||
4.谨慎操作区域加锁(区域加锁后会永久变成只读无法写入)
|
||||
5.退出飞行模式
|
||||
|
||||
Air780EPM模组otp区域取值是1/2/3;
|
||||
写入 / 读取的长度需与 OTP 块大小对齐,按 4 字节对齐。
|
||||
]]
|
||||
|
||||
local function otp_test()
|
||||
log.info("========otp read start=========")
|
||||
local otpdata = otp.read(1, 0, 64)
|
||||
if otpdata then
|
||||
log.info("otp 读取结果", otpdata, type(otpdata))
|
||||
else
|
||||
log.info("otp 读取失败")
|
||||
end
|
||||
|
||||
log.info("写数据前先进入飞行模式")
|
||||
local result = mobile.flymode(0, true)
|
||||
if result then
|
||||
log.info("现在是飞行模式",result)
|
||||
|
||||
log.info("========otp erase start=========")
|
||||
local erase_ok = otp.erase(1)
|
||||
if erase_ok then
|
||||
log.info("OTP 擦除成功")
|
||||
else
|
||||
log.info("OTP 擦除失败")
|
||||
end
|
||||
local write_data = "1234"
|
||||
log.info("=========向otp区域1写入数据==========")
|
||||
local write_ok = otp.write(1, write_data, 0)
|
||||
if write_ok then
|
||||
log.info("OTP 写入成功", write_data)
|
||||
else
|
||||
log.info("OTP 写入失败")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
log.info("=========读取otp区域1数据==========")
|
||||
|
||||
local otpdata_1 = otp.read(1, 0, 4)
|
||||
local otpdata_2 = otp.read(1, 0, 8)
|
||||
if otpdata_1 then
|
||||
log.info("读取4字节数据", otpdata_1, type(otpdata_1))
|
||||
else
|
||||
log.info("===========otp区域1读取失败=========")
|
||||
end
|
||||
if otpdata_2 then
|
||||
log.info("读取8字节数据", otpdata_2, type(otpdata_2))
|
||||
else
|
||||
log.info("===========otp区域1读取失败=========")
|
||||
end
|
||||
|
||||
--=====锁定 OTP 区域,特别注意!!! 一定要在飞行模式下操作锁定!!!=============
|
||||
--=====OTP一旦加锁即无法解锁,OTP 会变成只读!!!
|
||||
-- local lock_ok = otp.lock(1)
|
||||
-- if lock_ok then
|
||||
-- log.info("OTP 锁定成功")
|
||||
-- end
|
||||
--===========================================================================
|
||||
|
||||
--退出飞行模式
|
||||
local result2 = mobile.flymode(0, false)
|
||||
if not result2 then
|
||||
log.info("退出飞行模式", result2)
|
||||
end
|
||||
end
|
||||
|
||||
sys.taskInit(otp_test)
|
||||
@@ -0,0 +1,72 @@
|
||||
## 功能模块介绍:
|
||||
|
||||
1. main.lua:主程序入口
|
||||
|
||||
2. otp_test.lua:演示otp核心库API的用法,详细逻辑请看otp_test.lua 文件
|
||||
|
||||
## 演示功能概述:
|
||||
|
||||
### otp_test.lua:
|
||||
|
||||
1.读取指定 OTP 区域的数据
|
||||
|
||||
2.进入飞行模式,擦除指定的 OTP 区域的数据
|
||||
|
||||
3.擦除完成后向该区域写入数据
|
||||
|
||||
4.谨慎操作区域加锁(区域加锁后会永久变成只读无法写入)
|
||||
|
||||
5.退出飞行模式
|
||||
|
||||
## 演示硬件环境:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
1. 合宙 Air780EPM 核心板一块
|
||||
|
||||
2. TYPE-C USB 数据线一根 ,Air780EPM 核心板和数据线的硬件接线方式为:
|
||||
* Air780EPM 核心板通过 TYPE-C USB 口供电;(USB的拨码开关off/on,拨到on)
|
||||
|
||||
* TYPE-C USB 数据线直接插到开发板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;
|
||||
|
||||
## 演示软件环境:
|
||||
|
||||
1. Luatools 下载调试工具
|
||||
|
||||
2. 固件版本:LuatOS-SoC_V2018_Air780EPM_1,固件地址,如有最新固件请用最新 [https://docs.openluat.com/Air780EPM/luatos/firmware/](https://docs.openluat.com/air780epm/luatos/firmware/)
|
||||
|
||||
3. pc 系统 win11(win10 及以上)
|
||||
|
||||
## 演示核心步骤:
|
||||
|
||||
1. 搭建好硬件环境
|
||||
|
||||
2. Luatools 烧录内核固件和 demo 脚本
|
||||
|
||||
3. 烧录成功后,代码会自动运行,查看打印日志,如果正常运行,会打印相关信息,otp 读取结果、进入飞行模式、otp区域擦除、写入/读取数据、退出飞行模式
|
||||
|
||||
4. 如下 log 显示:
|
||||
|
||||
```bash
|
||||
[2025-11-24 17:03:12.768][000000000.322] I/user.main Air780EPM_otp 001.000.000
|
||||
[2025-11-24 17:03:12.774][000000000.327] I/user.========otp read start=========
|
||||
[2025-11-24 17:03:12.783][000000000.327] I/user.otp 读取结果 string
|
||||
[2025-11-24 17:03:12.790][000000000.327] I/user.写数据前先进入飞行模式
|
||||
[2025-11-24 17:03:13.352][000000001.523] I/user.现在是飞行模式 true
|
||||
[2025-11-24 17:03:13.364][000000001.524] I/user.========otp erase start=========
|
||||
[2025-11-24 17:03:13.373][000000001.524] I/otp otp erase zone 1 00001000
|
||||
[2025-11-24 17:03:13.386][000000001.536] I/user.OTP 擦除成功
|
||||
[2025-11-24 17:03:13.395][000000001.536] I/user.=========向otp区域1写入数据==========
|
||||
[2025-11-24 17:03:13.405][000000001.536] I/user.OTP 写入成功 1234
|
||||
[2025-11-24 17:03:13.413][000000001.536] I/user.=========读取otp区域1数据==========
|
||||
[2025-11-24 17:03:13.420][000000001.537] I/user.读取4字节数据 1234 string
|
||||
[2025-11-24 17:03:13.429][000000001.537] I/user.读取8字节数据 1234 string
|
||||
[2025-11-24 17:03:13.713][000000001.896] I/user.退出飞行模式 false
|
||||
[2025-11-24 17:03:18.490][000000006.639] D/mobile cid1, state0
|
||||
[2025-11-24 17:03:18.504][000000006.639] D/mobile bearer act 0, result 0
|
||||
[2025-11-24 17:03:18.514][000000006.640] D/mobile NETIF_LINK_ON -> IP_READY
|
||||
[2025-11-24 17:03:18.541][000000006.723] D/mobile TIME_SYNC 0
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user