瀏覽代碼

update: 更新Air8000/Air8101 ble ibeacon和scan代码

wangshihao 4 月之前
父節點
當前提交
3d399abbe4

+ 81 - 41
module/Air8000/demo/ble/ibeacon/ble_ibeacon.lua

@@ -2,7 +2,7 @@
 @module  ble_ibeacon
 @summary Air8000演示ibeacon功能模块
 @version 1.0
-@date    2025.07.01
+@date    2025.11.18
 @author  wangshihao
 @usage
 本文件为Air8000核心板演示ibeacon功能的代码示例,核心业务逻辑为:
@@ -14,47 +14,87 @@
 4. 启动BLE广播功能
 ]]
 
-function ble_callback()
-    -- 无事可做
+-- 广播状态
+local adv_state = false
+
+-- 配置ibeacon广播数据包
+local ibeacon_data = string.char(0x4C, 0x00, -- Manufacturer ID(2字节)
+                            0x02, -- ibeacon数据类型(1字节)
+                            0x15, -- ibeacon数据长度(1字节)
+                            0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, -- UUID(16字节)
+                            0x00, 0x01, -- Major(2字节)
+                            0x00, 0x02, -- Minor(2字节)
+                            0xC0) -- Signal Power(1字节)
+
+-- 事件回调函数
+function ble_callback(ble_device, ble_event)
+    if ble_event == ble.EVENT_ADV_START then
+        log.info("iBeacon", "广播已成功启动")
+        adv_state = true
+    elseif ble_event == ble.EVENT_ADV_STOP then
+        log.info("iBeacon", "广播已停止,等待重新启动")
+        adv_state = false
+    end
 end
 
-function ble_ibeacon()
-    local ret = 0
-    sys.wait(500)
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    sys.wait(100)
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-    sys.wait(100)
-
-    sys.wait(100)
-    log.info("开始设置广播内容")
-
-    local adv_data = string.char(0x4C, 0x00, -- Manufacturer ID(2字节)
-                                0x02, -- ibeacon数据类型(1字节)
-                                0x15, -- ibeacon数据长度(1字节)
-                                0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, -- UUID(16字节)
-                                0x00, 0x01, -- Major(2字节)
-                                0x00, 0x02, -- Minor(2字节)
-                                0xC0) -- Signal Power(1字节)
-
-    -- 设置广播内容
-    -- 由于没有 "COMPLETE_LOCAL_NAME" ,故仅安卓可用
-    ble_device:adv_create({
-        addr_mode = ble.PUBLIC, -- 广播地址模式, 仅支持: ble.PUBLIC
-        channel_map = ble.CHNLS_ALL, -- 广播的通道, 可选值: ble.CHNL_37, ble.CHNL_38, ble.CHNL_39, ble.CHNLS_ALL
-        intv_min = 120, -- 广播间隔最小值, 单位为0.625ms, 最小值为20, 最大值为10240
-        intv_max = 120, -- 广播间隔最大值, 单位为0.625ms, 最小值为20, 最大值为10240
-        adv_data = { -- 支持表格形式, 也支持字符串形式(255字节以内)
-            {ble.FLAGS, string.char(0x06)}, 
-            {ble.MANUFACTURER_SPECIFIC_DATA, adv_data} 
-        }
-    })
-
-    sys.wait(100)
-    log.info("开始广播")
-    ble_device:adv_start()
+function ble_ibeacon_task_func()
+    while true do
+        -- 初始化蓝牙核心
+        bluetooth_device = bluetooth_device or bluetooth.init()
+        if not bluetooth_device then
+            log.error("BLE", "蓝牙初始化失败")
+            goto EXCEPTION_PROC
+        end
+
+        -- 初始化BLE功能
+        ble_device = ble_device or bluetooth_device:ble(ble_callback)
+        if not ble_device then
+            log.error("BLE", "当前固件不支持完整的BLE")
+            goto EXCEPTION_PROC
+        end
+
+        -- 设置广播内容
+        -- 由于没有 "COMPLETE_LOCAL_NAME" ,故仅安卓可用
+        adv_create = adv_create or ble_device:adv_create({
+            addr_mode = ble.PUBLIC, -- 广播地址模式, 仅支持: ble.PUBLIC
+            channel_map = ble.CHNLS_ALL, -- 广播的通道, 可选值: ble.CHNL_37, ble.CHNL_38, ble.CHNL_39, ble.CHNLS_ALL
+            intv_min = 120, -- 广播间隔最小值, 单位为0.625ms, 最小值为20, 最大值为10240
+            intv_max = 120, -- 广播间隔最大值, 单位为0.625ms, 最小值为20, 最大值为10240
+            adv_data = { -- 支持表格形式, 也支持字符串形式(255字节以内)
+                {ble.FLAGS, string.char(0x06)}, -- 广播标志位
+                {ble.MANUFACTURER_SPECIFIC_DATA, ibeacon_data}, -- 厂商特定数据, 包含ibeacon数据
+            }
+        })
+
+        if not adv_create then
+            log.error("BLE", "BLE创建广播失败")
+            goto EXCEPTION_PROC
+        end
+
+        log.info("开始广播")
+        if not ble_device:adv_start() then
+            log.error("BLE", "BLE广播启动失败")
+            goto EXCEPTION_PROC
+        end
+
+        adv_state = true
+
+        -- 等待直到广播停止
+        while adv_state do
+            sys.wait(1000)
+        end
+        ::EXCEPTION_PROC::
+
+        log.info("iBeacon", "检测到广播停止,准备重新初始化")
+        -- 停止广播
+        if ble_device then
+            ble_device:adv_stop()
+            ble_device = nil
+        end
+
+        -- 5秒后跳转到循环体开始位置,重新广播
+        sys.wait(5000)
+    end
 end
 
-sys.taskInit(ble_ibeacon)
+sys.taskInit(ble_ibeacon_task_func)

+ 1 - 1
module/Air8000/demo/ble/ibeacon/main.lua

@@ -2,7 +2,7 @@
 @module  main
 @summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
-@date    2025.07.01
+@date    2025.11.18
 @author  wangshihao
 @usage
 本demo演示的核心功能为:

+ 30 - 5
module/Air8000/demo/ble/ibeacon/readme.md

@@ -1,7 +1,24 @@
+## 功能介绍
+
+1、main.lua:主程序入口;
+
+2、ble_ibeacon.lua文件为演示ibeacon功能的代码文件,主要功能为:
+
+- 初始化蓝牙
+
+- 创建BLE对象
+
+- 配置ibeacon广播参数
+
+- 启动ibeacon广播
+
+- 处理异常情况,如广播异常停止,会跳转到异常处理流程,重新初始化蓝牙并广播。
+
+3、check_wifi.lua:检查当前Air8000模组的WiFi固件是否为最新版本,若不是则自动启动升级(需插入可联网的SIM卡)。
 
 ## 演示功能概述
 
-将使用Air8000核心板演示ibeacon功能。
+使用Air8000核心板演示ibeacon功能。
 
 ## 演示硬件环境
 
@@ -21,14 +38,22 @@
 
 [如何使用 LuaTools 烧录软件 - luatos@air8000 - 合宙模组资料中心](https://docs.openluat.com/air8000/luatos/common/download/)
 
-2、[Air8000 V2008版本固件(2025年6月27日及之后发布)](https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/core)(测试通过的固件是LuatOS-SoC_V2008_Air8000_LVGL_0627.soc)
+2、[Air8000 V2018版本固件](https://docs.openluat.com/air8000/luatos/firmware/)
+
+3、nrf connect 蓝牙调试软件
 
 ## 演示核心步骤
 
 1、搭建好演示硬件环境
 
-2、通过Luatools将demo与固件烧录到核心板中
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,如果设备出现以下日志,表示ibeacon广播已启动
+
+```
+ I/user.iBeacon 广播已成功启动
+```
 
-3、烧录成功后,自动开机运行
+4、接下来通过蓝牙APP 扫描并查看ibeacon信息
 
-4、接下来通过蓝牙APP 扫描并查看ibeacon信息
+![image](https://docs.openluat.com/cdn/image/ble/ble_ibeacon_1.png)

+ 112 - 39
module/Air8000/demo/ble/scan/ble_scan.lua

@@ -2,8 +2,8 @@
 @module  ble_ibeacon
 @summary Air8000演示scan功能模块
 @version 1.0
-@date    2025.07.01
-@author  wangshihao
+@date    2025.11.18
+@author  王世豪
 @usage
 本文件为Air8000核心板演示scan功能的代码示例,核心业务逻辑为:
 观察者模式(scan)的基本流程(概要描述)
@@ -19,52 +19,125 @@ ble_device:scan_start()
 ble_device:scan_stop()
 ]]
 
+-- 扫描状态
+local scan_state = false
+
+-- 处理扫描报告事件
+local function handle_scan_report(ble_device, ble_param)
+    -- 1. 打印基础设备信息
+    log.info("ble_scan", "发现设备", 
+            "RSSI:", ble_param.rssi, 
+            "地址:", ble_param.adv_addr:toHex(),
+            "数据:", ble_param.data:toHex())
+    
+    -- 2. 打印解析的广播数据
+    -- local adv_data = ble_device:adv_decode(ble_param.data)
+    -- if adv_data then
+    --     for k, v in pairs(adv_data) do
+    --         -- log.info("ble_scan", "广播数据", "长度:", v.len, "类型:", v.tp, "数据:", v.data:toHex())
+            
+    --         -- 以下是演示如何筛选ibeacon广播数据
+    --         -- 检查Manufacturer Specific Data (类型0xFF)
+    --         if v.tp == 0xFF then
+    --             local mfg_data = v.data
+    --             -- iBeacon格式检查
+    --             if mfg_data:len() >= 25 then
+    --                 local company_id = mfg_data:byte(1) + mfg_data:byte(2) * 256
+    --                 local beacon_type = mfg_data:byte(3)      -- 0x02
+    --                 local data_length = mfg_data:byte(4)      -- 0x15 (21字节)
+                    
+    --                 if beacon_type == 0x02 and data_length == 0x15 then
+    --                     log.info("ble_scan", "发现iBeacon设备")
+                        
+    --                     -- 解析iBeacon数据
+    --                     local uuid = mfg_data:sub(5, 20):toHex()
+    --                     local major = mfg_data:byte(21) * 256 + mfg_data:byte(22)
+    --                     local minor = mfg_data:byte(23) * 256 + mfg_data:byte(24)
+    --                     local tx_power_byte = mfg_data:byte(25)
+    --                     local tx_power
+    --                     if tx_power_byte > 127 then
+    --                         tx_power = tx_power_byte - 256
+    --                     else
+    --                         tx_power = tx_power_byte
+    --                     end
+                        
+    --                     log.info("ble_scan", "iBeacon详情", 
+    --                             "UUID:", uuid,
+    --                             "Major:", major,
+    --                             "Minor:", minor,
+    --                             "TxPower:", tx_power.. " dBm",
+    --                             "RSSI:", ble_param.rssi .. " dBm")
+    --                 end
+    --             end
+    --         end
+    --     end
+    -- end
+end
+
+-- 事件回调函数
 local function ble_callback(ble_device, ble_event, ble_param)
+    -- 扫描初始化事件
     if ble_event == ble.EVENT_SCAN_INIT then
-        log.info("ble", "scan init")
+        log.info("ble_scan", "scan init")
+        scan_state = true
+    -- 扫描报告事件
     elseif ble_event == ble.EVENT_SCAN_REPORT then
-        log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
-        -- 解析广播数据, 日志很多, 按需使用
-        -- local adv_data = ble_device:adv_decode(ble_param.data)
-        -- if adv_data then
-        --     for k, v in pairs(adv_data) do
-        --         log.info("ble", "adv data", v.len, v.tp, v.data:toHex())
-        --     end
-        -- end
-        -- if ble_param.data:byte(1) == 0x1A then
-        --     log.info("ble", "ibeacon数据", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
-        -- end
+        handle_scan_report(ble_device, ble_param)
+    -- 停止扫描事件
     elseif ble_event == ble.EVENT_SCAN_STOP then
-        log.info("ble", "scan stop")
+        log.info("ble_scan", "scan stop")
+        scan_state = false
+        -- 在这里可以添加自己的扫描停止后的处理逻辑
     end
 end
 
-local bt_scan = false   -- 是否扫描蓝牙
+function ble_scan_task_func()
+    while true do
+        -- 初始化蓝牙核心
+        bluetooth_device = bluetooth_device or bluetooth.init()
+        if not bluetooth_device then
+            log.error("BLE", "蓝牙初始化失败")
+            goto EXCEPTION_PROC
+        end
 
-function ble_scan()
-    sys.wait(500)
-    log.info("开始初始化蓝牙核心")
-    bluetooth_device = bluetooth.init()
-    sys.wait(100)
-    log.info("初始化BLE功能")
-    ble_device = bluetooth_device:ble(ble_callback)
-    if ble_device == nil then
-        log.error("当前固件不支持完整的BLE")
-        return
-    end
-    sys.wait(100)
-    -- 扫描模式
-    sys.wait(1000)
-    ble_device:scan_create(0,1000,100) -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
-    -- ble_device:scan_create(0, 10, 10) -- 使用自定义参数
-    sys.wait(100)
-    log.info("开始扫描")
-    ble_device:scan_start()
+        -- 初始化BLE功能
+        ble_device = ble_device or bluetooth_device:ble(ble_callback)
+        if not ble_device then
+            log.error("BLE", "当前固件不支持完整的BLE")
+            goto EXCEPTION_PROC
+        end
+
+        -- 创建扫描
+        if not ble_device:scan_create() then
+            log.error("BLE", "BLE创建扫描失败")
+            goto EXCEPTION_PROC
+        end
 
-    -- sys.wait(15000)
-    -- log.info("停止扫描")
-    -- ble_device:scan_stop()
+        log.info("ble_scan", "开始扫描")
+        if not ble_device:scan_start() then
+            log.error("ble_scan", "扫描启动失败")
+            goto EXCEPTION_PROC
+        end
 
+        scan_state  = true
+
+        -- 等待直到扫描停止
+        while scan_state do
+            sys.wait(1000)
+        end
+        ::EXCEPTION_PROC::
+
+        log.info("ble_scan", "检测到扫描异常,准备重新初始化")
+        -- 停止扫描
+        if ble_device then
+            ble_device:scan_stop()
+            ble_device = nil
+        end
+
+        -- 5秒后跳转到循环体开始位置,重新扫描
+        sys.wait(5000)
+    end
 end
 
-sys.taskInit(ble_scan)
+-- 启动扫描任务
+sys.taskInit(ble_scan_task_func)

+ 2 - 2
module/Air8000/demo/ble/scan/main.lua

@@ -2,8 +2,8 @@
 @module  main
 @summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
-@date    2025.07.01
-@author  wangshihao
+@date    2025.11.18
+@author  王世豪
 @usage
 本demo演示的核心功能为:
 Air8000的BLE的观察者模式(SCAN),通过示例演示了如何开启蓝牙设备的观察者模式(SCAN),扫描附近的蓝牙设备信息并打印出来。

+ 36 - 5
module/Air8000/demo/ble/scan/readme.md

@@ -1,7 +1,26 @@
+## 功能介绍
+
+1、main.lua:主程序入口;
+
+2、ble_scan.lua文件为演示scan功能的代码文件,主要功能为:
+
+- 初始化蓝牙
+
+- 创建BLE对象
+
+- 设置扫描模式
+
+- 开始扫描
+
+- 在回调函数中处理扫描事件
+
+- 按需停止扫描
+
+3、check_wifi.lua:检查当前Air8000模组的WiFi固件是否为最新版本,若不是则自动启动升级(需插入可联网的SIM卡)。
 
 ## 演示功能概述
 
-将使用Air8000核心板,演示Air8000蓝牙在观察者模式下扫描蓝牙设备的操作。
+使用Air8000核心板,演示Air8000蓝牙在观察者模式下扫描蓝牙设备的操作。
 
 ## 演示硬件环境
 
@@ -21,14 +40,26 @@
 
 [如何使用 LuaTools 烧录软件 - luatos@air8000 - 合宙模组资料中心](https://docs.openluat.com/air8000/luatos/common/download/)
 
-2、[Air8000 V2008版本固件(2025.06.27及之后发布)](https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/core)(测试通过的固件是LuatOS-SoC_V2008_Air8000_LVGL_0627.soc)
+2、[Air8000 V2018版本固件](https://docs.openluat.com/air8000/luatos/firmware/)
 
 ## 演示核心步骤
 
 1、搭建好演示硬件环境
 
-2、通过Luatools将demo与固件烧录到核心板中
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,如果设备出现以下日志,表示scan已启动
+
+```
+I/user.ble_scan scan init
+```
+
+4、扫描到的蓝牙设备信息会在日志中打印出来,可以自己根据需要修改打印的设备信息。
+
+例如下面这条打印,扫描到了一个广播包,广播包的RSSI为-53dBm,广播包的MAC地址为1E10BA37603C,广播包的广播数据为1EFF060001092022F866C970A5405607E9ABC4E2D1E23E53488A469EB48501,广播包的广播数据长度为62字节。
+
+```
+D/user.ble_scan scan report -53 1E10BA37603C 1EFF060001092022F866C970A5405607E9ABC4E2D1E23E53488A469EB48501 62
+```
 
-3、烧录成功后,自动开机运行
 
-4、通过luatools日志查看扫描到的设备信息

+ 1 - 1
module/Air8101/demo/ble/ibeacon/ble_ibeacon.lua

@@ -2,7 +2,7 @@
 @module  ble_ibeacon
 @summary Air8101演示ibeacon功能模块
 @version 1.0
-@date    2025.10.21
+@date    2025.11.18
 @author  wangshihao
 @usage
 本文件为Air8101核心板演示ibeacon功能的代码示例,核心业务逻辑为:

+ 1 - 1
module/Air8101/demo/ble/ibeacon/main.lua

@@ -2,7 +2,7 @@
 @module  main
 @summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
-@date    2025.10.21
+@date    2025.11.18
 @author  wangshihao
 @usage
 本demo演示的核心功能为:

+ 10 - 9
module/Air8101/demo/ble/ibeacon/readme.md

@@ -1,5 +1,8 @@
 ## 功能介绍
-1、ble_ibeacon.lua文件为演示ibeacon功能的代码文件,主要功能为:
+
+1、main.lua:主程序入口;
+
+2、ble_ibeacon.lua文件为演示ibeacon功能的代码文件,主要功能为:
 
 - 初始化蓝牙
 
@@ -21,9 +24,7 @@
 
 2、TYPE-C USB数据线一根
 
-3、USB转串口数据线一根
-
-4、Air8101核心板和数据线的硬件接线方式为
+3、Air8101核心板和数据线的硬件接线方式为
 
 - Air8101核心板通过TYPE-C USB口供电;(核心板背面的功耗测试开关拨到OFF一端)
 
@@ -31,13 +32,11 @@
 
 - TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
 
-- USB转串口数据线,一般来说,白线连接核心板的12/U1TX,绿线连接核心板的11/U1RX,黑线连接核心板的gnd,另外一端连接电脑USB口;
-
 ## 演示软件环境
 
 1、Luatools下载调试工具
 
-2、[Air8101 V1006版本固件](https://docs.openluat.com/air8101/luatos/firmware/)(理论上,2025年7月26日之后发布的固件都可以)
+2、[Air8101 V1006版本固件](https://docs.openluat.com/air8101/luatos/firmware/)
 
 3、nrf connect 蓝牙调试软件
 
@@ -45,7 +44,7 @@
 
 1、搭建好演示硬件环境
 
-2、Luatools烧录内核固件和修改后的demo脚本代码
+2、Luatools烧录内核固件和demo脚本代码
 
 3、烧录成功后,自动开机运行,如果设备出现以下日志,表示ibeacon广播已启动
 
@@ -53,4 +52,6 @@
  I/user.iBeacon 广播已成功启动
 ```
 
-4、接下来通过蓝牙APP 扫描并查看ibeacon信息
+4、接下来通过蓝牙APP 扫描并查看ibeacon信息
+
+![image](https://docs.openluat.com/cdn/image/ble/ble_ibeacon_1.png)

+ 3 - 3
module/Air8101/demo/ble/scan/ble_scan.lua

@@ -2,7 +2,7 @@
 @module  ble_ibeacon
 @summary Air8101演示scan功能模块
 @version 1.0
-@date    2025.10.21
+@date    2025.11.18
 @author  王世豪
 @usage
 本文件为Air8101核心板演示scan功能的代码示例,核心业务逻辑为:
@@ -24,13 +24,13 @@ local scan_state = false
 
 -- 处理扫描报告事件
 local function handle_scan_report(ble_device, ble_param)
-    -- 基础设备信息
+    -- 1. 打印基础设备信息
     log.info("ble_scan", "发现设备", 
             "RSSI:", ble_param.rssi, 
             "地址:", ble_param.adv_addr:toHex(),
             "数据:", ble_param.data:toHex())
     
-    -- -- 解析广播数据
+    -- -- 2. 打印解析广播数据
     -- local adv_data = ble_device:adv_decode(ble_param.data)
     
     -- if adv_data then

+ 1 - 1
module/Air8101/demo/ble/scan/main.lua

@@ -2,7 +2,7 @@
 @module  main
 @summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
 @version 1.0
-@date    2025.10.21
+@date    2025.11.18
 @author  王世豪
 @usage
 本demo演示的核心功能为:

+ 8 - 10
module/Air8101/demo/ble/scan/readme.md

@@ -1,6 +1,8 @@
 ## 功能介绍
 
-1、ble_scan.lua文件为演示scan功能的代码文件,主要功能为:
+1、main.lua:主程序入口;
+
+2、ble_scan.lua文件为演示scan功能的代码文件,主要功能为:
 
 - 初始化蓝牙
 
@@ -16,17 +18,15 @@
 
 ## 演示功能概述
 
-使用Air8101核心板,演示Air8101蓝牙在观察者模式下扫描蓝牙设备的操作。
+使用Air8101核心板,演示Air8101蓝牙在观察者模式下扫描蓝牙设备的操作。
 
 ## 演示硬件环境
 
-1、Air8101核心板两块(本次演示中,一块作为中心设备,一块作为外围设备)
+1、Air8101核心板一块
 
 2、TYPE-C USB数据线一根
 
-3、USB转串口数据线一根
-
-4、Air8101核心板和数据线的硬件接线方式为
+3、Air8101核心板和数据线的硬件接线方式为
 
 - Air8101核心板通过TYPE-C USB口供电;(核心板背面的功耗测试开关拨到OFF一端)
 
@@ -34,19 +34,17 @@
 
 - TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
 
-- USB转串口数据线,一般来说,白线连接核心板的12/U1TX,绿线连接核心板的11/U1RX,黑线连接核心板的gnd,另外一端连接电脑USB口;
-
 ## 演示软件环境
 
 1、Luatools下载调试工具
 
-2、[Air8101 V1006版本固件](https://docs.openluat.com/air8101/luatos/firmware/)(理论上,2025年7月26日之后发布的固件都可以)
+2、[Air8101 V1006版本固件](https://docs.openluat.com/air8101/luatos/firmware/)
 
 ## 演示核心步骤
 
 1、搭建好演示硬件环境
 
-2、Luatools烧录内核固件和修改后的demo脚本代码
+2、Luatools烧录内核固件和demo脚本代码
 
 3、烧录成功后,自动开机运行,如果设备出现以下日志,表示scan已启动