本栏目讲什么
「系统控制」是 Ai-M6x(BL616/BL618)开发教程中的一个栏目,收录让芯片按你的意图运行、保存数据、排查问题这一类基础能力。它们不像点灯、串口那样点亮某个外设,而是控制芯片自身的行为:日志怎么打、数据怎么存、怎么休眠省电、怎么重启、崩溃了怎么定位。
每个功能都有独立页面,页面结构统一为:概念先知道 → 例程功能简介 → 操作步骤 → 代码执行流程 → API 介绍 → 完整代码 → FAQ。第一次接触建议先看本页总览,再按需进入对应页面。
功能一览
| 功能 | 页面 | 作用(一句话) | 对应 SDK 例程 |
|---|---|---|---|
| blog 日志 | blog 日志 | 把运行状态按致命/错误/警告/信息/调试/跟踪分级打印到串口,支持按标签过滤,是排查问题的基础工具 | examples/bflog/barebone_sync |
| Flash 操作 | Flash 操作 | 对内部 Flash 数据区做擦除、写入、读取校验,用于存放掉电不丢的数据 | examples/peripherals/flash/flash_read_write |
| 睡眠模式 | 睡眠模式 | 进入 PDS 深度睡眠,RTC 每 1 秒定时唤醒,是低功耗项目的核心手段 | examples/pmu/bl616/pds_rtc |
| 软件定时器 | 软件定时器 | 用 FreeRTOS 软件定时器做“闹钟”,到期执行回调,不占用硬件定时器 | 自编示例(基于 FreeRTOS xTimerCreate) |
| 软件重启 | 软件重启 | 程序主动调用复位 API 重启系统,用于配置生效、OTA 后重启等场景 | 自编示例(基于 bl_sys_reset_system() 等) |
| 掉电保存 | 掉电保存 | 用 EasyFlash 把键值对(Wi-Fi 账号、设备配置等)写进 Flash,掉电不丢、重启可读 | examples/easyflash |
| 分区表 | 分区表 | 读取并打印 Flash 分区表,看清固件、PSM、OTA 等区域各占哪块地址 | examples/partition |
| 日志断言 | 日志断言 | 用 DBG 宏打印变量/数组/hexdump,用断言检查“这里一定成立”,快速定位逻辑错误 | examples/log_dbg_assert |
| 崩溃调试 | 崩溃调试 | 制造崩溃并把现场(coredump)存入 Flash,离线还原调用栈,定位崩溃位置 | examples/crash |
怎么挑选
- 想让程序“开口说话”:先看 blog 日志,日志分级与过滤是后续所有调试的基础。
- 想省电:看 睡眠模式,PDS/HBN 和唤醒源是低功耗设计的关键。
- 想保存配置或数据:优先 掉电保存(键值对最省事);需要自己管理 Flash 区域再配合 Flash 操作 与 分区表。
- 想定时做某事:看 软件定时器。
- 程序异常、死机、复位:先用 日志断言 加断言定位逻辑错误;真崩溃了用 崩溃调试 分析 coredump;需要主动重启则用 软件重启。
环境准备
所有页面共用同一套编译烧录流程,前提是先搭建好 SDK 开发环境:
编译统一使用 make CHIP=bl616 BOARD=bl616dk(Ai-M62 的 BL616 与 Ai-M61 的 BL618 同系列,统一 bl616),烧录用 make flash CHIP=bl616 COMX=/dev/ttyUSB0(Windows 用 COMx),串口波特率 2000000。
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

