AB1568蓝牙耳机开发实战:启动链路、ANC调试与NVkey固化避坑指南 简介这份PDF资料面向从事Airoha洛达AB1568蓝牙耳机固件与应用开发的工程师系统梳理该芯片平台从底层启动到上层功能实现的开发要点适合具备一定嵌入式与蓝牙协议基础、希望快速上手或查漏补缺的中级开发者。压缩包内为1个PDF文件约9.58MB内容以工程分析为主线涵盖上电后执行函数、mk文件中的宏定义、app活动行为开启、ANC模式切换、LED呼吸灯样式修改、充电参数监测、超时时间与事件收发删除、Airoha API参考、回调注册调用、自动关机与配对时间配置、开机提示电量、清除配对列表、链路丢失重连、UI Shell框架、SideTone与音频路径设置、DUT模式测RF、硬件复位及PEQ设定等模块目录结构清晰便于按主题检索。已有374人学习可作为开发过程中的查阅手册与功能实现参考。1. 拿到 AB1568 headset 工程后先搞清楚它到底能干什么如果你手上有一份 Airoha AB1568 蓝牙耳机的 headset 工程源码打开后看到一堆apps、mk、activity、nvkey目录第一反应大概率是懵的。这份工程分析资料的价值就在于它把从 bootloader 上电到 ANC 切换、从宏定义位置到 FOTA 更新 NVkey 的整条链路拆成了三十多个可查的点。它不是一份 API 手册而是一份“照着做就能跑通”的工程笔记。适合谁适合已经拿到 AB1568 开发板或头戴耳机样机、需要做 ANC 调试、按键行为定制、产测模式配置的嵌入式蓝牙开发人员。新手可以按章节顺序跟熟手可以直接跳到 ANC 参数固化或 NVkey 解析那几节。下面我按“工程怎么跑起来 → 功能怎么改 → 坑在哪”的顺序把这份资料里真正能落地的部分拆开讲。2. 从 bootloader 到 activity工程启动链路与宏定义定位2.1 上电后到底先跑哪个 mainAB1568 的启动不是一上来就进你的应用代码。上电后先执行的是apps目录下 bootloader 的main函数这里有一个条件编译的坑BL_FOTA_ENABLE这个宏必须在 GCC 目录下的 mk 文件里定义bl_fota_process函数才会被编译进去。也就是说如果你发现 FOTA 相关代码“写了但没生效”先别怀疑逻辑去查这个宏有没有开。bootloader 跑完后才跳到apps下对应工程earbuds或headset的main函数接着apps_inits函数初始化各种应用模块。这个顺序意味着你在应用层加的初始化代码一定是在 bootloader 完成之后才执行的。如果某个外设在 bootloader 阶段就被配置过应用层再配一次可能会冲突这是排查外设异常时第一个要看的地方。2.2 宏定义在哪个 mk 文件里别靠猜工程里 GCC 目录下有一堆 mk 文件宏到底定义在哪个文件里取决于你编译的是哪个工程。资料里给了一个很实用的办法先用命令列出编译不同工程时调用的 mk 文件。# 在工程根目录执行列出各工程对应的 mk 文件 ./build.sh list执行后能看到类似ab1568_evk的headset_ref_desgin工程调用的是feature_68_evk文件。打开这个文件里面就是当前工程生效的宏定义集合。你要加新宏也加在这里。这里有个血泪经验不要直接在代码里#define一个和 mk 文件里同名的宏编译器会给你 warning但很多人忽略后调试半天最后发现是两处定义打架。常见做法是统一在feature_68_evk.mk里管理代码里只做#ifdef判断。2.3 activity 堆和事件分发UI Shell 的骨架apps_inits里包含了所有活动行为的初始化。ui_shell_start_activity函数的作用是给一个活动在活动堆里申请空闲 item。app_preproc_activity_proc是主进程负责管理和调配其它子进程比如app_home_screen_idle_activity_proc。开机后系统会开启很多不同的进程每个进程里有不同的事件组。系统产生一个事件时会把事件抛出去所有进程都能监听到但只有事件属于自己的那个进程才会处理。这套机制类似一个个 UI 界面你处于某个 activity 时发生的事件就由这个 activity 处理。比如在 home_screen 状态下能处理的事件是有限集合。理解这一点很关键——你加了一个按键事件但没反应很可能不是按键没配好而是当前 activity 根本没监听这个事件组。排查时先确认当前 activity 的 event group 里有没有你的事件 ID。3. ANC 模式切换从按键行为到滤波器参数落地3.1 音频通路与四种 ANC 模式的对应关系AB1568 的音频通路分 Line-in 和 BT 两种。ANC 用 FF 麦前馈和 FB 麦反馈实现Configtool 上有三种参数ANC、FBC、Passthrough其中 ANC 包含 FF 和 FBFBC 是 FB 的补偿。硬件上 4 个麦克风用于降噪1 个主麦负责说话2 个振动喇叭加 2 个声音喇叭。音频降噪用 FF 和 FB通话降噪用 talk 麦和 FF。目标是在 home_screen 状态下用按键切换 ANC 模式。按键事件进入_proc_key_event_group处理这里需要MTK_ANC_ENABLE宏开启去feature_68_evk.mk确认已开。所有 ANC 事件行为都调用app_home_screen_process_anc_and_pass_through函数处理。按键行为key_action有四个值key_action 值行为含义KEY_PASS_THROUGH通透模式开和关KEY_ANCANC 开和关KEY_SWITCH_ANC_AND_PASSTHROUGH全关 → 通透开 → ANC 开KEY_BETWEEN_ANC_PASSTHROUGH通透开和 ANC 开之间切换按键行为到key_action的映射在customerized_key_config.c文件里配。这里对应 Configtool 的 UI 行为改完要重新编译才生效。3.2 三连击有提示音但没降噪效果问题出在参数没写进去资料里记录了一个非常典型的翻车现场配好三连击 POWER 键有提示音但 ANC 没效果。原因是用 Configtool 打开工程的download文件夹发现 ANC 模式里根本没有调整过的参数。也就是说按键逻辑通了但滤波器参数是空的。解决路径是把声学调好的 ANC 参数nvr 文件通过 Configtool 的 Import NVR 功能导入工程或者直接在 tool 上调整。然后先 Write NV 再 Reset把 FF、FB、FBC 和 AiroThru 参数写入耳机。写完后再循环三连击能听出不同 ANC 模式的降噪差异才算真正使能成功。ANC 执行代码的逻辑是KEY_SWITCH_ANC_AND_PASSTHROUGH改变变量target_anc_type和target_filter_id的值再传入app_anc_service_enable函数执行。看切换时的 log过滤anc_result能看到三个模式循环切换。ANC 默认滤波器AUDIO_ANC_CONTROL_ANC_FILTER_DEFAULT是值为 1 的枚举PassThrough 默认滤波器AUDIO_ANC_CONTROL_PASS_THRU_FILTER_DEFAULT是值为 9 的枚举。3.3 把 ANC 参数固化到代码Special_Export 与 nvkey.xml 的对应参数调好后只存在 download 文件里换台机器编译就丢了。要固化到代码流程是这样的先 clean 再 build 生成最新 download 文件然后用 Configtool 打开 download导入声学 NVR 文件再用 Special_Export 导出变更。导出会生成 4 个文件如果用 Save 方式保存成 download 文件则生成 3 个文件其中 syskey 和 bin 文件是一致的。有一部分 NVkey 被保存到filesystem.bin里。XML 和 bin 文件用在量产程序编译。编译工程代码时用多个 XML 文件一起编译生成 bin 文件以ab1568_evk为例xml 1 有 7 个 KeyIDxml 2 有 4 个 KeyIDxml 3 有剩下的所有 KeyID。把 Special_Export 导出的syskey.xml里变更的参数一一更新到这三个nvkey.xml文件即可。注意一个细节syskey.xml里有的 keyID在nvkey.xml里不一定有没有的就添加有的就替换。ANC 参数的 keyID 在0xEE00~0xEEFF范围这些在nvkey.xml里原本没有需要手动补。同时替换filesystem.bin文件重新编译生成 download用 Configtool 打开确认 ANC 参数变成了 nvr 文件的配置才算固化成功。3.4 Component Gain 的 NVR 解析高低字节反转别搞错ANC Default Setting 里有个 Component Gain 校准NVR 解析容易翻车。比如0xE1E5 10FF 1400 D8DC D8DC高字节在前低字节在后。FF(10FF)对应 -2.4dBcomponent gain 是 -240解析时要把前后位反转10FF → FF10十六进制转十进制再减去 65536 得到正确值。FB(1400)对应 0.2dBcomponent gain 是 20反转1400 → 0014十六进制转十进制直接得到正确值。正负值的处理方式不同这一步搞反了增益就全错降噪效果自然不对。4. 事件、超时与电源管理那些容易配漏的细节4.1 ui_shell_send_event 与 remove_event 的配对使用ui_shell_send_event是发送事件的核心函数ui_shell_remove_event用来删除事件ui_shell_init_input_msg负责接收事件消息。这三个函数构成事件管理的闭环。常见误用是只 send 不 remove导致事件队列里堆积过期事件表现为某个功能“偶尔触发两次”或者“延迟响应”。我一般会在 activity 退出时统一清理该 activity 注册的事件而不是依赖超时自动回收。超时时间设置和自动关机配置是节能管理的一部分。自动关机配置在资料里有专门一节配对时间设置则影响用户连接体验。开机提示电量功能需要和电量监测机制整合读取电池电压电流后判断是否播报。这些配置项分散在不同文件里改的时候建议列一个清单逐项确认别改了一个忘了另一个。4.2 清除配对列表与链路丢失重连清除配对列表用于隐私保护和重新配网场景链路丢失重连则决定耳机断连后的行为。这两个功能在代码里是独立的模块但实际使用中会互相影响清除配对列表后如果重连逻辑还在跑可能会出现反复尝试连接已清除设备的情况。排查时先看清除操作有没有正确通知到重连模块。4.3 SideTone、PEQ 与通话降噪的配置边界SideTone 设置影响通话时自己听到自己声音的量PEQ 设定方法用于音效调校通话降噪及 iGO 算法、ENC 通话降噪是通话场景的降噪链路。这几项和 ANC 是不同链路ANC 管听音降噪ENC 管通话降噪别把参数配串了。音频路径设置决定了 Line-in 和 BT 通路的走向改之前先画清楚信号流否则调半天发现改的是另一条路。5. 避坑与排查五个真实踩过的坑5.1 FOTA 代码不生效现象写了 FOTA 相关逻辑编译通过但运行没反应。原因BL_FOTA_ENABLE宏没在 GCC 目录的 mk 文件里定义bl_fota_process根本没被编译进去。解决去feature_68_evk.mk确认宏已开clean 后重新 build。5.2 ANC 按键有提示音无降噪现象三连击有提示音但听不出降噪差异。原因ANC 滤波器参数没写入download 文件里 ANC 模式参数为空。解决Import NVR 导入声学参数Write NV 后 Reset确认 log 里anc_result有模式切换记录。5.3 宏定义冲突导致行为异常现象某功能时好时坏或者编译有 warning 但被忽略。原因代码里#define了和 mk 文件同名的宏两处定义不一致。解决统一在 mk 文件管理宏代码里只做条件判断编译时留意 warning。5.4 NVkey 固化后参数没变现象按流程改了nvkey.xml和filesystem.bin重新编译后 ANC 参数还是旧的。原因syskey.xml里的 keyID 在nvkey.xml里不存在时没手动添加或者filesystem.bin没同步替换。解决逐项核对 keyID0xEE00~0xEEFF范围的要手动补进nvkey.xmlbin 文件一起替换。5.5 Component Gain 解析出错误增益值现象降噪效果和预期差很多增益明显不对。原因NVR 高低字节反转后正负值处理方式搞混负值忘了减 65536。解决负值反转后减 65536正值反转后直接转十进制用资料里的0xE1E5例子对照验证。6. 进阶验证用 DUT 模式和 AT 命令把改动锁死改完 ANC 和 NVkey 后怎么确认真的生效而不是“听起来差不多”资料里给了两条验证路径。第一条是 DUT 模式测 RF配合产测测试模式做射频指标确认。第二条是 ATCMD 命令和 RACE/RAW 指令通过 USB 口通信打 log直接看寄存器值和 NVkey 读取结果。读取耳机现有 NVkey 是验证固化的关键一步。改完参数后用 AT 转 Race 指令格式发读取命令对比返回值和你写入的值是否一致。这里有个习惯我一直在用每次改完 NVkey先不急着听效果先用读取命令把关键 keyID 的值拉出来对一遍确认写入成功再去做主观听感测试。因为听感受环境影响大玄学成分不少但寄存器值不会骗人。设置设备信息和 SDK 的 NVKEY 管理也在这条链路上。设备信息写错会导致配对名异常NVKEY 读写权限配错会导致参数“写了但读不到”。AP 测试和硬件复位功能则是产测阶段的收尾项硬件复位要确认复位后 NVkey 不丢失否则量产时会出现“复位一次参数回默认”的问题。从那以后我每次改完 ANC 参数都强制走一遍“Special_Export → 更新 nvkey.xml → 替换 filesystem.bin → clean build → 读取 NVkey 比对 → 主观听感”的完整流程少一步都可能留下后悔药。希望这份拆解帮到你少走几个我走过的弯路。本文还有配套的精品资源点击获取