# fw-AW31N_BLE_SDK
**Repository Path**: Jieli-Tech/fw-AW31N_BLE_SDK
## Basic Information
- **Project Name**: fw-AW31N_BLE_SDK
- **Description**: Firmware for Generic Bluetooth Low Energy SDK(AW3N series), Support AW31N.
- **Primary Language**: C
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 21
- **Forks**: 8
- **Created**: 2024-04-24
- **Last Updated**: 2026-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[tag download]:https://github.com/Jieli-Tech/fw-AW31N_BLE_SDK/tags
[tag_badgen]:https://img.shields.io/github/v/tag/Jieli-Tech/fw-AW31N_BLE_SDK?style=plastic&logo=bluetooth&labelColor=ffffff&color=informational&label=Tag&logoColor=blue
# fw-AW31N_BT_SDK [![tag][tag_badgen]][tag download]
**杰理 AW31N系列通用蓝牙 SDK 固件程序**
[English](./README-en.md) · [文档中心](https://doc.zh-jieli.com/AW31/zh-cn/master/index.html) · [SDK 版本历史](https://doc.zh-jieli.com/AW31/zh-cn/master/other/version/index.html) · [报告问题](https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK/issues)
---
## 📋 目录
- [一、概述](#一概述)
- [二、支持的芯片与平台](#二支持的芯片与平台)
- [三、环境搭建](#三环境搭建)
- [四、快速开始](#四快速开始)
- [五、工程结构](#五工程结构)
- [六、应用选择指南](#六应用选择指南)
- [七、编译指南](#七编译指南)
- [八、烧录与升级](#八烧录与升级)
- [九、配置说明](#九配置说明)
- [十、常见问题](#十常见问题)
- [十一、社区与支持](#十一社区与支持)
- [十二、认证信息](#十二认证信息)
- [十三、免责声明](#十三免责声明)
---
## 一、概述
`fw-AW31N_BLE_SDK` 是杰理科技为 AW31N 系列芯片提供的通用蓝牙 SDK 固件开发包。本 SDK 基于裸机操作系统,提供完整的蓝牙BLE协议栈和丰富的应用示例,支持以下应用场景:
| 应用类型 | 典型产品 |
|---------|---------|
| **BLE 透传/数传** | 透传, 数据传输, 扫描设备, 广播设备, 适配器, AT模组等 |
| **HID 人机交互** | 遥控器、自拍器、翻页器、键盘、3模鼠标(2.4G/USB能支持到1K回报率)等 |
本仓库包含 SDK Release 版本代码及示例工程,需配合对应命名规则的库文件 (`lib.a`) 和子仓库进行编译。
---
## 二、支持的芯片与平台
### 2.1 芯片系列
| 芯片平台 | 芯片型号 | 适用应用 |
|---------|---------|---------|
| **bd47** | AW312B / AW313A/ AW314A/ AW318A/ AW318B | transfer / hid |
### 2.2 蓝牙协议支持
| 蓝牙规范 | QDID | 状态 |
|---------|------|------|
| Core v5.4 | [QDID 222830](https://launchstudio.bluetooth.com/ListingDetails/193923) | ✅ 已认证 |
---
## 三、环境搭建
### 3.1 前提条件
| 系统 | 说明 |
|------|------|
| **Windows** | ✅ 推荐使用 Code::Blocks IDE 编译 |
| **Linux** | ✅ 支持 Makefile 命令行编译 |
### 3.2 安装编译工具链
1. 下载并安装 **杰理编译工具链**:[下载链接](https://doc.zh-jieli.com/Tools/zh-cn/dev_tools/dev_env/index.html)
2. Linux 用户可从此处下载:[pkgman.jieliapp.com](http://pkgman.jieliapp.com/doc/all)
- 下载后解压到 `/opt/jieli` 目录
- 确保 `/opt/jieli/common/bin/clang` 存在
3. 安装完成后,打开终端/命令提示符验证:
```bash
# 验证工具链是否安装成功
clang --version
```
### 3.3 安装烧录工具
| 工具 | 用途 | 获取方式 |
|------|------|---------|
| **USB 升级工具** | 将固件烧录到目标板 | [申请链接](https://item.taobao.com/item.htm?id=620295020803) · [使用文档](https://doc.zh-jieli.com/Tools/zh-cn/dev_tools/forced_upgrade/index.html) |
| **生产烧写工具** | 量产/裸片烧写 | [使用文档](https://doc.zh-jieli.com/Tools/zh-cn/mass_prod_tools/burner_1tuo2/index.html) |
| **无线测试盒** | 空中升级/射频标定/产品测试 | [申请链接](https://item.taobao.com/item.htm?id=620942507511) · [使用文档](https://doc.zh-jieli.com/Tools/zh-cn/mass_prod_tools/testbox_1tuo2/index.html) |
---
## 四、快速开始
### 4.1 克隆仓库
```bash
git clone https://github.com/Jieli-Tech/fw-AW31N_BLE_SDK.git
或者
git clone https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK.git
cd fw-AW31N_BLE_SDK
```
### 4.2 选择合适的工程
根据你的产品需求选择应用工程:
```
SDK 根目录
├── apps/demo/transfer # BLE 透传/数传等应用
└── apps/demo/hid/ # HID 人机交互设备等应用
```
### 4.3 选择芯片型号和板级配置
每个应用目录下都有 `board/` 子目录,按芯片平台划分:
```
apps/demo/hid/board/
├── bd47/ # AW31N 系列 (3个产品应用和1个demo板级配置)
```
每个芯片目录下包含:
- `Makefile` - 编译脚本
- `board_*.cbp` - Code::Blocks 工程文件
- `board_xxx.c` - 板级初始化代码
- `board_xxx_cfg.h` - 板级配置(引脚、外设等)
- `board_xxx_global_build_cfg.h` - 全局编译配置(功能开关)
### 4.4 编译并烧录
**方式一:Code::Blocks(推荐 Windows 用户)**
```bash
# 1. 进入对应的板级目录
cd apps/demo/hid/board/bd47/
# 2. 双击打开 .cbp 工程文件(如 AW31N_hid.cbp)
# 3. 在 Code::Blocks 中点击 Build → Build (Ctrl+F9)
# 4. 编译成功后,使用 USB 升级工具烧录生成的 .hex 文件
```
**方式二:Makefile 命令行**
```bash
# Windows 用户
双击 tools/make_prompt.bat 打开命令行环境
# Linux/macOS 用户
cd SDK 根目录
# 编译完整工程
make aw31n_hid
# 编译完成后,在对应 board 目录下找到生成的 .hex 文件
```
> **💡 提示**:所有支持的 target 名称见 [Makefile](https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK/blob/master/Makefile) 开头的注释。
**方式三:VS Code 编译**
仓库已预配置 VS Code 任务,按 `Ctrl+Shift+B` 即可选择编译目标。
---
## 五、工程结构
```
fw-AW31N_BLE_SDK/
├── apps
│ ├── app/ # 应用层代码
│ │ ├── bsp/ # 公共模块、SDK配置和输出
│ │ │ ├── common/ # 公共模块处理(跨工程共享)
│ │ │ │ ├── bt_common/ # 蓝牙通用处理
│ │ │ │ ├── codeswitch/ # 旋转编码器驱动
│ │ │ │ ├── common_uart/ # 通用串口适配驱动
│ │ │ │ ├── ir/ # 红外驱动处理
│ │ │ │ ├── key/ # 按键驱动处理
│ │ │ │ ├── mouse_sensor/ # 传感器驱动处理
│ │ │ │ ├── .../
│ │ │ │ ├── msg/ # 系统消息处理
│ │ │ │ ├── temp_trim / # 系统温度自适应处理
│ │ │ │ ├── third_party_profile/ # 第三方协议处理
│ │ │ │ ├── update/ # 固件升级处理
│ │ │ │ ├── usb/ # usb驱动处理
│ │ │ │ ├── vm/ # 系统消息处理
│ │ │ │ ├── .../
│ │ │ │ └── my_malloc.c/ # 系统堆申请处理
│ │ │ ├── cpu # CPU、系统相关处理文件
│ │ │ ├── .../
│ │ │ └── start # 上电应用层启动入口处理
│ │ └── postbuild/ # 工程编译前配置和下载目录等
│ │ │ └── bd47/ # 各芯片平台的 lib.a 库文件 + 工具脚本
│ │── demo/
│ │ ├── hid/ # 📌 HID 应用(键盘/鼠标/遥控器/游戏手柄)
│ │ └── tranfer/ # 📌 BLE 应用
│ └── include_lib/ # 头文件(bt协议栈、驱动、媒体、系统、cpu等)
│ ├── bt_controller_include / # 蓝牙控制器的头文件
│ ├── bt_include / # 蓝牙协议栈的头文件
│ ├── device / # 外设驱动的头文件
│ ├── fs / # 文件系统的头文件
│ ├── msg / # 系统消息队列的头文件
│ ├── update / # 无线OTA升级的头文件
│ ├── common / # 通用公共的头文件
│ ├── cpu/ # 各芯片平的头文件
│ ├── .../
│ └── flash/ #各芯片平台的 lib.a 库文件
├── doc/ # SDK发布文档资源:版本发布信息、芯片数据手册、硬件设计资料、使用说明文档等
├── tools/ # 编译工具与脚本
│ └── make_prompt.bat # Windows 编译命令行入口
├── Makefile # 顶层 Makefile(统一编译入口)
├── default.workspace # Code::Blocks 工作空间
└── .vscode/ # VS Code 配置(tasks.json 预定义编译任务)
```
### 5.1 关键目录说明
| 目录 | 作用 |
|------|------|
| `apps/demo/*/board/` | **板级配置**:引脚定义、外设初始化、编译选项 |
| `apps/demo/*/examples/` | **示例应用**:可直接参考或修改的参考实现 |
| `apps/demo/*/include/` | **应用头文件**:模块接口定义 |
| apps/demo/*/config/ | **库配置**:各模块的裁剪配置(决定编译哪些库功能) |
| apps/demo/*/config/ | **公共模块**:examples里面公共使用的功能 |
| ` apps/include_lib/liba/bd**/flash` | **预编译库**:`*.a` 静态库文件(bt_controller_lib.a、bt_protocol_lib.a、cpu_lib.a等) |
| `apps/app/post_build/bd**/` | **烧录工具**:download.bat、fw_add.exe、isd_download.exe 等 |
---
## 六、应用选择指南
### 6.1 TRANSFER (`apps/demo/transfer`)
| 项目 | 说明 |
|------|------|
| **适用场景** | 透传, 数据传输, 扫描设备, 广播设备, 适配器, AT模组等 |
| **关键特性** | 透传, 数据传输,支持 AT 指令控制 |
| **参考文档** | [TRANSFER 开发文档](https://doc.zh-jieli.com/AW31/zh-cn/master/module_demo/spple/index.html) |
### 6.2 HID (`apps/demo/hid`)
| 项目 | 说明 |
|------|------|
| **适用场景** | 媒体播放控制、遥控器、自拍器、翻页器、3模鼠标(2.4G/USB能支持到1K回报率) |
| **关键特性** | 通用HID,3模鼠标,高回报率 |
| **参考文档** | [HID 开发文档](https://doc.zh-jieli.com/AW31/zh-cn/master/module_demo/hid/index.html) |
---
## 七、编译指南
### 7.1 编译命令速查表
以下命令在 SDK 根目录下执行:
| 目标 | 芯片 | 应用 | 命令 |
|------|------|------|------|
| AW31N | bd47 | transfer | `make aw31n_transfer ` |
| AW31N | bd47 | hid | `make aw31n_hid` |
| **全部** | 全部 | 全部 | `make all` |
| **清理全部** | 全部 | 全部 | `make clean` |
### 7.2 清理单个工程
```bash
make clean_aw31n_transfer # 清理 aw31n_transfer 编译产物
make clean_aw31n_hid # 清理 aw31n_hid 编译产物
```
### 7.3 Linux 编译注意事项
```bash
# 1. 确保文件描述符限制足够大(链接阶段需要打开大量文件)
ulimit -n 8096
# 2. 进入 SDK 根目录执行编译
make aw31n_transfer -j`nproc`
```
### 7.4 常见编译错误
| 错误提示 | 解决方法 |
|---------|---------|
| `clang: command not found` | 未安装杰理编译工具链,或环境变量未配置 |
| `Too many open files` | Linux 下执行 `ulimit -n 8096` 增加文件描述符限制 |
| `cannot find -lxxx` | 缺少对应的 `.a` 库文件,检查 `apps/include_lib/liba/*/flash` 目录 |
| `undefined reference to ...` | 功能裁剪配置未包含对应模块,检查 `lib_*_config.c` |
---
## 八、烧录与升级
### 8.1 首次烧录
1. **连接硬件**:将开发板通过 USB 或 UART 连接到 PC
2. **进入编程模式**:按住开发板上的烧录按键,然后复位或重新上电
3. **打开 USB 升级工具**:启动 `isd_download.exe`
4. **选择固件**:选择编译生成的 `.hex` 文件
5. **开始烧录**:点击下载按钮,等待烧录完成
> **⚠️ 注意**:烧录前请确保 USB 升级工具正确连接且目标板已进入编程模式。
> 详细的 INI 配置(apps/app/post_build/bd**/flash/isd_config_ini.c)说明请参考:[下载脚本配置文档](https://doc.zh-jieli.com/Tools/zh-cn/mass_prod_tools/common_function/index.html)
### 8.2 OTA 升级
支持单备份和双备份蓝牙 OTA 升级,详见:[OTA 开发文档](https://doc.zh-jieli.com/AW31/zh-cn/master/update/update_main.html)
---
## 九、配置说明
### 9.1 功能裁剪配置
在每个应用工程的 `config/` 目录下,通过以下配置文件可以灵活裁剪 SDK 功能,减小固件体积:
```bash
apps/demo/hid/config/
├── lib_btctrler_config.c # 蓝牙控制器配置
├── lib_btstack_config.c # 蓝牙协议栈配置
├── lib_driver_config.c # 驱动模块配置
├── lib_profile_config.c # 蓝牙 Profile 配置
├── lib_system_config.c # 系统模块配置
├── lib_update_config.c # 升级模块配置
└── log_config.c # 日志输出配置
```
### 9.2 板级配置
每个板级目录下的 `board_xxx_cfg.h` 包含:
- **引脚映射**:UART / SPI / I2C / GPIO 等外设的引脚分配
- **外设使能**:开启或关闭特定外设模块
- **时钟配置**:CPU 频率、外设时钟源
`board_xxx_global_build_cfg.h` 包含:
- **功能开关**:按需启用/禁用特定功能
- **内存配置**:堆栈大小、缓冲池大小
---
## 十、常见问题
### 10.1 开发流程相关
**Q: 如何创建自己的工程?**
A: 复制 `apps/` 下对应应用的 `board/` 目录中与芯片型号最接近的板级配置,修改 `board_xxx_cfg.h` 中的引脚和外设配置即可。
**Q: 如何添加新的芯片型号支持?**
A: 在 `cpu/` 下创建对应的平台目录,提供 `liba/` 库文件和 `tools/` 烧录工具,然后在 `apps/demo/*/board/` 下添加对应的板级目录。
### 10.2 编译相关
**Q: Windows 下编译报错 `make` 不是有效命令?**
A: 使用 `tools/make_prompt.bat` 进入预配置的命令行环境,该脚本已设置好所有环境变量和 `make` 的路径。
**Q: 如何加快编译速度?**
A: 使用 `-j` 参数进行并行编译,如 `make aw31n_transfer -j4`。
### 10.3 调试技巧
- **串口日志**:通过 `log_config.c` 配置日志输出等级和通道
- **GPIO Debug**:利用空闲 GPIO 输出调试波形,测量时序
- **更多问题**:请参考 [FAQ](https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK/issues)
---
## 十一、社区与支持
### 技术交流
| 平台 | 群号/链接 | 状态 |
|------|-----------|------|
| **钉钉 1群** | `90400000565` | ✅ 可加入 |
### 资源链接
| 资源 | 链接 |
|------|------|
| 📖 **在线文档中心** | [doc.zh-jieli.com/AW31](https://doc.zh-jieli.com/AW31/zh-cn/master/index.html) |
| 📄 **芯片数据手册** | [SoC 数据手册扼要](https://doc.zh-jieli.com/vue/#/docs/aw31n) / [本地下载](./doc) |
| 📚 **SDK 版本历史** | [版本发布记录](https://doc.zh-jieli.com/AW31/zh-cn/master/other/version/index.html) |
| 🏗️ **SDK 架构文档** | [模块架构说明](https://doc.zh-jieli.com/AW31/zh-cn/master/getting_started/sdk_app_develop/index.html) |
| 🛒 **开发板购买** | [杰理官方店铺](https://shop321455197.taobao.com/) |
| 🐛 **问题反馈** | [Gitee Issues](https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK/issues) |
---
## 十二、认证信息
本 SDK 支持的蓝牙协议栈已通过蓝牙 SIG 认证:
| 蓝牙规范 | QDID | 认证链接 |
|---------|------|---------|
| Core v5.4 | QDID 222830 | [查看认证详情](https://launchstudio.bluetooth.com/ListingDetails/193923) |
---
## 十三、免责声明
`fw-AW31N_BLE_SDK` 支持 AW31N 系列芯片开发。AW31N 系列芯片支持通用蓝牙常见应用,可作为开发、评估、样品及量产使用,对应 SDK 版本请见 [Tags](https://github.com/Jieli-Tech/fw-AW31N_BLE_SDK/tags) 和 [Releases](https://gitee.com/Jieli-Tech/fw-AW31N_BLE_SDK/tags)。
---
Copyright © 2024-2026 珠海杰理科技股份有限公司. All rights reserved.