HiSpark编程指南

- 调测资料
  - SDK Sample使用指南
    - 前言
    - 概述
    - Sample框架
    - 外设 Sample
    - SLE UART Sample
    - SLE UART DMA Sample
    - SLE Mouse Sample
    - SLE amic vdt with dongle
    - SLE microphone
    - SLE measure dis
    - BLE Lowpower Sample
    - BLE UART Sample
    - BLE Keyboard Sample
    - BLE SLE TAG Sample
    - BLE Mouse Sample
    - USB Keyboard Sample
    - USB Mouse Sample
    - USB AMIC VDT Sample
    - RCU
    - 多连接
    - air mouse
    - SLE MOUSE with Dongle
    - SLE OTA dongle
    - game mouse
    - BLE UUID
    - 缩略语
  - SDK二次开发网络安全注意事项
    - 前言
    - 产品安全解决方案
    - 结论
  - SDK开发环境搭建用户指南
    - 前言
    - 开发环境搭建
    - 编译SDK
    - 新建APP
  - 内存维测指导书
    - 前言
    - 简介
    - 内存维测功能
  - 射频AT测试指南
    - 前言
    - 射频测试AT指令
    - AT指令组包示例
    - 注意事项
  - 维测指导书
    - 前言
    - 概述
    - 日志说明
    - 日志分析
    - 问题定位
    - 典型案例
    - 常见问题FAQ
- 软件资料
  - AT命令使用指南
    - 前言
    - 指令说明
    - 通用AT指令
    - BT业务AT指令
    - 新增AT指令方法
  - DFU升级APK开发指南
    - 前言
    - 功能特性
    - 系统框架
    - 工程文件部署
    - 界面实现
    - 升级界面Fragment实现
    - 关于界面Fragment实现
    - 应用清单AndroidManifest
  - DFX软件开发指南
    - 前言
    - DIAG维测功能
    - 死机诊断
    - Dump解析
  - EFUSE使用指南
    - 前言
    - 概述
    - 使用软件接口读写EFUSE
    - 使用BurnTool烧写EFUSE
  - NFC TAG软件开发指导书
    - 前言
    - 概述
    - 开发指导
  - NV存储用户指南
    - 前言
    - NV简介
    - NV编译预置
    - NV API指南
    - 定制化NV结构使用介绍
    - 通过NV自定义传输数据最大长度
  - Release notes
    - 1.0.18版本描述文件
    - 1.0.17版本描述文件
    - 1.0.16版本描述文件
  - SDK开发指南
    - 前言
    - 概述
    - 系统接口
  - SDK接口变更说明书
    - 前言
    - BLE SDK接口变更说明
  - SP31 SLP使用指南
    - 开源版本
  - USB HID复合设备开发指南
    - 前言
    - 概述
    - 实现方式
  - 代码框架说明
    - 前言
    - SDK模块框架
    - SDK目录结构
    - SDK目录说明
  - 低功耗FAQ
    - 前言
    - 系统无法睡眠
    - IO无法唤醒系统
    - 唤醒后外设异常
    - 低功耗导致OTA升级异常
    - 功耗比预期高
    - 锁中断导致BT业务阻塞
    - 概率性狗超时
    - 供电模式&软件配置
    - 提前唤醒时间问题
  - 低功耗sample使用指南
    - 前言
    - 编译&测试
    - 系统状态管理
    - 用户指南
  - 低功耗开发指南
    - 前言
    - 低功耗概述
    - 低功耗方案
    - 开发指引
    - 功耗优化
    - 常见问题
  - 功率配置说明书
    - 前言
    - 射频功率配置说明
  - 升级方案使用指南
    - 前言
    - 概述
    - 升级包制作
    - 升级包传输
    - 升级包保存
    - 升级包本地升级
    - FAQ
  - 快速入门指南
    - 前言
    - 文档目录
    - 环境搭建
    - 基础功能开发
    - 调优
    - 特性开发
    - 测试报告
  - 星闪应用层SLE-Link协议
    - 前言
    - 概述
    - SLE Frame格式定义
    - 服务接口定义
    - 交互流程示例
  - 星闪软件开发指导书
    - 前言
    - 概述
    - Device Discovery接口
    - Connection Manager接口
    - SSAP Server接口
    - SSAP client接口
    - Low Latency接口
    - Transmission Manager接口
    - SLE Passkey接口
    - SLE Channel Map 接口
  - 红外学习使用指南
    - 前言
    - 红外学习方式
    - 通过比较器进行红外学习
    - 使用指南
  - 蓝牙软件开发指导书
    - 前言
    - 概述
    - GAP接口
    - GATT server接口
    - GATT client接口
  - 设备驱动开发指南
    - 前言
    - Pinctrl
    - GPIO
    - UART
    - SPI
    - I2C
    - ADC
    - DMA
    - PWM
    - WDT
    - Timer
    - Systick
    - TCXO
    - Flash
    - SFC
    - QDEC
    - KEYSCAN
    - PDM
    - USB_HID
    - USB_DFU
    - I2S
    - TRNG
    - 附：MIDDLEWARE
  - 音频编解码开发指导书
    - 前言
    - 概述
    - Audio Encoder
    - Audio Decoder
    - 调试与功能
- 工具资料
  - BurnTool工具使用指导书
    - 前言
    - BurnTool工具简介
    - 操作指南
    - FAQ
  - HiSpark Studio使用指南
    - 前言
    - 工具简介
    - 开发环境搭建
    - 工程管理
    - 工程配置
    - 编译运行
    - 软件包烧录
    - 栈分析和镜像分析
    - 工程调试
    - 串口控制台工具
    - Kconfig配置
    - GUI工程创建与使用
    - 高阶分析功能使用
    - 常见错误

### 该页内容

- 前言
- 概述
- Sample框架
  - 总体方案
  - Sample的启动和运行
  - Sample选择
- 外设 Sample
  - 概述
  - 支持的外设Sample列表
    - ADC
      - 编译
      - 运行
    - BLINKY
      - 编译
      - 运行
    - BUTTON
      - 编译
      - 运行
    - CAN
      - 编译
      - 运行
    - CLOCK
      - 编译
      - 运行
    - DMA
      - 编译
      - 运行
    - I2C
      - 编译
      - 运行
    - I2S
      - 编译
      - 运行
    - I2S DMA
      - 编译
      - 运行
    - I2S DMA LLI
      - 编译
      - 运行
    - KEYSCAN
      - 编译
      - 运行
    - PDM
      - 编译
      - 运行
    - PDM AMIC
      - 编译
      - 运行
    - PINCTRL
      - 编译
      - 运行
    - PWM
      - 编译
      - 运行
    - QDEC
      - 编译
      - 运行
    - RTC
      - 编译
      - 运行
    - SFC
      - 编译
      - 运行
    - SPI
      - 编译
      - 运行
    - SYSTICK
      - 编译
      - 运行
    - TASK
      - 编译
      - 运行
    - TCXO
      - 编译
      - 运行
    - TIMER
      - 编译
      - 运行
    - UART
      - 编译
      - 运行
    - UART DMA LLI
      - 编译
      - 运行
    - WATCHDOG
      - 编译
      - 运行
- SLE UART Sample
  - 概述
  - Server端流程
  - Client端流程
  - 编译
  - 烧录及运行
- SLE UART DMA Sample
  - 概述
  - 整体流程介绍
    - （A端）数据发送端
    - （B端）星闪数据发送端
    - （C端）星闪数据接收端
    - （D端）数据接收端
  - 编译流程
  - 烧录及运行
  - 可选参数配置
  - 使用说明及限制
- SLE Mouse Sample
  - 概述
  - 配置
  - 编译
  - 烧录及运行
  - 注意事项
- SLE amic vdt with dongle
  - 概述
  - 编译
  - 烧录及运行
- SLE microphone
  - 概述
  - 编译
  - 烧录及运行
- SLE measure dis
  - 概述
  - 编译
  - 烧录及运行
  - 校准
- BLE Lowpower Sample
  - 概述
  - 编译
  - 烧录及运行
- BLE UART Sample
  - 概述
  - 编译
  - 烧录及运行
- BLE Keyboard Sample
  - 概述
  - 编译
  - 烧录及运行
- BLE SLE TAG Sample
  - 概述
  - 编译
  - 烧录及运行
- BLE Mouse Sample
  - 概述
  - 编译
  - 烧录及运行
- USB Keyboard Sample
  - 概述
  - 编译
  - 烧录及运行
- USB Mouse Sample
  - 概述
  - 编译
  - 烧录及运行
- USB AMIC VDT Sample
  - 概述
  - 方案
  - 编译
  - 烧录及运行
- RCU
  - 概述
  - 方案
  - 编译
  - 烧录及运行
    - 烧录
    - 运行
- 多连接
  - SLE 多连接Sample
    - 概述
    - 编译
      - 配置Client编译
      - 配置Server编译
    - 烧录及运行
      - 烧录
      - 运行
  - BLE 多连接注意事项
- air mouse
  - 概述
  - 编译
  - 烧录
  - 运行
- SLE MOUSE with Dongle
  - 概述
  - 编译
    - 编译SLE MOUSE
    - 编译SLEMOUSE with Dongle
  - 烧录及运行
- SLE OTA dongle
  - 概述
  - 编译
  - 烧录及运行
- game mouse
  - 概述
  - 编译
  - 烧录及运行
- BLE UUID
  - 概述
  - 编译
  - 接口
- 缩略语

# 前言

概述

BS2X向用户提供了些示例程序（Sample），用于指导用户快速使用BS2X平台所提供的各类能力及快速产品化（本文档部分示例以BS21为例）。

产品版本

与本文档对应的产品版本如下。

产品名称 | 产品版本
--- | ---
BS2X | V100

读者对象

本文档主要适用以下工程师：

- 技术支持工程师

- 软件开发工程师

符号约定

在本文中可能出现下列标志，它们所代表的含义如下。

符号 | 说明
--- | ---
| 表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。
| 表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。
| 表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。
| 用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。
| 对正文中重点信息的补充说明。 “说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。

修改记录

文档版本 | 发布日期 | 修改说明
--- | --- | ---
08 | 2025-12-01 | 更新“SLE measure dis”章节内容。
07 | 2025-08-07 | 更新“SLE UART Sample”章节内容。 更新“BLE Lowpower Sample”章节内容。 更新“RCU”章节内容。 更新“多连接”章节内容。
06 | 2025-05-30 | 更新“SLE UART Sample”章节内容。 更新“SLE microphone”章节内容。 新增“BLE Lowpower Sample”章节内容。 更新“USB AMIC VDT Sample”章节内容。 更新“RCU”章节内容。 新增“air mouse”~“BLE UUID”章节内容。
05 | 2025-01-24 | 更新“编译”章节内容。 新增“SLE UART DMA Sample”章节内容。 新增“多连接”章节内容。
04 | 2024-08-29 | 更新“外设 Sample”章节内容。 更新“SLE Mouse Sample”章节内容。 更新“USB Mouse Sample”章节内容。
03 | 2024-07-04 | 更新“外设 Sample”章节内容。 更新“校准”小节内容。
02 | 2024-06-04 | 新增“SLE measure dis”章节内容。
01 | 2024-05-22 | 第一次正式版本发布。 更新“外设 Sample”章节内容。 更新“USB AMIC VDT Sample”章节内容。
00B03 | 2024-04-25 | 更新“支持的外设Sample列表”小节内容。 更新“编译”小节内容。
00B02 | 2024-03-29 | 更新“支持的外设Sample列表”小节内容。
00B01 | 2024-03-11 | 第一次临时版本发布。

# 概述

BS2X提供的Sample分为轻量级Sample和重量级Sample。

- 轻量级Sample：用于演示各个外设接口API的使用方法。

- 重量级Sample：用于模拟各类真实产品以及带BSLE通信类的业务Sample，比如鼠标、键盘、UART DTU等。

> 说明： Sample还在持续丰富中。

# Sample框架

## 总体方案

图 1 软件分层图

图 2 总体方案图

## Sample的启动和运行

1. 每一个Sample都是以OS任务的形式独立存在。

2. 新加任务或者删除任务的时候不允许修改系统启动相关的逻辑，需要通过编译和链接的方式，做到任务能够与任务启动隔离。

## Sample选择

通过Kconfig（menuconfig）选择需要编译到系统中的sample，如图1所示。

图 1 Kconfig选择需要编译的Sample

# 外设 Sample

## 概述

外设Sample基本都属于轻量级Sample，只为演示每一个驱动的完整使用流程。

## 支持的外设Sample列表

支持的外设Sample列表如表1所示，在Kconfig中呈现的界面如图1所示。

表 1 支持的外设Sample列表

Sample名称 | 功能描述
--- | ---
adc | 演示ADC的API使用方法。
can | 演示Can的API使用方法。
dma | 演示DMA的API使用方法。
i2c | 演示I2C的API使用方法。
i2s/i2s_dma_lli | 演示I2S（包括I2S DMA模式）的API使用方法。
keyscan | 演示Keyscan的API使用方法。
pdm | 演示PDM的API使用方法。
pinctrl | 演示Pinctrl的API使用方法。
pwm | 演示PWM的API使用方法。
qdec | 演示QDEC的API使用方法。
rtc | 演示RTC的API使用方法。
spi | 演示SPI的API使用方法。
systick | 演示Systick的API使用方法。
tasks | 演示Tasks的API使用方法。
tcxo | 演示TCXO的API使用方法。
timer | 演示Timer的API使用方法。
uart | 演示UART的API使用方法。
watchdog | 演示WatchDog的API使用方法。

图 1 外设Sample Kconfig界面

### ADC

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择ADC Sample，如图1所示；如果当前Sample支持Timer操作，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择ADC Sample

图 2 选择ADC支持Timer操作

图 3 编译后的fwpkg

#### 运行

1. adc采样默认使用channel0，单板复位后，给channel0的管脚引电压，串口显示结果如图1所示。

2. adc timer采样默认使用的是channel0和channel5，给channel0的管脚和channel5引不同的电压，串口显示结果如图2、图3所示。

图 1 adc采样运行结果

图 2 adc定时器采样运行结果

图 3 adc定时器采样运行结果2

### BLINKY

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”或者使用IDE工具单击menuconfig按钮，打开menuconfig配置界面。

2. 在menuconfig界面中选择BLINKY Sample，如图1所示；如果选择Sample使用的管脚，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 Kconfig sample选择

图 2 Blinky 管脚选择

图 3 编译后的fwpkg

#### 运行

1. 烧录上电复位后串口每隔500ms打印一次“Blinky working”日志。

2. 使用工具量取配置管脚电平状态，如图1所示。

图 1 量取的电平状态

### BUTTON

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”或者使用IDE工具单击menuconfig按钮，打开menuconfig配置界面。

2. 在menuconfig界面中选择BUTTON Sample，如图1所示；如果选择Sample使用的管脚，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3下所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择BUTTON Sample

图 2 选择BUTTON支持的管脚

图 3 编译后的fwpkg

#### 运行

1. 复位上电后，BUTTON初始化。

2. 单击BUTTON，出现如图1所示日志。

图 1 BUTTON按下抬起

### CAN

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21a-1M menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择CAN Sample，如图1所示；如果需要修改CAN模式，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21a\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择CAN Sample

图 2 CANMODE

图 3 编译后的fwpkg

#### 运行

CAN单板执行结果如图1、图2所示，当前默认CAN工作在循环模式。

图 1 CAN运行结果1

图 2 CAN运行结果2

### CLOCK

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择CLOCK Sample，如图1所示；选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择CLOCK Sample

图 2 编译后的fwpkg

#### 运行

将编译好的版本烧录即可运行。

### DMA

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》对应的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择DMA Sample，如图1所示；如果内存到内存支持使用链表模式，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择DMA Sample

图 2 DMA MEMORY LLI

图 3 编译后的fwpkg

#### 运行

DMA单板执行结果如图1所示，内存到内存使用链表的结果如图2所示。

图 1 DMA运行结果

图 2 DMA支持链表运行结果

> 说明： DMA相关的其他接口使用情况可参考其他 IP SAMPLE使用，如I2S DMA、2S DMA LLI、I2C、SPI等。

### I2C

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择I2C Sample，如图1所示。

3. master侧则继续按图2所示选择（如果当前Sample master侧支持使用writeread接口，则继续按图3选择）。

4. 进入到“drivers/drivers”路径下，打开I2C，如图4打开，进入配置中，如图5所示，完成I2C基础配置，此时I2C为轮询模式；可在此基础上修改，将I2C配置为中断模式（图6）、dma模式（图7）、poll_dma切换模式（图8）。

5. 进入到“drivers/chips/Chip Configurations for bs2x"路径下，修改I2C bus口数量。如果使用的bus为1，如图2所示，bus_id为1，则需要将I2C bus数量修改为2，如图9；如果使用的bus为0，则不需要修改bus数。选择完成后按“Q”或者“q”选择“y”保存退出。

6. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图11所示。

7. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~步骤6，但步骤3按图10所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择I2C Sample

图 2 I2C主机选择

图 3 I2C主机侧支持使用writeread接口

图 4 I2C功能打开

图 5 I2C轮询模式配置

图 6 I2C中断模式配置

图 7 I2C dma模式配置

图 8 I2C 轮询和dma自动切换模式配置

图 9 I2C bus数修改

> 说明： 该writeread接口只在轮询（poll）模式下可用，后续持续丰富中。

图 10 I2C从机选择

图 11 编译后的fwpkg

#### 运行

I2C双板执行结果如图1~图5所示。

图 1 I2C轮询双板主从交互结果

图 2 I2C轮询双板主从交互（master侧使用writeread接口）

图 3 I2C中断双板主从交互结果

图 4 I2C dma双板主从交互结果

图 5 I2C poll自动切换dma双板主从交互结果

> 说明： I2C所用管脚必须要有上拉电阻，且主机端发送数据需知道从机地址，因此必须先执行从机的初始化操作，所以先复位slave，再复位master。

### I2S

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择I2S Sample，如图1所示。

3. master侧按图2所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图4所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~4，但3按图3所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择I2S Sample

图 2 I2S MASTER选择

图 3 I2S SLAVE选择

图 4 编译后的fwpkg

#### 运行

I2S双板执行结果如图1所示，I2S运行时添加打印会导致cpu处理不及时，slave接收数据丢失，打印只是去验证master与slave是否正常通信，实际使用过程中不建议添加打印。

图 1 I2S 运行结果

### I2S DMA

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择I2S DMA Sample，如图1所示。

3. master侧按图2所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图4所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~4，但步骤3按图3所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择I2S DMA Sample

图 2 I2S DMA MASTER选择

图 3 I2S DMA SLAVE选择

图 4 编译后的fwpkg

#### 运行

I2S DMA双板执行结果如下图1所示。

图 1 I2S DMA运行结果

> 说明： slave侧源代码没有进行显示接收数据的log，需自行添加，且要保证数据完全接收，需参考“I2S DMA LLI ”。

### I2S DMA LLI

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择I2S DMA LLI Sample，如图1所示。

3. master侧按图2所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图4所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~4，但3按图3所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择I2S DMA LLI Sample

图 2 I2S DMA LLI MASTER选择

图 3 I2S DMA LLI SLAVE选择

图 4 编译后的fwpkg

#### 运行

I2S DMA LLI双板执行结果如下图1所示。

图 1 I2S DMA LLI 运行结果

执行该sample时必须打开以图2所示的两个宏。

图 2 DMA 相关宏

### KEYSCAN

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择KEYSCAN Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择KEYSCAN Sample

图 2 编译后的fwpkg

#### 运行

复位后，按键，串口显示对应的键值，KEYSCAN单板执行结果如下图1所示，仅以六键为例。

图 1 KEYSCAN运行结果

### PDM

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》对应的DMA与PDM的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择PDM Sample，如图1所示；如果需要修改配置选项，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择PDM Sample

图 2 PDM Config 选择

图 3 编译后的fwpkg

#### 运行

1. 单板复位后，输入声音源，立刻录音，串口显示结果如图1所示。

2. 连接Jlink，通过“savebin <filename> <addr> <numBytes[hex]>”命令将数据保存出来，如图2所示，通过Notepad打开该文件，如图3所示。

3. 使用Audacity音频工具，单击文件 -> 导入 ->原始数据，将保存出来的音频数据导入进去，且按图4所示选择配置项，结果如图5所示。

4. 单击播放，用耳机侦听，声音能够正常播放即可。

图 1 PDM 运行结果

图 2 Jlink 保存数据

图 3 Notepad数据显示

图 4 Audacity配置选项

图 5 Audacity音频结果

### PDM AMIC

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》对应的DMA与PDM的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择PDM AMIC Sample，如图1所示；如果需要修改配置选项，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择PDM AMIC Sample

图 2 PDM AMIC Config 选择

图 3 编译后的fwpkg

#### 运行

1. 单板复位后，输入声音源，立刻录音，串口显示结果如图1所示。

2. 连接Jlink，通过“savebin <filename> <addr> <numBytes[hex]>”命令将数据保存出来，如图2所示，通过Notepad打开该文件，如图3所示。

3. 使用Audacity音频工具，单击文件 -> 导入 ->原始数据，将保存出来的音频数据导入进去，且按下图4所示选择配置项，结果如图5所示。

4. 单击播放，用耳机侦听，声音能够正常播放即可。

图 1 PDM AMIC运行结果

图 2 Jlink 保存数据

图 3 Notepad数据显示

图 4 Audacity配置选项

图 5 Audacity音频结果

### PINCTRL

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择PINCTRL Sample，如图1所示；如果需要修改测试管脚，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择PINCTRL Sample

图 2 PINCTRL PIN 选择

图 3 编译后的fwpkg

#### 运行

PINCTRL单板执行结果如图1所示。

图 1 PINCTRL运行结果

### PWM

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择PWM Sample，如图1所示；如果需要修改配置选项，则继续按图2选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. channel与pin mode对应关系如下图图4所示。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择PWM Sample

图 2 PWM Config 选择

图 3 编译后的fwpkg

图 4 channel与pin mode对应关系

#### 运行

PWM单板执行结果如图1所示，使用逻辑分析仪抓出来的波形如图2所示。

图 1 PWM运行结果

图 2 PWM 波形

### QDEC

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择QDEC Sample，如图1所示，如果需要修改QDEC管脚配置选项，则继续按图2配置选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择QDEC Sample并进行QDEC配置

图 2 QDEC管脚配置

图 3 编译后的fwpkg

#### 运行

复位后，转动滚轮，串口显示对应值的变化，QDEC单板执行结果如下图1所示。

图 1 QDEC运行结果

### RTC

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择RTC Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择RTC Sample

图 2 编译后的fwpkg

#### 运行

RTC单板执行结果如下图1所示。

图 1 RTC运行结果

### SFC

#### 编译

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择SFC Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 SFC Sample选择

图 2 编译后的fwpkg

#### 运行

SFC单板执行结果如下图1图2所示。

图 1 SFC开始运行

图 2 SFC运行结果校验

### SPI

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择SPI Sample，如图1所示。

3. master侧则继续按图2所示选择（如果当前Sample master侧支持使用writeread接口，则继续按图3选择），选择完成后按“Q”或者“q”选择“y”保存退出。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图5所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~。4，但步骤3按图4所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择SPI Sample

图 2 SPI MASTER 选择

图 3 SPI MASTER支持使用writeread接口

图 4 SPI SLAVE 选择

图 5 编译后的fwpkg

#### 运行

SPI双板执行结果分以下多种情况：

情况①：SPI轮询模式如下图1或者图2所示。

图 1 SPI双板轮询主从交互结果

图 2 SPI双板轮询主从交互（master侧使用writeread接口）

情况②：SPI中断模式如下图4或图5所示。

图 3 SPI中断配置

图 4 SPI双板中断主从交互

图 5 SPI双板中断主从交互（master侧使用writeread接口）

情况③：SPI DMA模式如下图8或图9或图11所示。

图 6 SPI DMA配置

图 7 SPI DMA配置2

图 8 SPI双板DMA主从交互

图 9 SPI双板DMA主从交互（master侧使用writeread接口）

图 10 SPI DMA开启轮询和DMA自动切换配置

图 11 SPI双板DMA主从交互（两侧均使用writeread接口）

> 说明： 注意：打开CONFIG_SPI_SUPPORT_POLL_AND_DMA_AUTO_SWITCH宏后发送的数据量大于 CONFIG_SPI_AUTO_SWITCH_DMA_THRESHOLD宏配置的阈值时是DMA模式，反之是POLL轮询模式，且SPI发送的数据量需要与位宽对齐。

### SYSTICK

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择SYSTICK Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择SYSTICK Sample

图 2 编译后的fwpkg

#### 运行

SYSTICK单板执行结果如下图1所示。

图 1 SYSTICK运行结果

### TASK

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择TASK Sample，如图1所示；选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如下图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择TASK Sample

图 2 编译后的fwpkg

#### 运行

将编译好的版本烧录即可运行。

### TCXO

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择TCXO Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图2所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择TCXO Sample

图 2 编译后的fwpkg

#### 运行

TCXO单板执行结果如下图1所示。

图 1 TCXO运行结果

### TIMER

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择TIMER Sample，如图1所示，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 在menuconfig界面中选择TIMER 驱动，如图2所示，选择软timer个数.

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择TIMER Sample

图 2 选择软timer个数

图 3 编译后的fwpkg

#### 运行

TIMER单板执行结果如图1所示。

图 1 TIMER运行结果

### UART

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择UART Sample，如图1所示；如果修改当前Sample的某些参数配置，则继续按图2选择，默认为轮询（poll）模式；如果当前UART支持DMA链表传输，则继续按图3所示选择，如果当前Uart支持int传输，则继续按照图4所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如下图5所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择UART Sample

图 2 UART Sample参数配置

图 3 UART DMA配置

图 4 UART INT配置

图 5 编译后的fwpkg

#### 运行

当前UART Sample使用UART_BUS_1（H0）读写数据，UART_BUS_0（L0）打印日志信息，执行顺序是先通过PC串口给H0口发送一定长度的数据，H0口接收并将数据再次发送出去，在H0的串口上可看到发送和接收的数据，UART单板执行结果如下图1所示（仅以轮询模式为例），UART DMA链表执行结果如图2所示。

图 1 UART单板双串口交互结果

图 2 UART DMA LLI单板执行结果

### UART DMA LLI

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》对应的DMA与UART的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择UART DMA LLI Sample，如图1所示。

3. master侧按图2所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

4. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图4所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到master侧的板子；同理，slave侧依次执行步骤1~4，但3按图3所示选择，并将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到slave侧的板子。

图 1 选择UART DMA LLI Sample

图 2 UART DMA LLI Master参数配置

图 3 UART DMA LLI Slave参数配置

图 4 编译后的fwpkg

#### 运行

当前UART Sample默认使用UART_BUS_2（L1）和UART_BUS_2（L1）进行数据交互，版本正常烧录后，将两块板子UART_BUS_2所用的管脚交叉连接（TX接RX，RX接TX），然后同时复位，串口执行结果如图1所示。

图 1 UART双板交互结果

### WATCHDOG

#### 编译

> 说明： 运行该用例时，需根据实际需求选择其他目录下的KCONFIG配置，请参考《BS2XV100 设备驱动 开发指南》的“KCONFIG配置”章节。

1. 在命令行下执行命令“python build.py standard-bs21 menuconfig”，打开menuconfig配置界面。

2. 在menuconfig界面中选择WATCHDOG Sample，如图1所示；如果选择超时，则继续按下图2所示选择；如果选择喂狗，则继续按图3所示选择，选择完成后按“Q”或者“q”选择“y”保存退出。

3. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图4所示。

4. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录到板子。

图 1 选择WATCHDOG Sample

图 2 WATCHDOG超时

图 3 WATCHDOG 喂狗

图 4 编译后的fwpkg

#### 运行

WATCHDOG单板超时执行结果如下图1所示，喂狗后执行结果如图2所示。

图 1 WATCHDOG超时运行结果

图 2 WATCHDOG喂狗运行结果

# SLE UART Sample

## 概述

B/SLE UART的Sample详细的可分为SLE的UART透传功能和BLE的UART透传功能，其中SLE共支持三种，分别是SLE的UART透传功能，SLE的Low Latency UART透传功能以及SLE的Performance跑流功能，整体的连接关系和数据流图如图1所示。其中SLE UART Sample的三种模式编译通过Kconfig选项控制，默认为SLE的UART透传功能，选中Low Latency选项为SLE的Low Latency UART透传功能，在此基础上选中performance选项为SLE的Performance跑流功能。其他选项功能不变，详情参考“SLE UART Sample”的“编译”。

图 1 B/SLE功能框图

## Server端流程

图 1 Server端流程图

## Client端流程

图 1 Client端流程图

## 编译

1. 进入SDK目录，在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”（以编译bs21开发板相应固件为例）。

2. 选择SLE Uart Sample Performance mode(可选项，切换至数传模式)

   1. (Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART sample. → SLE UART Sample Configuration → Select SLE UART sample mode → Select sle uart sample type→ Enable SLE UART low latency sample

   2. (Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART sample. → SLE UART Sample Configuration → Select SLE UART sample mode → Set the currrent sample in PERFORMANCE mode.

3. 在menuconfig界面中选择SLE UART Sample，如图1所示。

4. 在menuconfig界面中选择当前Sample使用的UART BUS，如图3所示。

5. 在menuconfig界面中选择SLE UART Server，如图4所示。

6. 选择完成后按“Q”保存退出。

7. 在命令行执行 ”python build.py standard-bs21-n1100”，或使用IDE编译（编译前确保sdk包内文件的权限），编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图5所示。

8. 重启打开menuconfig配置界面，仿照3～#ZH-CN_TOPIC_0000001837765649/li8164191173710选择SLE UART Client，如图6所示，进行编译，并将版本正常烧录。

图 1 选择SLE UART Sample

图 2 选择sle uart sample performance mode（可选）

图 3 选择UART BUS

图 4 选择SLE UART Server

图 5 编译出的版本

图 6 选择SLE UART Client

## 烧录及运行

烧录

版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备两块单板，分别作为Server端和Client端，每块单板上将UART-L0和UART-L2与PC通过串口板连接。

2. 通过UART-L0分别将编译好的Server版本和Client版本烧录到单板中。

3. 在PC端分别通过两个串口助手连接两个单板的UART-L2，并且将串口设置到115200波特率，并打开串口。

4. 在两个串口助手上分别输入字符，并且观察对端串口是否可以收到，如果对端可以收到，则表示对通成功。

# SLE UART DMA Sample

## 概述

SLE UART DMA DEMA用来实现端到端的uart->sle->uart跑流过程，目前支持最大2.2M的跑流速度。整体的连接关系与数据流图如下图所示，其中sle uart dma sample的四种模式通过Kconfig选项控制。SLE支持正常模式和低时延模式，默认使用连接间隔等于25ms的连接模式，每次发送240字节大小数据。

UART驱动支持三个接口的使用，分别是uart_dma_lli接口，uart_raw_data_lli接口和uart_read_by_dma接口，具体使用场景参考下图。

SLE连接支持正常模式和低时延模式，默认使用连接间隔等于25ms的连接模式，每次发送236字节大小数据

## 整体流程介绍

### （A端）数据发送端

### （B端）星闪数据发送端

### （C端）星闪数据接收端

### （D端）数据接收端

## 编译流程

1. 在命令行下打开menuconfig配置界面，执行命令:./build.py -c standard-bs21-n1100 menuconfig

2. 选择uart配置：

   1. (Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART DMA sample. → SLE UART DMA Sample Configuration → Select UART Config → Choice Target UART DMA Sample Mode

   选择想要使用的uart驱动配置，目前支持以下三种UART驱动接口。

   2. (Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART DMA sample. → SLE UART DMA Sample Configuration

   配置需要使用的uart串口，BUS1:H0串口，BUS2，L1串口。默认为BUS1，支持最高4M的波特率

   请注意同时配置driver config中uart相关串口配置，因为该demo基于uart dma驱动运行，根据需要使用的UART驱动接口，参考下图进行配置。配置详情可参考《BS2XV100 设备驱动 开发指南》“UART”章节部分。

   使用H0串口时请关闭日志线程，防止日志与uart使用同一串口异常。

3. 选择目标跑流配置。

先选择想要的星闪模式

(Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART DMA sample. → SLE UART DMA Sample Configuration → Select SLE UART sample mode → Select sle uart sample type

再选择具体的跑流配置

(Top) → Application → Enable Sample. → Enable the Sample of products. → Support SLE UART DMA sample. → SLE UART DMA Sample Configuration → Select SLE UART sample mode → Select sle uart Rate config

使用low latency模式编译版本前请修改nv中em_size大小配置修改，byte4 和 byte5组成em_size的大小,byte6为最大链接数，em size的大小由byte4和byte5两个uint8_t拼接成一个uint16_t的数，高位在byte5，低位在byte4。如下图所示，08,01代表将em size大小设置为264字节大小。

1. 选择需要编译的sample版本，如下图所示，UART Master；UART Master Sle；UART Slave sle；UART Slave分别对应上文uart数据发送端；sle数据发送端；sle数据接收端；uart数据接收端。

1. 配置完成后按"Q"，然后"Y"保存并退出muneconfig。

2. 使用IDE编译版本，编译的版本包在路径：output\bs21\fwpkg\standard-bs21-n1100

3. 使用烧录工具将编译出来的版本烧录到单板上。

4. 重复步骤步骤4~步骤7，将对应的四个版本编译并烧录到单板上。

## 烧录及运行

烧录：

烧录方法请参考《BS2XV100 HiSpark Studio 使用指南》。

运行：

1. 准备4块单板，分别作为UART数据发送端；SLE数据发送端；SLE数据接收端；UART数据接收端。将UART数据发送端，SLE数据发送端的串口管脚和流控管脚反接；将SLE数据接收端，UART数据接收端的串口管脚和流控管脚反接。默认使用芯片的H0管脚配置。

2. 使用版本烧录工具将版本分别烧到四块单板上。

3. 使用PC串口工具连接到四块单板的L0口上，用于观察数据传输情况。

4. 按顺序启动A->C->D->B四块单板，观察串口日志打印。如果UART数据接收端能按时打印统计数据，则运行正常。

## 可选参数配置

包长 | 连接间隔 | phy类型 | 理论跑流速度
--- | --- | --- | ---
236B | 25ms | 4M QPSK | 75kbps
236B | 2ms | 4M QPSK | 940kbps
250B | 1k (low latency) | 2M QPSK | 2000kbps
36B | 1k (low latency) | 2M QPSK | 288kbps
36B | 2k (low latency) | 2M QPSK | 576kbps

理论跑流速度基于当前配置的最大星闪配置计算得出，实际速度可能受到芯片性能，空口质量等影响。

星闪速度=1秒内调度次数×每次发包字节数×8（比特数）/ 1000（单位换算），如配置3中包长250B，连接间隔1k，理论速度为1000×250×8/1000=2000kbps。

UART跑流速度一般为为波特率×0.6左右。当波特率设置为4000000时，UART可以达到2400kbps速度。

## 使用说明及限制

1. 使用低时延模式时请注意使用支持低时延功能的芯片如282x系列。

芯片 | 支持低时延模式
--- | ---
2821/2821E | 1k、2k
2820 | 1k

1. 受限于芯片rx buffer大小的影响，实际使用低时延模式时请不要设置超过Buffer大小的数据，大于此大小的数据包内容将会出错。

芯片 | 大小
--- | ---
282X | 250

1. 受限于芯片TRx Buffer大小的影响，空口一次传输数据大小有限，使用ssap消息接口发送数据时请参考芯片buffer大小发送数据，防止因为数据包过大分包，或过小导致的空口资源浪费。

2. 当TRx buffer为260时，空口最大数据包大小为252字节。应用层调用接口发送数据时，需要先经过host封装10字节协议层包头，其中包含了tcid,tm_len等信息；从BTC发出时，BTC会封装2字节包头信息，如果开启了加密，需要额外使用4字节MIC长度。综上所述，应用层每次发送数据建议限制在236字节的整数倍及以下大小。

# SLE Mouse Sample

## 概述

此Sample演示一个真实的基于SLE的鼠标方案。当前鼠标支持滑动、左右按键、滚轮功能。

## 配置

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中进入“application/System mouse Pin Configuration”，如Mouse Pin Config所示。

3. 选择完成后按“Q”、“Y”保存退出。

> 说明： 以上所述的管脚配置仅适用于BS2X项目，不同项目的管脚配置需根据自身情况进行适当调整。

图 1 Mouse Pin Config

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择鼠标Sample，如图2所示。

3. 在menuconfig界面中选择鼠标，如图3所示，并选择合适的sensor，如图4所示。

4. 选择完成后按“Q”保存退出。

5. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图5所示。

6. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录进鼠标板。

7. 重启打开menuconfig配置界面，仿照3～6选择Dongle，进行编译，并将版本烧录进Dongle板

图 1 选择SLE Mouse服务

图 2 选择SLE Mouse Sample

图 3 选择鼠标或者Dongle

图 4 选择鼠标的sensor

图 5 编译出的版本

## 烧录及运行

烧录

将编译出的鼠标版本和Dongle版本分别烧录到鼠标板和Dongle板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 鼠标板和Dongle分别上电，Dongle采用USB直接插在电脑上的方式上电。

2. 观察鼠标板和Dongle板在UART-H0上的日志信息，如果出现“CONNECTED”表示已经完成连接。

3. 在PC上观察到鼠标移动，按键单击等都能正常工作即表示SLE Mouse功能正常。

4. 使用过程中鼠标或者Dongle重新上电，能够重新连接，并且功能正常。

## 注意事项

> 须知： 当前版本SDK SLE鼠标只支持paw3395这个传感器，后续会增补更多的传感器支持。

# SLE amic vdt with dongle

## 概述

此Sample演示一个真实的基于SLE的dongle amic音频方案。整体的连接关系和数据流图如图1所示。

图 1 SLE amic数据流图

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21 menuconfig”。

2. 在menuconfig界面中选择SLE AMIC Sample，如所图1示。

3. 在menuconfig界面中选择当前SLE type为Server端，如图2所示；如果需要调整adc管脚以及单次uac和dma传输数量，采样率默认是16KHZ，则继续按图3、图4所示选择。选择完成后按“Q”或者“q”保存退出。

4. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs21”路径下，如图6所示。

5. 将编译出的版本按照的“SLE microphone”“烧录及运行”烧录。

6. 重启打开menuconfig配置界面，仿照3～6选择SLE AMIC Client(Dongle)，如图5所示，进行编译，并将版本正常烧录。

图 1 选择SLE AMIC sample

图 2 选择SLE AMIC SERVER

图 3 配置serve端相关参数

图 4 serve端采样率

图 5 选择SLE AMIC DONGLE

图 6 编译后的fwpkg

## 烧录及运行

1. 准备两块单板，分别作为Server端和Client（dongle）端，版本烧录后正常复位，串口打印“Connected”，表示连接成功，查看设备管理器中识别出的一个音频设备。

2. 在PC选择声音设置中选择输入设备，选择相关配置，如图1所示。

3. 打开声音控制面板，如图2所示，通过选择耳机或者默认播放设备侦听当前设备的声音且采样率配置为16KHZ×16Bits，如图3、图4所示。

4. 用Server单板采集声音，pc端耳机中可以侦听到对应的音频，则表示对通成功。

图 1 声音设置

图 2 声音控制面板

图 3 设备属性侦听

图 4 设备属性配置

# SLE microphone

## 概述

此Sample演示一个真实的基于SLE的dongle麦克风方案。整体的连接关系和数据流图如图1所示。

图 1 SLE microphone功能框图

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择SLE Microphone Sample，如图1所示。

3. 在menuconfig界面中选择当前Microphone type为Server端，如图2所示。

4. 在menuconfig界面中选择单次uac传输数量和SLE作为Server端的地址及名称，如图3所示。

5. 选择完成后按“Q”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs21”路径下，如下所示。

7. 将编译出的版本按照“SLE microphone”的“烧录及运行”烧录。

8. 重启打开menuconfig配置界面，仿照3～7选择SLE Microphone Client(Dongle)，如所示，进行编译，并将版本正常烧录。

图 1 选择sample

图 2 选择type

图 3 配置serve端相关参数

## 烧录及运行

烧录

将编译出的麦克风版本烧录到单板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备两块单板，分别作为Server端和Client端，分别烧录后串口打印“Connected”，查看设备管理器中会出现一个音频设备。

2. 在PC选择声音设置中选择输入设备，如图1所示。

3. 用Server单板采集声音，pc端耳机中可以听到对应的音频，则表示对通成功。

图 1 声音设置

# SLE measure dis

## 概述

此Sample基于SLE的测距方案。server端(广播)与client端(扫描)建立sle连接，server端计算出距离。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择SLE Measure Dis Sample，如图1所示。

3. 在menuconfig界面中选择Enable SLE MEASURE DIS Server sample，表明当前选择编译的是Server端，如图1所示。

4. 选择完成后按“Q”保存退出。

5. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图3所示。

6. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”章节进行烧录。

7. 重启打开menuconfig配置界面，仿照图2选择Enable SLE MEASURE DIS Client sample，表明当前选择编译的是Client端，如图2所示，进行编译，并将版本正常烧录。

图 1 选择server sample

图 2 选择client sample

图 3 版本路径

## 烧录及运行

烧录

将编译出的server, client 分别烧录到两块单板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备两块单板，分别作为Server端和Client端，分别烧录后串口打印“Connected”。

2. 连接串口，查看server打印，可以看到距离值吐出

## 校准

图 1 校准示意

图 2 修改位置

测试环境：

锚点周围3m范围内空旷无遮挡、无墙体、柱体、金属等遮挡物。

测试方法：

1. 按照图1所示在设备周围5个方向的1m位置，进行5次测距，5次测距值的其平均值减1为锚点A的校准值。、

2. 在如图2代码位置加上校准值。application\samples\products\sle_measure_dis\sle_measure_dis_server\sle_measure_dis_server_alg.c

# BLE Lowpower Sample

## 概述

BLE Lowpower Sample主要展示了低功耗相关回调的注册（图1）、以及睡眠定时器的操作。当时，会触发handler中对应的回调，可在对应的注册函数中实现对应的操作。需要注意的是，sleep只能转换到work，具体3种状态的转换如图2所示。。

图 1 低功耗相关回调注册

图 2 状态转换

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择BLE UART Sample，如图1所示。

3. 选择完成后按“Q”保存退出。

4. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图2所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录。

图 1 选择BLE Lowepower Sample

图 2 编译后的版本

## 烧录及运行

烧录

版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备一块单板，作为Server端，单板上将UART-L0和UART-L2与PC通过串口板连接。

2. 通过UART-L0将编译好的Server版本烧录到单板中。

3. 在PC端通过串口助手连接单板的UART-L2，并且将串口设置到115200波特率，并打开串口。

# BLE UART Sample

## 概述

BLE UART与SLE UART的实现原理与方案一致，唯一的不同是空口由星闪传输换成了BLE传输，参考“概述”。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择BLE UART Sample，如图1所示。

3. 在menuconfig界面中选择当前Sample使用的UART BUS，如图2所示。

4. 在menuconfig界面中选择BLE UART Server，如图3所示。

5. 选择完成后按“Q”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图4所示。

7. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录。

8. 重启打开menuconfig配置界面，仿照2～7选择BLE UART Client，如图5所示，进行编译，并将版本正常烧录。

图 1 选择BLE UART Sample

图 2 选择BLE UART BUS

图 3 选择BLE UART Server

图 4 编译后的版本

图 5 选择BLE UART Client

## 烧录及运行

BLE UART的烧录及运行方法与SLE UART一致，参考“SLE UART Sample”的“烧录及运行”。

# BLE Keyboard Sample

## 概述

此Sample演示一个真实的基于BLE的无Dongle键盘方案。当前键盘Sample支持两种键盘规格，分别是2×3的矩阵键盘和8×16的矩阵键盘（全键盘）。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择BLE键盘Sample，如图1所示。

3. 选择完成后按“Q”保存退出。

4. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图2所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录。

图 1 选择BLE Keyboard Sample

图 2 编译出的版本

## 烧录及运行

烧录

将编译出的键盘版本烧录到键盘板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 键盘板上电。

2. 在电脑（支持BLE键盘）上搜索名称为“ble_keyboard”的设备，并且进行连接。

3. 在PC端打开记事本，并通过键盘输入信息，输入的信息在记事本中可以显示即表示BLE Keyboard功能正常。

4. 使用过程中键盘重新上电，能够重新连接，并且功能正常。

# BLE SLE TAG Sample

## 概述

此Sample演示的是一个同时支持蓝牙和星闪方案，可进行星闪或者蓝牙的连接。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择 Ble Sle tag sample，如图Ble Sle tag sample所示。

3. 选择完成后按“Q”保存退出。

4. 使用sdk编译版本，编译出的版本包在“output\bs21\fwpkg\standard-bs21-n1100”路径下，如图2所示。

5. 将编译出的版本按照“BLE SLE TAG Sample”的“烧录及运行”烧录。

图 1 Ble Sle tag sample

图 2 编译后生成的镜像

## 烧录及运行

烧录

版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备一块单板，每块单板上将UART-L0和UART-L2与PC通过串口板连接。

2. 通过UART-L0分别将编译好的Server版本和Client版本烧录到单板中。

3. 在PC端通过串口助手连接单板的UART-L2，并且将串口设置到115200波特率，并打开串口。

4. 上电后可看到设置注册服务和起广播的流程，此时可用一个可扫描的设备连接单板。

# BLE Mouse Sample

## 概述

此Sample演示一个真实的基于BLE的无Dongle鼠标方案。当前鼠标支持滑动、左右按键、滚轮功能。

图 1 发送鼠标数据主要函数

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中进入“application/System mouse Pin Configuration”，进行鼠标管脚配置，如图1所示。

3. 在menuconfig界面中选择BLE鼠标Sample，如图2所示。

4. 在menuconfig界面中选择BLE鼠标的Sensor，如图3所示。

5. 选择完成后按“Q”、“Y”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs21”路径下，如图4所示。

7. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录进鼠标板。

图 1 Mouse Pin Config

图 2 选择BLE Mouse Sample

图 3 选择sensor型号

图 4 编译出的版本

## 烧录及运行

烧录

将编译出的鼠标版本烧录到鼠标板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 鼠标板上电。

2. 在电脑（支持BLE鼠标）上搜索名称为“ble_mouse'”的设备，并且进行连接。

3. 在PC上观察到鼠标移动，按键单击等都能正常工作即表示BLE Mouse功能正常。

4. 使用过程中鼠标重新上电，能够重新连接，并且功能正常。

# USB Keyboard Sample

## 概述

此sample演示一个真实的基于USB的方案。当前键盘sample支持两种键盘规格，分别是2x3的矩阵键盘和8x16的矩阵键盘（全键盘）。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择USB键盘Sample，如图1所示。

3. 选择完成后按“Q”保存退出。

4. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图2所示。

5. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录。

图 1 选择USB Keyboard Sample

图 2 编译后的版本

## 烧录及运行

烧录

将编译出的键盘版本烧录到键盘板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 键盘板上电。

2. 如果是非USB供电的单板，将USB与电脑连接。

3. 在PC端打开记事本，并通过键盘输入信息，输入的信息在记事本中可以显示即表示USB Keyboard功能正常。

4. 使用过程中键盘重新上电，能够重新连接，并且功能正常。

# USB Mouse Sample

## 概述

此Sample演示一个真实的基于USB的无Dongle鼠标方案。当前鼠标支持滑动、左右按键、滚轮功能。

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中进入“application/System mouse Pin Configuration”，如图1所示。

3. 在menuconfig界面中选择USB鼠标Sample，如图2所示，并选择合适的sensor，如图3所示。

4. 选择完成后按“Q”、“Y”保存退出。

5. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x”路径下，如图4所示。

6. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录进鼠标板。

图 1 Mouse Pin Config

图 2 选择USB Mouse Sample

图 3 选择鼠标的sensor

图 4 编译出的版本

## 烧录及运行

烧录

将编译出的鼠标版本烧录到鼠标板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 鼠标板上电。

2. 如果是非USB供电的单板，将USB与电脑连接。

3. 在PC上观察到鼠标移动，按键单击等都能正常工作即表示BLE Mouse功能正常。

4. 使用过程中鼠标重新上电，能够重新连接，并且功能正常。

# USB AMIC VDT Sample

## 概述

此Sample演示一个USB AMIC 音频数传方案。当前支持16K采样率，16Bits位宽采样。

## 方案

图 1 USB AMIC 数据流图

图 2 USB AMIC 流程图

## 编译

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择USB AMIC Sample，如图1所示。

3. 在menuconfig界面中选择USB AMIC 相关配置，如图2所示。

4. 选择完成后按“Q”或者 ‘q’保存退出。

5. 使用IDE编译版本，编译出的版本包在“output\bs21\fwpkg\xxx”路径下，如图3所示。

6. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录。

图 1 USB AMIC Sample

图 2 USB AMIC 配置项

图 3 编译后的版本

## 烧录及运行

烧录

将编译出的音频数传版本烧录到单板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 准备一块单板，版本烧录后正常复位，并打开串口和声音设置，选择相关配置，如图1、图2所示。

2. 通过耳机侦听当前设备的声音，可以看到有声音波动，且人声清晰，如图3、图4所示。

图 1 USB AMIC 配置属性1

图 2 USB AMIC 配置属性2

图 3 USB AMIC 运行

图 4 USB AMIC 运行2

# RCU

## 概述

此Sample演示一个真实的基于SLE、BLE与IR的遥控器方案。当前支持自定义按键规格。

## 方案

## 编译

当前 RCU Sample 支持两种键盘规格。键盘规格的选择在 Keyscan 驱动的 Kconfig 选项中进行。默认配置为 3 行 2 列的六键键盘，用户也可以选择自定义按键规格进行设置。配置选项如图1、图2所示。

SLE RCU SAMPLE编译配置

图 1 键盘选择六键配置

图 2 键盘选择自定义配置

编译步骤如下：

1. 打开 menuconfig 配置界面：

   1. 在 IDE 工具下打开项目。

   2. 单击 KConfig 按钮，进入 menuconfig 配置界面。

2. 选择键盘规格：

   1. 在 menuconfig 界面中，导航到键盘规格配置选项。

   2. 如果需要使用超过六键的键盘，选择 user config type 选项。如图 键盘选择六键配置、图2所示。

   3. 编辑 sdk/application/samples/products/rcu/rcu/keyscan/app_keyscan.c 文件，更改键盘注册配置，以适应自定义的按键布局。

3. 选择 Sample

   1. 在 menuconfig 界面中，导航到 Sample 选项。

   2. 选择 SLE RCU Server，如图3所示。

   3. 配置 RCU 本地地址，确保与实际使用场景一致。

4. 开启低功耗

   1. 在 menuconfig 界面中，导航到低功耗配置选项。

   2. 选择开启低功耗模式，如图4。

5. 保存配置：完成所有配置后，单击 Save 按钮保存配置并退出 menuconfig 界面。

6. 编译版本：使用 IDE 编译项目编译出的版本包将位于 output\bs21\fwpkg\bs21-1100-rcu 路径，如图5所示。

7. 烧录RCU Server 版本：将编译出的 RCU Server 版本烧录到板子。

8. 配置RCU Dongle：

   1. 在 menuconfig 界面中，导航到Sample 选项。

   2. 选择 SLE RCU Dongle。如图6所示

   3. 配置目标 server 地址，确保与3配置的 RCU Server 地址保持一致（如果存在多个 dongle，可能会产生冲突，因此需要修改地址以避免冲突）。

9. 编译RCU Dongle 版本：完成所有配置后，单击 Save 按钮保存配置并退出menuconfig界面进行编译。

10. 烧录RCU Dongle 版本

图 3 选择SLE RCU Server sample

图 4 选择RCU Server低功耗

图 5 编译出的版本

图 6 选择SLE RCU Dongle sample

注：在USB初始化后需要在PC中选择麦克风+HID设备，才能完全初始化成功。

BLE RCU SAMPLE

编译步骤如下：

1. 在IDE工具下打开menuconfig配置界面，单击KConfig按钮。

2. 在menuconfig界面中选择键盘规格，如图1、图2所示。

3. 在menuconfig界面中选择Sample，选择SLE rcu server，配置RCU本地地址，如图7所示。

4. 在menuconfig界面中选择开启低功耗，如图4所示。

5. 选择完成后单击save保存退出。

6. 使用IDE编译版本，编译出的版本包在"output\bs21\fwpkg\bs21-1100-rcu" 路径下，如图5所示。

7. 将编译出的server版本按照烧录进板子。

图 7 BLE RCU SAMPLE选择

IR RCU SAMPLE

编译步骤如下：

1. 在IDE工具下打开menuconfig配置界面，单击KConfig按钮。

2. 在menuconfig界面中选择键盘规格，如图1、图2所示。

3. 在menuconfig界面中选择Sample，选择IR rcu server，如图8所示。

4. 在menuconfig界面中打开学习功能，选择IR管脚，如图9所示。

5. 选择完成后单击save保存退出。

6. 使用IDE编译版本，编译出的版本包在"output\bs21\fwpkg\bs21-1100-rcu" 路径下，如图5所示。

7. 将编译出的server版本按照烧录进板子。

图 8 IR RCU SAMPLE选择

图 9 RCU IR选择

## 烧录及运行

### 烧录

将编译出的RCU Server版本与Dongle版本分别烧录到Server与Dongle板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

### 运行

1. Server与Dongle板子烧录完成后，分别上电，Dongle采用USB直接插在电脑上的方式上电。

2. Dongle上电后打开声音设置，设置采样率为1通道16KHZ16位如图1所示。

3. 观察Server与Dongle板在串口助手上的日志信息，如果出现"CONNECTED"表示已经完成链接。某些特殊的遥控器需要按”快捷键”发起广播建立连接。

4. 在Server端按下按键，观察Dongle端主机动作，例如音量加减键。

   1. 音量测试：按音量加减键，观察主机端音量是否变化。

   2. 2方向键测试：将光标定位在文本某一处，按方向键，观察光标方向变化。

   3. 语音上报功能：打开主机端麦克风，按遥控器上语音按键，观察麦克风测试窗口是否有声音传入。

   4. 潜在错误：

      串口工具server端和dongle端都未显示connected ，可能是按键注册失败。

      串口工具只有dongle端未显示connected，按键无反应，可能是server连接到其他dongle，重新设置地址。

5. 回连测试：

   在RCU与dongle端已建立连接情况下，任何一侧重启会马上回连。

   重新烧录RCU server端固件，重启后需要重新连接。

图 1 麦克风选择

图2 测试麦克风

学习功能调测：

1. 进入产测模式：按住同时按住左键和右键，再按住上键。

2. 学习遥控器按键：将被学习遥控器放在星闪遥控器前端2-5cm处，按一下被学习的按键。

3. 退出产测模式：同时按住左键和右键。

4. 星闪遥控器对准可以被"学习遥控器”控制的电视机或机顶盒。

# 多连接

## SLE 多连接Sample

### 概述

此Sample演示一个真实的基于SLE的多连接方案。可编译client或者server身份的镜像，不可同时具备client和server身份。client上电后自动起扫描，扫描到server会主动发起连接，连接后会循环给server发数据。运行Sample的操作包括：配置编译宏，编译，烧录，上电；Client端与Server端在配置编译宏这个步骤上有不同，其他操作步骤相同。

### 编译

编译分为Client端编译和Server端编译，1个Client连接多个Server。

#### 配置Client编译

图 1 Kconfig配置项

图 2 选择client

可以配置的选项包括：mtu长度，连接的Server端数量，Client端的打印串口，Client端的MAC地址，Server端的MAC地址。以上配置可以采用默认配置，Client端的地址信息配置好后，Server端配置的地址不用更改，与Client设置的地址信息保持一致。

编译步骤如下：

1. 在IDE工具下打开“menuconfig”配置界面，单击“KConfig”按钮。

2. 在“menuconfig”界面中选择支持的Sample：“SLE Multi Connections sample”。

3. 在“menuconfig”界面中选择“Enable SLE MULTI_CONN Client sample”。

4. 可以按实际使用修改其他配置项。

5. 选择完成后单击“save”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x\evb_all.fwpkg”路径下。

7. 将编译出的client版本按照烧录进单板。

#### 配置Server编译

图 1 Kconfig配置项

可以配置的选项包括：当前server端的索引号， mac地址和名称。

编译步骤如下：

1. 在IDE工具下打开menuconfig”配置界面，单击“KConfig”按钮。

2. 在“menuconfig”界面中选择支持的Sample：“SLE Multi Connections sample”。

3. 在“menuconfig”界面中选择Enable SLE MULTI_CONN Server sample”。

4. 可以按实际使用修改其他配置项,通常只用配置server端的索引号，mac地址和server名称的配置项会自动更新。

5. 选择完成后单击“save”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs2x\evb_all.fwpkg”路径下。

7. 将编译出的server版本按照烧录进单板。

### 烧录及运行

#### 烧录

将编译出的Server版本与Client版本分别烧录到Server与Client板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

#### 运行

1. Client与Server板子烧录完成后，分别上电。

2. 观察Server与Client板在串口助手上的日志信息，如果出现"CONNECTED"表示已经完成连接。

3. 上电的Server端持续向Client端发送示例数据abcd。

## BLE 多连接注意事项

在已经连接的状态下，需要在服务发现（包括发现服务、发现特征、发现特征值以及发现描述符）之后开启扫描。

# air mouse

## 概述

此Sample演示一个真实的基于sle+slp air mouse方案。

## 编译

1. 在命令行下输入“python ./build.py -c bs21e-1100e-slp menuconfig”。

2. 选择需要编译server，就按照1.server设置，需要编译dongle就按照2.dongle设置

   1. server： (Top) → Application → Enable Sample. → Enable the Sample of products. → Support air mouse sample. → Air Mouse Sample Configuration → Select AIR MOUSE type → Enable AIR MOUSE sample

   2. dongle: (Top) → Application → Enable Sample. → Enable the Sample of products. → Support air mouse sample. → Air Mouse Sample Configuration → Select AIR MOUSE type → Enable AIR MOUSE Dongle sample.

3. 选择完成后按“Q”保存退出。

4. 编译“python ./build.py -c bs21e-1100e-slp”。

5. 编译结果在“output/bs21e/fwpkg/bs21e-1100e-slp/bs21e_all_in_one.fwpkg”。

menuconfig选择

编译结果：

## 烧录

版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

## 运行

1. 准备两块单板，分别作为Server端和Client端。

2. 烧录完后，上下电。

3. 查看SLE是否正常连接以及指向功能。

# SLE MOUSE with Dongle

## 概述

此Sample演示一个真实的基于SLE的鼠标Dongle方案。运行Sample的操作包括：配置编译宏、编译、烧录、上电，可以调整鼠标的上报速率;

dongle端与mouse端在配置编译宏这个步骤上有不同。

## 编译

### 编译SLE MOUSE

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中进入“application/System mouse Pin Configuration”，进行鼠标管脚配置，如图1所示。

3. 在menuconfig界面中选择SLE鼠标Sample，如图2所示。

4. 在menuconfig界面中选择SLE鼠标的，如图3所

5. 选择完成后按“Q”、“Y”保存退出。

6. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs21”路径下，如图4所示。

7. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录进鼠标板。

图 1 Mouse Pin Config

图 2 修改sample配置

图 3 修改sensornumber

图 4 编译出的版本

### 编译SLEMOUSE with Dongle

1. 在命令行下打开menuconfig配置界面，执行命令“python build.py standard-bs21-n1100 menuconfig”。

2. 在menuconfig界面中选择SLE鼠标Sample，如图1所示。

3. 在menuconfig界面中选择SLE鼠标的，如图2所示。

4. 选择完成后按“Q”、“Y”保存退出。

5. 使用IDE编译版本，编译出的版本包在“tools\pkg\fwpkg\bs21”路径下，如图3所示。

6. 将编译出的版本按照“SLE Mouse Sample”的“烧录及运行”烧录进鼠标板。

图 1 修改sample配置

图 2 修改鼠标回报率

图 3 编译出的版本

## 烧录及运行

烧录

将编译出的鼠标版本烧录到鼠标板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

运行

1. 鼠标板上电。

2. 如果是非USB供电的单板，将USB与电脑连接。

3. 在PC上观察到鼠标移动，按键单击等都能正常工作即表示BLE Mouse功能正常。

4. 使用过程中鼠标重新上电，能够重新连接，并且功能正常

# SLE OTA dongle

## 概述

该sample用于演示使用dongle通过SLE模块进行OTA升级的方案。

## 编译

1. 在SDK根路径输入”python3 build.py standard-bs21-n1100 menuconfig”。

2. 进入”Application”，打开”Enable sample”。

3. 依次选择”Enable the Sample of products”，”Support sle ota dongle sample“。

4. 根据需要在“sle ota dongle Sample Configuration“中配置参数。

5. 保存并退出，执行“python3 build.py standard-bs21-n1100“，开始编译。

## 烧录及运行

版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

# game mouse

本文档主要介绍星闪鼠标turnkey方案规格及其实现，助力开发者快速上手turnkey方案代码逻辑和相关接口。

## 概述

软件平台实现了对应用软件的底层屏蔽，并对应用软件直接提供API（Application Program Interface）接口完成相应功能。典型的系统框架如图1所示。

图 1 系统框图

该构架可以分为以下几个层次：

- APP层

  APP层包括SLE通信功能，支持SLE模式、BLE模式与USB模式，支持不同品类。APP层也支持客户基于SDK提供的接口开发其他的应用。

- Host层

  Host是协议栈的上层实现，是硬件的抽象，包含逻辑链路控制、适配协议、安全管理器、属性协议、通用属性规范及服务等。

- Controller层

  Controller是协议栈的底层实现，直接和硬件相关，由芯片厂商实现，包括物理层、链路层、主机控制接口等。

- 外设与驱动层

  提供外设、系统相关能力及接口。

turnkey代码目录说明：

    ├── app_public
    ├── ble_mouse_server                // 蓝牙业务
    ├── CMakeLists.txt
    ├── Kconfig
    ├── mouse_button                    // 8k鼠标按键
    ├── mouse_data_transfer_manage.c    // 鼠标数据传输
    ├── mouse_data_transfer_manage.h
    ├── mouse_flash                     // 读写flash
    ├── mouse_key                       // 2k鼠标按键
    ├── mouse_light                     // led灯控制
    ├── mouse_log.h
    ├── mouse_mac_rules                 // 切换通道时，mac地址管理
    ├── mouse_mode_manage.c             // 蓝牙、星闪、有线模式管理，mouse task入口
    ├── mouse_mode_manage.h
    ├── mouse_power                     // 电源和低功耗
    ├── mouse_sensor                    // sensor相关
    ├── mouse_status                    // 广播、配对、断连处理
    ├── mouse_usb                       // usb初始化、接收处理
    ├── mouse_wheel                     // 滚轮
    ├── sfc_flash
    ├── sle_low_latency_service.c       // 星闪鼠标low latency服务
    ├── sle_low_latency_service.h
    ├── sle_mouse_client                // 星闪鼠标client端管理
    ├── sle_mouse_dongle.c              // 星闪鼠标dongle task入口
    ├── sle_mouse_dongle.h
    └── sle_mouse_server                // 星闪鼠标server端管理

## 编译

1. 安装deveco插件，导入sdk工程。

2. 选择编译target，当前已支持BS20、BS21E、BS22、BS26四款芯片编译turnkey代码。

   图 1 导入编译target

3. 修改kconfig，target默认配好一套，可直接编译，如需修改，请参考图2和图3。

   图 2 kconfig配置介绍1

   图 3 kconfig配置介绍2

   > 说明： 编译dongle时，若使用接收器，需要开启ldo供电。

   图 4 ldo供电

4. 修改/新增编译target默认配置，在build\config\target_config\deveco_config.json中修改。

## 烧录及运行

将编译出的TurnkeyMouse Server版本与Dongle版本分别烧录到Server与Dongle板中，版本烧录方法请参见《BS2XV100 HiSpark Studio 使用指南》。

各模块的详细功能可参照文档《BS2XV100 星闪鼠标应用方案开发 用户指南》。

# BLE UUID

## 概述

本文档主要介绍BLE UUID sample所提供的接口以及编译方法。此sample只提供接口，不能直接，需要由使用者调用相关接口使用。

## 编译

使用此sample相关接口需要配置menuconfig，具体配置步骤如下：

1. 单击“KConfig”按钮。

2. 单击“Application”。

3. 单击“Enable Sample”。

4. 单击“Enable the Sample BT”。

5. 单击“Support BLE Sample”。

6. 单击“Support Ble uuid server sample”。

7. 回到vsocde中，单击“Build”进行编译。

## 接口

表 1 接口清单

函数 | 描述
--- | ---
errcode_t ble_uuid_server_init(void); | BLE UUID服务器初始化
errcode_t ble_uuid_server_send_report_by_uuid(const uint8_t *data, uint8_t len); | 通过uuid server 发送数据给对端
errcode_t ble_uuid_server_send_report_by_handle(uint16_t attr_handle, const uint8_t *data, uint8_t len); | 通过uuid server 发送数据给对端
uint8_t ble_start_adv(void); | 使能BLE广播
uint8_t ble_set_adv_data(void); | BLE广播数据配置

接口详细信息见sdk：application/samples/bt/ble/ble_uuid_server/inc。

# 缩略语

A |  |
ADC | Analog-to-Digital Converter | 模数转换器
AFE | Analog Front-End | 模拟前端
B |  |
BLE | Bluetooth Low Energy | 低功耗蓝牙
BT | Bluetooth | 蓝牙
C |  |
CPU | Central Processing Unit | 中央处理单元
G |  |
GAFE | General Analog Front-End | 普通模拟前端
H |  |
HAFE | High precision Analog Front-End | 高精度模拟前端
I |  |
IoT | Internet of Things | 物联网
L |  |
M |  |
MCU | Main Control Unit | 主控制器单元
P |  |
PA | Power Amplifier | 功率放大器
PCM | Pulse-Code Modulation | 脉冲编码调变
PDM | Pulse Density Modulation | 脉冲密度调制
PER | Packet Error Rate | 误包率
PMU | Power Management Unit | 电源管理单元
PWM | Pulse-width Modulation | 脉冲宽度调制
R |  |
RAM | Random Access Memory | 随机存取存储器
RF | Radio Freqency | 射频
RPA | Resolvable Private Address | 可解析私人地址
RSA | Rivest-Shamir-Adleman | RSA加密算法
RX | Receiver | 接收器
S |  |
SAR | Successive Approximations Register | 逐次逼近寄存器
SHA | Secure Hash Algorithm | 安全散列算法
SLE | SparkLink Low Energy | 星闪低功耗
SOC | System On Chip | 片上系统
SPI | Serial Peripheral Interface | 串行外设接口
SRAM | Static Random Access Memory | 静态随机存取存储器
SWD | Serial Wire Debug | 串行线调试
T |  |
TX | Transmitter | 发送器
U |  |
UART | Universal Asynchronous Receiver & Transmitter | 通用异步收发器
V |  |
W |  |
X |  |
XIP | Executed In Place | 芯片内执行