# Windows 下搭建 MAX78000FTHR 语音识别开发环境
本文使用 Analog Devices 官方 MSDK 中的 kws20_demo,在 MAX78000FTHR 开发板上实现离线英文关键词识别。
示例能够识别 20 个英文关键词:
up, down, left, right, stop, go, yes, no, on, off, one, two, three, four, five, six, seven, eight, nine, zero
其他语音和环境噪声会被分类为 Unknown。
官方资料:
1. 硬件与软件环境
本次使用的环境:
操作系统:Windows 11 Linux 环境:Ubuntu 24.04 WSL2 开发板:MAX78000FTHR 编译器:Arm GNU Toolchain 13.2.1 构建工具:GNU Make 4.3 下载器:板载 DAPLink 调试串口:115200 8-N-1
开发板通过 USB 连接后,会出现:
一个名为 DAPLINK 的移动磁盘;
一个 USB 串口,例如 COM5;
一个 CMSIS-DAP 调试接口。
可以打开 DAPLink 磁盘中的 DETAILS.TXT 确认板型:
URL: http://www.maximintegrated.com/max78000fthr
2. 安装 WSL2
以管理员身份打开 PowerShell:
wsl --install -d Ubuntu-24.04
安装完成后重启 Windows,然后检查 WSL 状态:
wsl --list --verbose
正常情况下可以看到:
NAME STATE VERSION Ubuntu-24.04 Stopped 2
如果系统中已经安装 Ubuntu,则无需重复安装。
3. 获取 MSDK 源码
建议把工程放在不包含空格和中文的路径下,例如:
D:\Code\MAX78000
进入该目录:
cd D:\Code\MAX78000
拉取官方 MSDK:
git clone --depth 1 --recurse-submodules --shallow-submodules ` https://github.com/analogdevicesinc/msdk.git msdk
语音识别示例位于:
msdk\Examples\MAX78000\CNN\kws20_demo
如果 GitHub 网络不稳定,也可以下载仓库 ZIP 或使用官方 MSDK 安装器,然后确保 下面两个目录完整存在:
msdk\Examples msdk\Libraries
4. 安装 Arm 交叉编译工具链
本文使用 WSL 中的 Ubuntu 软件源安装工具链。
执行:
wsl -d Ubuntu-24.04 -u root -- apt-get update
安装 GNU Make、Arm GCC 和 Newlib:
wsl -d Ubuntu-24.04 -u root -- env ` DEBIAN_FRONTEND=noninteractive ` apt-get install -y --no-install-recommends ` make gcc-arm-none-eabi libnewlib-arm-none-eabi
这里使用 --no-install-recommends,可以避免下载体积很大的、当前 C 固件不需要的 C++ 标准库。
检查版本:
wsl -d Ubuntu-24.04 -- arm-none-eabi-gcc --version wsl -d Ubuntu-24.04 -- make --version
本次安装结果为:
arm-none-eabi-gcc 13.2.1 GNU Make 4.3
5. 配置开发板型号
打开:
msdk\Examples\MAX78000\CNN\kws20_demo\project.mk
MAX78000FTHR 使用的板级支持包名称为:
BOARD=FTHR_RevA
也可以不修改文件,直接在编译命令中传入:
BOARD=FTHR_RevA
如果使用的是大尺寸 MAX78000EVKIT,则应改为:
BOARD=EvKit_V1
6. 确认麦克风识别模式
打开示例的 main.c,确认以下宏处于启用状态:
#define ENABLE_MIC_PROCESSING
它表示从开发板麦克风实时采集音频。
如果注释掉该宏,程序会使用头文件中的测试向量,而不是实时麦克风:
// #define ENABLE_MIC_PROCESSING
7. 编译 KWS20 语音识别示例
Windows 的:
D:\Code\MAX78000
在 WSL 中对应:
/mnt/d/Code/MAX78000
执行编译:
wsl -d Ubuntu-24.04 -- bash -lc ` 'cd /mnt/d/Code/MAX78000/msdk/Examples/MAX78000/CNN/kws20_demo && make -j$(nproc) BOARD=FTHR_RevA'
编译成功后可以看到类似结果:
Memory region Used Size Region Size %age Used FLASH: 380 KB 512 KB 74.22% SRAM: 38112 B 128 KB 29.08%
生成的 ELF 文件位于:
msdk\Examples\MAX78000\CNN\kws20_demo\build\max78000.elf
8. 生成 DAPLink 所需的 HEX 文件
使用 arm-none-eabi-objcopy 将 ELF 转换为 Intel HEX:
wsl -d Ubuntu-24.04 -- arm-none-eabi-objcopy ` -O ihex ` /mnt/d/Code/MAX78000/msdk/Examples/MAX78000/CNN/kws20_demo/build/max78000.elf ` /mnt/d/Code/MAX78000/msdk/Examples/MAX78000/CNN/kws20_demo/build/max78000.hex
最终生成:
msdk\Examples\MAX78000\CNN\kws20_demo\build\max78000.hex
9. 通过 DAPLink 烧录
开发板连接电脑后,会出现名为 DAPLINK 的磁盘。假设盘符是 E:,执行:
Copy-Item ` .\msdk\Examples\MAX78000\CNN\kws20_demo\build\max78000.hex ` E:\max78000-kws20.hex
复制过程可能持续几十秒。烧录完成后 DAPLink 会自动重新挂载,并复位 MAX78000。
检查是否存在:
E:\FAIL.TXT
如果没有 FAIL.TXT,通常表示烧录成功。
还可以查看:
E:\DETAILS.TXT
其中的 Remount count 会在烧录后增加。
10. 打开串口监视器
串口配置:
波特率:115200 数据位:8 校验位:None 停止位:1 流控:None
可以使用 PuTTY、MobaXterm、串口助手,也可以使用 PowerShell 脚本。
程序启动后应输出:
ANALOG DEVICES Keyword Spotting Demo Ver. 3.2.3 ***** Init ***** *** I2S & Mic Init *** *** READY ***
MAX78000FTHR 上:
SW4 是复位按键;
SW1/PB1 用于启动或继续语音识别 Demo。
运行串口监视器后按下 SW1,然后对着板载麦克风说关键词。
识别成功时会输出:
Detected word: YES (94.2%)
没有匹配到关键词时会输出:
Detected word: Unknown
本次板上验证中,CNN 单次推理时间约为:
CNN Time: 1849 us
11. 一键脚本
当前工作区已经准备好以下脚本:
# 安装 WSL 编译环境 .\scripts\setup-wsl.ps1 # 编译并生成 ELF/HEX .\scripts\build.ps1 # 编译、烧录并捕获启动日志 .\scripts\flash.ps1 # 持续监视识别结果 .\scripts\monitor.ps1
如需清理后重新编译:
.\scripts\build.ps1 -Clean
12. 常见问题
12.1 Git Clone 长时间停在零字节
可以改用官方仓库 ZIP,或者配置 GitHub 代理。只要 Examples 和 Libraries完整,KWS20 示例就可以构建。
12.2 找不到 arm-none-eabi-gcc
检查 WSL 中是否安装成功:
wsl -d Ubuntu-24.04 -- which arm-none-eabi-gcc
预期输出:
/usr/bin/arm-none-eabi-gcc
12.3 编译时提示 MAXIM_PATH is not set
如果工程仍位于标准 MSDK 目录结构中,Makefile 会自动推导 MSDK 根目录,这条警告 通常不影响编译。
也可以显式指定:
wsl -d Ubuntu-24.04 -- bash -lc ` 'cd /mnt/d/Code/MAX78000/msdk/Examples/MAX78000/CNN/kws20_demo && MAXIM_PATH=/mnt/d/Code/MAX78000/msdk make BOARD=FTHR_RevA'
12.4 串口没有输出
依次检查:
串口是否为 DAPLink 对应的 COM 口;
波特率是否为 115200;
是否有其他串口软件占用端口;
先打开串口,再按 SW4 复位;
USB 是否连接到板子的 CN1 USB/PWR 接口。
12.5 串口输出乱码
确认配置为:
115200、8 位数据位、无校验、1 位停止位、无流控
建议先关闭其他串口工具,再重新打开端口并复位开发板。
13. 后续开发方向
官方 KWS20 示例属于离线关键词识别,并不是完整的连续语音转文字系统。
如果要识别自定义中文词语,后续流程是:
确定中文唤醒词或命令词表;
采集不同说话人的音频;
加入背景噪声和未知词数据;
使用 ai8x-training 训练量化模型;
使用 ai8x-synthesis 生成 MAX78000 CNN 配置和权重;
替换示例中的 cnn.c、cnn.h 和 weights.h;
重新编译、烧录并测试准确率。
我要赚赏金
