蓝牙开放零门槛之八-ING918x新功能介绍

桃可芯 桃芯科技 2022-01-26 17:17

SDK 6.0及以上新功能介绍


一、简易频偏测量


支持蓝牙频段的频谱仪普遍价格较高,移动性差。现在只需要使用一块 ING9188xx 开发板就可以测量频偏。在 Wizard 里选择菜单 Tools → More → Frequency Offset Tester 打开频偏测量工具:

图片

使用步骤:

  1. 点击 “Burn Tester” 把测试用固件烧入 ING9188xx 开发板(此步骤只需要执行一次);

  2. 点击 “Burn IUT” 把测试程序写入待测设备;

  3. 填写 ING9188xx 开发板的串口号;

  4. 点击 “Run” 开始测试;

  5. 点击 “Stop” 完成测试。

ING9188xx 开发板本身的频偏可以填到 (5) Tester Calibaration (kHz),ING9188xx 开发板与 IUT 之间的链路衰减可以填到 Attenuation (dB)。

注意事项:

  1. 建议通过空口测试;如果使用电缆连接,务必加入适当的衰减,以防输入信号过大,ING9188xx 芯片过载;

  2. “Burn IUT” 会将测试程序写入待测设备的 RAM 中,待测设备掉电或者复位后测试程序自动消失、失效;

  3. 待测信道会随测试程序写入待测设备,不可中途切换,而 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 兼容。

说明:示例中警告等级设为“AC5-like Warnings”。


  • [更新Central CTE & Peripheral CTE: 演示了私有无连接 AoA (6.7.0)


    七、Trace 到 Flash 的使用方法


    说明:Flash 写数据比较耗费时间,影响 MCU 时序。需要谨慎使用。API 的使用可参考 SDK 示例 UART GATT Console。


    准备工作


    1. 规划 Flash 空间

      调用 trace_flash_init 时指定 Flash 空间。

    2. 确定 Trace 触发条件

      由于 Flash 空间受限,可以在出现特定条件时通过 trace_flash_enable 时控制是否将数据写入 Flash。通过 trace_flash_erase_all 可以擦除用于存储 Trace 数据的 Flash 空间。

    3. 根据需要确定要抓取的 Trace 项目

      此步骤需要实际问题多次尝试。

    测试


    导出 Flash 数据


    使用在线调试器(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… 保存文件。

      图片