杰理 SDK 文档中心
首页
首页
  • 项目概览

    • AD16N 系列芯片与 SDK 能力总览
  • 快速开始

    • 环境搭建与编译工具链
    • 编译构建指南
    • 烧录与固件升级
  • SDK 工程架构

    • SDK 目录结构与模块分层
    • 构建系统与批处理工具
    • BSP 板级支持包
  • mbox_flash 小音箱应用

    • 应用初始化与启动流程
    • 应用配置系统
    • 按键、UI 与用户交互
  • 音频子系统

    • 音频解码框架与调度
    • 音频格式解码器实现
    • MIDI 合成与播放
    • 音频编码与录音
    • EQ/DRC 与音效处理
    • DAC/ADC 音频接口与采样
  • 存储与文件系统

    • 媒体 IO 抽象层 MIO
    • 存储设备驱动
    • 文件系统支持
  • 平台系统库

    • 系统基础服务
    • CPU 平台与运行库
    • 固件升级与更新机制
    • 蓝牙与扩展连接接口
  • 电源与低功耗管理

    • 电源管理与低功耗设计
    • 锂电池充电管理
  • 硬件与文档参考

    • SDK 文档中心与版本发布记录
    • 芯片数据手册与硬件设计参考

烧录与固件升级

本文档介绍 fw-AD16N_GP-MCU_SDK 的固件烧录(Flashing)与固件升级(Upgrade/OTA)机制,涵盖首次烧录、编程模式、USB 升级工具、生产烧写、OTA 升级路径以及相关配置,帮助开发者将编译产物安全地写入 AD16N 系列芯片并在产品生命周期内完成固件更新。

Purpose and Scope

本页面聚焦于"把固件放进芯片"的完整链路:编译产物(固件文件)→ 烧录工具 → 目标板(编程模式),以及量产场景的生产烧写和产品端的 OTA 升级方式。

以下相关主题属于其他目录页,不在本页展开:

  • 环境搭建与工具链安装(交叉编译工具链、clang、Code::Blocks):见"环境搭建"页
  • 编译流程与固件产物生成(make、.cbp 工程、post_build/ 产物):见"编译指南"页
  • 应用功能配置(app_config.h 功能开关):见"配置说明"页

Overview

AD16N 系列是杰理科技面向语音玩具、小音箱、通用 MCU 的音频 SoC。与普通 MCU 不同,AD16N 的存储形态分为内置系统 Flash(如 AD162A4/AD165A4 等带 4 后缀型号内置 4Mbit Flash)与外挂系统 Flash(AD16xA0 等型号通过 SPI Flash 控制器访问外置 Flash),详见 doc/README.md 选型表。这意味着烧录路径的选择(USB 直连、USB 升级工具、生产烧写器)与目标型号的 Flash 形态密切相关。

烧录与升级在 AD16N 生态中分为三个层次:

层次场景工具/方式说明
首次烧录开发调试USB 升级工具目标板进入编程模式后由上位机写入固件
生产烧写量产一拖二 / 一拖八烧写器支持裸片烧写,由代理商提供
OTA 升级产品在用户手中U 盘 / SD 卡 / 串口自定义双备份固件升级机制

SDK 中固件升级(update)相关代码以预编译库 + 头文件形式提供,位于 sdk/apps/include_lib/update/ 目录,分为 code_v1(升级协议 v1)与 code_v2(升级协议 v2,含 update.ld 链接脚本)两套接口。

烧录与升级总体架构

flowchart TD
    subgraph sg_Build["编译阶段"]
        CBP["AD16N_mbox_flash.cbp<br/>(Code::Blocks / Makefile)"]
        OUT["固件产物<br/>(post_build/ 目录)"]
        CBP -->|"make / Build"| OUT
    end

    subgraph sg_Dev["开发烧录"]
        TOOL["USB 升级工具<br/>(上位机)"]
        USB["USB 连接"]
        MODE["目标板编程模式<br/>(按键+复位 / 工具强制进入)"]
        CHIP["AD16N 芯片<br/>(内置/外置 Flash)"]
        OUT -->|"选择固件"| TOOL
        TOOL -->|"USB"| USB
        USB --> MODE
        MODE --> CHIP
    end

    subgraph sg_Prod["量产烧写"]
        BURNER["一拖二 / 一拖八烧写器"]
        BARE["裸片/空片"]
        OUT --> BURNER
        BURNER --> BARE
    end

    subgraph sg_OTA["OTA 升级"]
        MEDIA["U 盘 / SD 卡 / 串口"]
        DUAL["双备份固件区<br/>(备份A/备份B)"]
        MEDIA -->|"升级包"| DUAL
        DUAL --> CHIP
    end

    CHIP -->|"运行期"| sg_OTA

架构说明: 编译阶段产生固件产物后,开发阶段通过 USB 升级工具 + 编程模式写入芯片;量产阶段通过专用烧写器批量写入(可裸片烧写);产品运行期则通过 U 盘/SD 卡/串口将升级包写入双备份固件区,实现 OTA 升级。双备份机制的意义在于:即使升级过程中断电或写入失败,芯片仍可从另一备份区启动,避免产品变砖——这是 README 中"自定义双备份固件升级"的设计意图。

首次烧录(开发调试)

首次烧录是开发阶段最常用的操作,README 第八节给出了标准流程(README.md#L282-L303):

  1. 连接硬件:将开发板通过 USB 或 USB 升级工具 连接到 PC
  2. 进入编程模式:
    • 方式一(USB):按住开发板上的烧录按键,然后复位或重新上电
    • 方式二(USB/UART):通过 USB 升级工具进入编程模式
  3. 打开 USB 升级工具:启动烧录上位机
  4. 选择固件:选择编译生成的固件文件
  5. 开始烧录:点击下载按钮,等待烧录完成

编程模式(Program Mode)

编程模式是烧录的前提。AD16N 支持两种进入方式:

  • 按键 + 复位:按住烧录按键的同时复位或重新上电,芯片上电引导(Boot ROM)检测到烧录请求后停留在编程模式,等待上位机写入
  • 工具强制进入:USB 升级工具通过 USB/UART 通道强制目标进入编程模式,适合没有物理按键的开发板

设计意图:芯片出厂时 Flash 为空或仅含引导代码,因此必须由芯片内部 Boot ROM 支持最低限度的烧录协议;进入编程模式后用户程序尚未运行,USB/串口通道由引导代码接管,保证"空片可烧、坏片可救"。

USB 升级工具

USB 升级工具(上位机软件)是开发阶段的标准烧录入口,其获取与使用方式:

项目说明
工具名称USB 升级工具(强制升级工具)
获取方式官方淘宝链接
使用文档强制升级工具文档
配套配置ISD_CONFIG.INI(INI 配置说明)

注意:烧录前请确保 USB 升级工具正确连接且目标板已进入编程模式。ISD_CONFIG.INI 中可配置烧录相关的 Flash 分区、升级协议版本等参数,详见杰理在线文档。

首次烧录时序

sequenceDiagram
    participant PC as PC 上位机
    participant TOOL as USB 升级工具
    participant CHIP as AD16N 芯片
    participant FLASH as Flash (内置/外置)

    PC->>TOOL: 启动工具、选择固件
    CHIP->>CHIP: 上电/复位,检测烧录按键或工具握手
    Note over CHIP: Boot ROM 进入编程模式
    TOOL->>CHIP: USB 握手,建立烧录会话
    TOOL->>CHIP: 发送固件数据
    CHIP->>FLASH: 擦除并写入目标分区
    FLASH-->>CHIP: 校验完成
    CHIP-->>TOOL: 烧录成功应答
    TOOL-->>PC: 显示烧录完成
    CHIP->>CHIP: 复位,跳转用户程序

时序说明:整个烧录由芯片引导代码主导而非用户程序,因此无论用户固件是否可用,烧录通道始终可用。固件写入后通常包含校验步骤(应答机制),失败时上位机会报错并允许重试。

生产烧写(量产)

量产场景不适用于逐台 USB 烧录,README 明确要求使用杰理生产烧写工具:

量产场景请使用杰理生产烧写工具(一拖二 / 一拖八),支持裸片烧写。详见 一拖二烧写器使用说明 · 一拖八烧写器使用说明

要点:

  • 裸片烧写:烧写器可在芯片贴片前对空片写入固件,无需目标板供电与按键
  • 一拖多:同时烧写多片,提升产线效率
  • 工具获取:烧写器及配套软件由代理商提供,而非公共下载渠道
  • 烧录源:生产烧写与开发烧录使用同一份编译产物(post_build/ 下生成的固件)

设计意图:量产工具链与开发工具链分离,是为了在保证烧录一致性的同时,把"进入编程模式"的硬件交互(按键、复位时序)交由产线治具自动处理,减少人工操作导致的良率损失。

OTA 升级

产品交付到用户手中后,固件更新通过 OTA 完成。README 对 OTA 的定位是:

支持自定义双备份固件升级,常见方式包括 U 盘升级、SD 卡升级、串口升级等。

双备份升级机制

flowchart TD
    START([运行中的固件]) --> CHECK{"检测到升级包?"}
    CHECK -->|"U盘 / SD卡 / 串口"| BACKUP["写入非活动备份区"]
    CHECK -->|"未检测到"| RUN["正常运行"]
    BACKUP --> VERIFY{"校验通过?"}
    VERIFY -->|"是"| SWITCH["切换启动标志<br/>指向新固件"]
    VERIFY -->|"否"| KEEP["保留旧固件<br/>继续运行"]
    SWITCH --> REBOOT([复位启动新固件])
    KEEP --> RUN

双备份的设计意图:Flash 中划分两个固件区(备份 A / 备份 B)。升级时只写非当前运行的备份区,写完校验后再切换启动标志。这样:

  • 升级包写入过程中断电 → 当前固件区未受影响,产品仍可启动
  • 新固件校验失败 → 启动标志不切换,回退到旧固件
  • 新固件启动异常 → 引导代码可回滚到上一备份区

这是"自定义"的含义——分区布局、切换策略均由 SDK 的 update 库与 ISD_CONFIG.INI 配置决定,开发者可根据 Flash 容量(内置 2Mbit/4Mbit 或外挂 Flash)灵活调整。

OTA 传输介质

介质适用场景特点
U 盘(USB MSD)带 USB 口的音箱、故事机用户拷贝升级文件到 U 盘插入即升级
SD 卡插卡类产品升级包随音乐文件一起拷贝
串口(UART)带调试口的设备由上位机通过串口下发升级包

SDK 中的升级库结构

SDK 以"头文件 + 预编译库"形式提供升级能力,目录结构如下(sdk/apps/include_lib/update/):

文件版本作用(依据文件命名)
code_v1/update_v1.h升级协议 v1v1 版升级 API 头文件
code_v2/update.h升级协议 v2v2 版升级主 API 头文件
code_v2/dev_update.h升级协议 v2设备端升级接口头文件
code_v2/update.ld升级协议 v2升级代码段的链接脚本(指定升级代码的 Flash 布局)

说明:include_lib/ 中的库以预编译 .a 形式提供,头文件定义了调用接口;具体 API 签名与调用示例见随 SDK 发布的《AD16N_开源SDK手册_V1.2.pdf》(doc/ 目录)。本仓库未包含升级引擎的源码实现,升级协议细节由预编译库封装。

update.ld 的存在说明 v2 升级代码在链接期被放置在专门的 Flash 段中——这是双备份机制在链接层面的落地:升级代码本身需要固定地址,才能在不同固件版本间保持兼容。

固件产物与烧录源

编译成功后固件生成在 post_build/ 目录(README.md#L252-L257):

编译成功后在 post_build/ 目录下生成固件

该固件是烧录与升级的唯一"源":开发烧录、生产烧写、OTA 升级包均基于它生成。因此先编译、后烧录是固定顺序;烧录前确认固件生成时间戳与源码版本一致,可避免"烧了旧固件"的常见问题。

固件类型与 Flash 适配

AD16N 芯片分内置 Flash 与外挂 Flash 两种形态(doc/README.md):

  • 内置 Flash 型号(如 AD162A4、AD165A4、AD160A4、AD166A4,内置 2Mbit/4Mbit):烧录目标为芯片内置 Flash,无需外接存储
  • 外挂 Flash 型号(如 AD162A0、AD165A0 等 0 后缀):通过 SPI Flash 控制器访问外置 Flash,烧录时需保证外挂 Flash 已焊接且型号受支持

选择芯片型号通过 Makefile target 或 app_config.h 配置完成,烧录工具读取固件头中的型号信息决定烧录算法,因此编译时选错芯片型号会导致烧录失败或运行异常。

配置选项

烧录与升级涉及两类配置:编译期配置(决定固件内容)与烧录工具配置(决定写入行为)。

编译期配置

配置项位置说明
芯片型号Makefile target / sdk/apps/app/src/mbox_flash/app_config.h决定固件头与 Flash 布局,选错会导致烧录失败
功能开关app_config.h影响固件大小,进而影响能否装入目标 Flash 分区
Flash 类型(内置/外置)app_config.h外置 Flash 通过 SPI Flash 控制器访问(README.md#L319-L320)
升级协议版本链接 update 库版本(v1/v2)通过 include_lib/update/code_v1 或 code_v2 选择

烧录工具配置

配置项类型说明
ISD_CONFIG.INI烧录工具配置文件配置 Flash 分区、烧录参数等,见 INI 配置说明

ISD_CONFIG.INI 由 USB 升级工具/生产烧写器读取,决定了固件写入芯片的物理分区布局;双备份升级的分区规划同样与之相关。该文件不属于本仓库源码,具体字段请查阅杰理在线文档。

使用示例

环境验证(烧录前检查)

# 验证工具链是否安装成功
clang --version

Source: README.md#L102-L105

烧录前先确认编译工具链可用——工具链缺失时无法产出固件,烧录自然无从谈起。

获取源码并编译固件

git clone https://gitee.com/Jieli-Tech/fw-AD16N.git
cd fw-AD16N/sdk

Source: README.md#L126-L129

# Windows 用户
双击 sdk/make_prompt.bat 打开命令行环境

# 编译
make -j4

# 显示编译详情
make VERBOSE=1 -j4

Source: README.md#L156-L164

编译成功后,post_build/ 目录下的固件即为烧录输入(README.md#L252-L257)。

烧录操作(README 标准流程)

1. 连接硬件:开发板通过 USB 或 USB 升级工具连接到 PC
2. 进入编程模式:
   - 方式一(USB):按住烧录按键,然后复位或重新上电
   - 方式二(USB/UART):通过 USB 升级工具进入编程模式
3. 打开 USB 升级工具,选择编译生成的固件
4. 点击下载按钮,等待烧录完成

Source: README.md#L284-L292

失败模式与边界情况

以下失败场景与处理方式基于 README 中的明确说明与烧录机制的必然约束:

失败模式现象原因与处理
未进入编程模式上位机无法连接目标板未按住烧录按键或未复位;改用 USB 升级工具强制进入编程模式(README.md#L287-L289)
烧录前未连接工具下载失败README 提示"编译前请确保 USB 升级工具正确连接且目标板已进入编程模式"(README.md#L166)
芯片型号不匹配烧录失败或运行异常Makefile target / app_config.h 与实物芯片不一致(README.md#L278)
Flash 形态选错内置/外置 Flash 访问异常需在配置中指定 Flash 类型,外置 Flash 经 SPI 控制器访问(README.md#L319-L320)
OTA 写入中断新固件不可用双备份机制保证旧固件区不受影响,可回退启动
Linux 编译烧录脚本报错需重写 download_sh.c 适配 Linux 环境(README.md#L91)

并发与一致性

  • 烧录过程是独占式的:编程模式下用户程序不运行,不存在与业务逻辑的并发问题;但烧录期间断电可能产生半写入状态,因此量产产线应保证供电稳定
  • OTA 升级的一致性由双备份 + 启动标志切换保证:写入与切换不是原子的,但任意时刻至少有一个完整可启动的固件区
  • 生产烧写器一拖多烧写时,各通道独立,单通道失败不影响其他通道

扩展与自定义

  • OTA 介质扩展:README 列出的 U 盘/SD 卡/串口是"常见方式",开发者可基于 update 库(code_v2/update.h、dev_update.h)对接其他传输通道(如私有云、BLE)
  • 双备份布局自定义:通过 update.ld 与 ISD_CONFIG.INI 调整固件分区大小与地址,适配不同 Flash 容量
  • 升级协议选择:code_v1 与 code_v2 两套接口并存,兼容不同时期烧录工具/上位机

相关链接

  • README.md — 烧录与升级章节
  • README.md — 环境搭建与工具获取
  • README.md — 编译指南
  • doc/README.md — 芯片选型表(内置/外挂 Flash 差异)
  • sdk/apps/include_lib/update/code_v2/update.h
  • sdk/apps/include_lib/update/code_v2/dev_update.h
  • sdk/apps/include_lib/update/code_v2/update.ld
  • 杰理工具在线文档:USB 强制升级工具 · 一拖二烧写器 · 一拖八烧写器 · ISD_CONFIG.INI 配置
Prev
编译构建指南