第一次接触BW16模组时,最让人头疼的就是环境搭建。这个基于RTL8720DN芯片的模组确实有些特殊——它采用双核架构(KM0和KM4),这意味着我们需要分别编译两个内核的固件。不过别担心,跟着我的步骤走,半小时内就能搞定基础环境。
先来解决依赖问题。在Ubuntu 20.04上(其他Linux发行版也类似),需要安装这些基础工具:
bash复制sudo apt-get update
sudo apt-get install -y git wget libc6-i386 lib32ncurses5 make bc gawk ncurses-dev
这里有个坑要注意:lib32ncurses5这个32位兼容库必不可少,否则编译时会报奇怪的链接错误。我之前在纯净的Ubuntu Server上就栽过跟头,折腾了半天才发现是这个依赖没装。
获取官方SDK推荐用git克隆:
bash复制git clone https://github.com/ambiot/ambd_sdk.git
cd ambd_sdk
sudo chmod -R 777 . # 解决权限问题
如果网络不好,也可以直接从安信可官网下载压缩包。记得检查SDK版本,我测试时用的是2023年6月的v4.1b版本,这个版本对5G WiFi的支持最稳定。
KM0核主要负责低功耗运行和基础外设控制。进入编译目录:
bash复制cd project/realtek_amebaD_va0_example/GCC-RELEASE/project_lp
make all -j$(nproc) # 启用多核编译
编译成功后会在asdk/image/下生成km0_boot_all.bin。如果遇到如下错误:
code复制error: selected processor does not support...
可能是交叉编译工具链的问题,建议检查Makefile中的CROSS_COMPILE路径是否正确指向了arm-none-eabi-gcc。
KM4核才是主处理器,负责运行应用程序:
bash复制cd ../project_hp
make all -j$(nproc)
这里会生成两个关键文件:km4_boot_all.bin和km0_km4_image2.bin。后者是最终要烧录的合并镜像,包含了双核的完整固件。
我实测发现编译时常遇到的两个问题:
update-alternatives设置默认版本三个关键bin文件的作用:
km0_boot_all.bin:KM0核启动引导程序(约50KB)km4_boot_all.bin:KM4核主程序(约500KB)km0_km4_image2.bin:合并后的完整镜像(约1MB)我习惯用这个脚本自动收集镜像文件:
bash复制#!/bin/bash
OUT_DIR="../output_$(date +%Y%m%d)"
mkdir -p $OUT_DIR
cp project_lp/asdk/image/km0_boot_all.bin $OUT_DIR/
cp project_hp/asdk/image/km4_boot_all.bin $OUT_DIR/
cp project_hp/asdk/image/km0_km4_image2.bin $OUT_DIR/
echo "镜像已保存至 $OUT_DIR"
虽然Linux下暂时没有官方烧录工具,但Windows下的烧录流程其实很简单:
硬件连接:
GPIOA_7(TX)与GPIOB_1短接,GPIOA_8(RX)与GPIOB_2短接使用安信可烧录工具:
进入下载模式:
Burn键Reset键Burn键有个小技巧:如果多次烧录失败,可以尝试降低波特率到921600。我在某批次的BW16模组上就遇到过这个问题,应该是USB转串口芯片的兼容性问题。
烧录完成后,用串口调试工具查看日志输出。正常启动时应该能看到类似信息:
code复制[2:19:11] #interface 0 is initialized
WIFI initialized
Available heap: 0x26660
如果出现FAST_CONNECT profile is empty提示是正常的,说明WiFi还未配置。
常见问题解决方案:
无日志输出:
WiFi连接不稳定:
wifi_conf.c调整发射功率固件启动失败:
km0_km4_image2.bin文件大小是否正常(约1MB)platform_opts.h中的CPU_CLK)对于深度开发者,建议启用JTAG调试接口。BW16预留了SWD接口(GPIO18/SWD_CLK, GPIO19/SWD_DIO),配合OpenOCD可以实现单步调试。我在排查一个WiFi驱动bug时,就是通过JTAG发现是DMA缓冲区对齐问题导致的异常。