SDK 6.0及以上新功能介绍
一、简易频偏测量
支持蓝牙频段的频谱仪普遍价格较高,移动性差。现在只需要使用一块 ING9188xx 开发板就可以测量频偏。在 Wizard
里选择菜单 Tools → More → Frequency Offset Tester 打开频偏测量工具:
使用步骤:
点击 “Burn Tester” 把测试用固件烧入 ING9188xx 开发板(此步骤只需要执行一次);
点击 “Burn IUT” 把测试程序写入待测设备;
填写 ING9188xx 开发板的串口号;
点击 “Run” 开始测试;
点击 “Stop” 完成测试。
ING9188xx 开发板本身的频偏可以填到 (5) Tester Calibaration (kHz),ING9188xx 开发板与 IUT 之间的链路衰减可以填到 Attenuation (dB)。
注意事项:
建议通过空口测试;如果使用电缆连接,务必加入适当的衰减,以防输入信号过大,ING9188xx 芯片过载;
“Burn IUT” 会将测试程序写入待测设备的 RAM 中,待测设备掉电或者复位后测试程序自动消失、失效;
待测信道会随测试程序写入待测设备,不可中途切换,而 ING9188xx 开发板上烧录的测试用固件支持信道切换。
二、发射功率校准
新版的 BQB RF 测试工具在进行连续波发射测试时,可以设置发射功率等级。连接频谱仪校准与功率等级对应的实际功率值,然后 用 API platform_set_rf_power_mapping
将校准过的功率对应表传入 platform
,校准完成。
三、新增小工具
[新增] Wizard 小功能 (6.7.0)
新建 Keil 5 项目时可设置编译器版本;
用 Visual Studio Code 打开任意项目;
搜索项目时,所有信息(型号、软件包等)皆可搜索。
[新增] 支持 Trace 到 Flash (6.7.1)
Python 脚本flash_dump.py
Flash Downloader:Tools -> Flash Dump
Flash 数据导出:
tracer: 读取 Flash 数据
四、加强兼容性
低功耗蓝牙进入连接模式后,各层分别协商通信中数据包的大小,对于 ATT 层,由 MTU EXCHANGE 流程实现;对于链路层,由 DATA LENGTH 更新流程实现。
按照规范,进入连接模式后,DATA LENGTH 更新流程可以由主或从设备在任何时刻发起。这导致了一个问题:某些芯片无法处理对方设备“随时”发起的 DATA LENGTH 更新流程。比如当旧版本(< 5.7.0)的平台软件被 Nordic 芯片以主角色连接后,Nordic 芯片出现协议栈挂起的情况,消息序列图如下。
为了更新地兼容不同的芯片,v5.7.0 定义了两个配置项:
enum btstack_config_item {
STACK_ATT_SERVER_ENABLE_AUTO_DATA_LEN_REQ = 1,
STACK_GATT_CLIENT_DISABLE_AUTO_DATA_LEN_REQ = 2,
...
};
这两个配置分别控制 GATT Server、Client 在 MTU EXCHANGE 时是否自动发起 DATA LENGTH 更新流程。默认情况下,Servier 不会自动发起更新流程, 而 Client 会自动发起。旧版本(< 5.7.0)下两者都会自动发起更新流程。
新版本默认情况下,可以被 Nordic 芯片以主角色正常连接:
PS: 虽然 MTU 的大小与 Data Length 两参数没有联系、相互独立,但是图中 Nordic 芯片把两者定义为同一个值,说明开发者在配置 sdk_config
时很可能犯了一个错误。
[新增] Raw Packet Bare 模式 (extension) (6.7.0)
通过 ll_raw_packet_set_bare_mode
启用 Bare 模式后,开发者可获得更多的自定义特性:指定带外频点、 自定义 CRC、自定义数据白化等。
[新增] 私有无连接 AoA (兼容 Silicon Labs 增强/私有 AoA) (extension) (6.7.0)
目前,ING9188xx 一共支持 4 种 AoA/AoD 方式,可以根据需要选择。各种方式的特点对比如下:
[修正] 看门狗复位时的行为 (6.7.0)
六、新增库函数
[新增] platform_util.c
模块 (6.7.0)
使用本模块提供的函数可以提取 platform.bin
的版本号等信息。
[修正] gatt_client_util.c
模块 (6.7.0)
修正了出错处理流程.
[更新] power_ctrl.lib
(6.7.0)
微调了低功耗流程的相关参数。
[新增] 将 Trace 保存到 Flash (6.7.1)
通过实现不同的 Trace 输出回调,可以用不同方式导出数据,比如 SWD、UART 等。本次更新增加了将数据循环写入 Flash 的功能。具体使用方法见文末“Trace 到 Flash 的使用方法”。
[修正] iic.c
: 写内存溢出 (6.7.1)
iic.c
保存从 I2C 读取的数据时,“隐式”要求预留数据缓存区至 4 字节的边界。如果没有预留,会导致内存意外改写。本版本去掉了这个“隐式”要求。
[新增] adc_cali.c
: ADC 校准 (6.7.2)
更新所有示例
[更新] 所有 Keil 5 示例改为使用 v6 编译器 (6.7.0)
Arm Compiler Version 6 (https://www2.keil.com/mdk5/compiler/6)使用 LLVM 基础架构,使用 Clang 前端,与 Gnu Arm Toolchain 兼容。
[更新] Central CTE
& Peripheral CTE
: 演示了私有无连接 AoA (6.7.0)
七、Trace 到 Flash 的使用方法
规划 Flash 空间
调用 trace_flash_init
时指定 Flash 空间。
确定 Trace 触发条件
由于 Flash 空间受限,可以在出现特定条件时通过 trace_flash_enable
时控制是否将数据写入 Flash。通过 trace_flash_erase_all
可以擦除用于存储 Trace 数据的 Flash 空间。
根据需要确定要抓取的 Trace 项目
此步骤需要实际问题多次尝试。
使用在线调试器(https://ingchips.gitee.io/user_guide/dive-into-sdk.html#memory-dump)、Python 脚本、或者 Flash Downloader 导出 Flash 数据。
使用 Python 3 脚本命令行:python flash_dump.py com_port start_addr page_no file_name
比如:python flash_dump.py COM3 0x44000 11 c:\temp\temp.bin
使芯片进入下载模式即可完成导出。
使用 Flash Downloader:
在主界面配置串口参数,通过主菜单 Tools -> Flash Dump 打开 Dump 窗口。设置导出范围后点击 Dump, 使芯片进入下载模式进行导出。导出完成后,点击 Save… 保存文件。