关注+星标公众号,不错过精彩内容
近期在忙着做基于中科蓝讯AB571X芯片的TWS蓝牙耳机开发项目。中科蓝讯的芯片凭借着超高的性价比,可以说在白牌蓝牙耳机市场出货量稳居前列。借着本次项目的机会,完整地跑完了从环境搭建、编译调试到固件烧录的开发全流程,以下分享一下个人开发体验感受。
开发的第一步就是开发环境的搭建,需要准备的工作有:
- IDE:codeblocks20.03(内置MinGW版本)
- 交叉编译工具链 RV32-Toolchain
- SDK代码包
- 烧录调试工具 Downloader
以下安装顺序推荐先安装codeblocks再安装工具链,否则部分电脑环境变量会有设置异常的情况。
1. codeblocks安装

直接一路选择Next默认安装,默认会勾选MinGW开发套件,保持默认选项安装即可。

2.交叉编译工具链RV32-Toolchain安装
直接双击默认安装即可,工具链将默认安装到C:\Program Files (x86)\RV32-Toolchain这个路径下。

3. 工程编译
安装完成之后打开SDK,project/路径下的app.cbp文件打开codeblocks项目工程

点击界面菜单工具栏上的Build或Rebuild完成编译。

烧录调试
烧录及调试芯片需要用到固件烧写器,可以网购CP2102USB转串口模块(需自行在TXRX之间串200欧的电阻),或联系原厂或代理商购买Xlink烧写器。

烧录器与芯片USB或串口连接,打开下载及调试软件Downloader.exe,点击文件夹按钮,选择对应工程的dcf文件。

dcf目录中有个Setting文件夹,专门存放用户的配置文件。

不同的项目可以根据配置文件来定制不同的功能,这里是可视化选项工具配置,可以有蓝牙配置、系统板级配置、按键配置、资源配置等。对刚开始没有接触过代码的工程人员开发会比较友好。

dcf文件及配置选择完毕之后点击开始按键便可以进行烧录扫描,等耳机上电就绪即可进行下载烧录了。

下载完成后一般芯片会自动开始运行程序代码,出现开机信息代表烧录完成。

SDK说明
- Maskrom:在运行中不可重复擦写,主要存放系统相关代码。
- Common RAM:系统上电时候CPU会把部分FLASH代码加载到Common RAM区中运行,Common RAM区空间较小,一般存放中断、高优先级线程等效率要求高的代码。
- Cache RAM:Cache中的代码是运行过程中需要的时候才会从Flash中加载过来,容量大,但运行效率比Common RAM低,频繁加载会增加功耗。一般存放对实时性要求没那么高的代码函数。

在函数前面带有.com_text加段名的就是Common RAM中运行的函数

SDK中不加段名或带有.text段名的.flash段是运行在Cache RAM中的Flash函数


SDK 架构分为应用层和底层库两部分:
- 应用层:供客户开发使用,位于projects/、modules/、bsp/等目录。
- 底层库:封装成.a静态库,提供API接口给应用层调用。
底层库一般又包含以下部分:
- btstack:蓝牙基带、协议栈
- platform:平台相关硬件驱动(ADC、DAC、电源等)
- voice:通话算法相关(声加算法、自研算法等)
- driver:SD、USB相关驱动
- effects:音效相关算法
- codec:解码库,包含AAC、SBC、MP3等

优缺点简评
- 开发环境搭建简单:拿到安装包直接一路默认Next安装即可。
- 功能完整性:蓝牙/TWS/音频/充电/GUI/OTA覆盖,基本实现开箱即用,代码轻量化,易上手。
- 配置方式:通过Downloader进行可视化的配置,纯宏定义裁剪,简单易懂,不需要修改底层代码。
- BSP驱动完善:驱动接口统一,SARADC按键、I2C、UART等均有成熟实现。
- TWS支持:双耳同步、配对、共享均有参考可以实现。
- 架构清晰:应用层与底层库分离,底层库职责明确,方便使用。
- 代码可读性:大量使用xxx_cb全局配置结构体,修改需谨慎。
- Comm RAM限制:公共区空间较小,中断和高优先级函数的分配需谨慎。
- 开源程度:libs/目录中为预编译的.a文件,蓝牙核心功能不开源(吐槽一下:几乎所有芯片平台都一样)
不同平台开发体验对比
个人对不同芯片的开发体验以下几个维度进行简单对比:



------------ END-----------
关注我,分享更多蓝牙耳机软件开发内容
夜雨聆风