Highlights
- ING916: USB 下载器
- 新增《开发者手册:低功耗》
- mini 软件包
已知问题(局限性):
- 调试 ING916xx 时,复位方式不能选择 SYSRESETREQ,应该选择 VECTRESET(不同的调试器可能使用不同的名词,J-Link 里称为 Core)。 几种调试时复位整个 SoC 的临时措施:
- 方法 1:先进入下载模式,然后再开始调试;
- 方法 2:对于 JLink,将 自定义脚本放到工程目录,并在进入调试模式后再次点击 IDE 里的 “复位” 按钮。
- ING916XX 省电模式仍在持续开发、改进中,QUERY_DEEP_SLEEP_ALLOWED 回调目前不允许返回 PLATFORM_ALLOW_BLE_ONLY_SLEEP。
兼容性: v8.3.3 gap_start_ccm 函数签名与旧版本不兼容。
1. 软件包
-
[更新] ING916:优化低功耗时的电流表现 (8.3.0)
-
[新增] 回调函数表相关 API (8.3.0)
现有的 Platform 回调(事件及中断)注册使用了数组,占用一定的内存。考虑到内存资源宝贵,新增了两个 API,
platform_set_evt_callback_table
和platform_set_irq_callback_table
,可以一次性为所有事件、中断注册回调函数, 而且整个函数表可存储于 Flash。下面的代码定义了回调函数表,并通过
platform_set_evt_callback_table
注册。const platform_evt_cb_table_t evt_cb_table = { .callbacks = { [PLATFORM_CB_EVT_HARD_FAULT] = { .f = (f_platform_evt_cb)cb_hard_fault }, [PLATFORM_CB_EVT_ASSERTION] = { .f = (f_platform_evt_cb)cb_assertion }, [PLATFORM_CB_EVT_HEAP_OOM] = { .f = (f_platform_evt_cb)cb_heap_out_of_mem }, // ... } }; platform_set_evt_callback_table(&evt_cb_table);
两种注册方式不可混用,例如,不要既使用
platform_set_evt_callback_table
又使用platform_set_evt_callback
。对于 CPU 而言,从深睡眠唤醒后中断恢复为屏蔽状态,新添了用于使能中断的
platform_enable_irq
。强烈建议: 采用如上所示的指定序号的数组初始化(ISO C99: Designated Initializers)写法。
-
[新增] Extension/Experiment 软件包添加更多的 BLE 私有扩展功能 (8.3.0)
-
锁频。使用
ll_lock_frequency
锁频后,所有的蓝牙活动都被固定在指定的信道。使用ll_unlock_frequency
可解锁。 -
广播间隔不再要求必须 >= 20ms。
gap_set_ext_adv_para
里的interval
参数允许填 1。 -
仅限 ING916:允许传统广播数据长度超过规范定义的 31 字节
-
仅限 ING916:自定义数据白化初值、广播数据包 PDU 类型、CTE 比特
-
仅限 ING916:对传统广播进行 CTE IQ 采样
-
-
[修正] ING916:持久化寄存器 API (8.3.0)
ING916 上的
platform_write_persistent_reg
、platform_read_persistent_reg
功能现已正常。 -
[新增] mini 软件包 (8.3.0)
对于简单的应用而言,内存需求很小,为此,SDK 提供了 mini 软件包。这种软件里的 BLE 协议栈只占用 8KiB SHARE 内存,SYS 内存小于 16KiB。协议栈的功能受限,只支持一组广播集,一个连接。
App 通过
SYSCTRL_SelectMemoryBlocks
可关闭未使用的内存块,节省功耗。 比如 SYS 内存总占用小于 16KiB 时就在app_main
里加一行代码:SYSCTRL_SelectMemoryBlocks(SYSCTRL_RESERVED_MEM_BLOCKS);
(不推荐)对于 8KiB 以外的共享内存,也可以作为普通内存,自由使用。 开发者需要手工将对应的内存范围(下表)添加到开发工具中。
芯片 起始地址 大小(KiB) ING918 0x400A2000 56 ING916 0x40122000 24 以 Keil 和 ING918 为例,这段共享内存的设置如图:
-
Peripheral Console 已切换到 mini 软件包。
-
[修正] Controller 里对 LL_CONNECTION_PARAM_RSP 的处理 (8.3.0)
当
referenceEventCount
字段小于或等于当前的 EventCount 且差别不大时,逻辑有误,导致断连接。现已修正。 -
[修正] 启用 Enhanced Ticks 时的稳定性问题 (8.3.0)
对于内置 FreeRTOS 的软件包,当启用 Enhanced Ticks 后,IDLE 进程有可能死循环。现已修正。
-
[更新] API:platform_install_task_stack (8.3.0)
现在
platform_install_task_stack
支持为 Timer 任务重新配置栈空间。旧版本仅支持 Controller/Host 等两个任务。 -
[更新] 几个 ATT API 的签名 (8.3.0)
att_server_notify
和att_server_indicate
的数据参数现在使用const
修饰。 -
[修正] 8.3.0 引入的低功耗下 BLE 加密无法完成的问题 (8.3.2)
-
[新增] 3 个 LL API (8.3.3)
ll_aes_encrypt
用于以阻塞方式快速执行 AES 加密(所有软件包)ll_get_conn_info
,ll_get_conn_events_info
:用于获取连接事件的相关信息(目前仅存在于 exp 软件包)
-
[更新]
gap_start_ccm
(8.3.3)与
gap_aes_encrypt
类似,新的gap_start_ccm
增加了两个参数用于指定计算完成时的回调:gap_hci_cmd_complete_cb_t cb, // 计算完成后的回调 void *user_data // 回调的用户数据
-
[更新] 32k 时钟的配置流程 (8.3.4)
现在 ING916/ING918 使用完全相同的 32k 配置、切换流程,不再需要延迟等待等操作。
2. 外设驱动
-
[更新] ING916:QDEC/KeyScan/SysCtrl/Comparator/ADC 驱动 (8.3.0)
完善接口。部分新接口可能与由版本不兼容。为 ADC 数据的滤波处理提供参考实现。
-
[更新] ING916:USB (8.3.2)
支持变长数据,修复其它问题。
-
[更新] SYSCTRL (8.3.2)
- 修正 ING918 下唤醒源的读取;
- 为 ING916 PVD、PDR 添加 API。
-
[修正] ING916: SYSCTRL、ADC 里的问题 (8.3.4)
- 修正 ING918 下唤醒源的读取;
- 为 ING916 PVD、PDR 添加 API。
3. 库函数
-
[更新] ING918:Power control 库现在提供 3 种策略供选择 (8.3.0)
-
[新增] USB MSC 模块 (8.3.4)
方便为 app 添加 U 盘功能。
4. 文档
-
[新增] 《开发者手册:低功耗》 (8.3.0)
-
[更新] 《低功耗蓝牙开发者手册》 (8.3.3)
4. 示例
-
[修正] 若干示例中 ING916 的 Flash 存储地址 (8.3.2)
-
[修正] Peripheral Console (Real-time) 的堆空间设置 (8.3.2)
-
[更新] HID Mouse:演示 DIR_ADV (8.3.4)
5. 工具
-
[修正] Wizard: FOTA/Cube 相关代码的生成 (8.3.0)
-
[更新] Cube (8.3.0)
ING916 时钟树视图比较复杂,查找外设需要来回拖动界面。现在增加了查找功能,可以方便地定位外设,将其显示于屏幕中央:
-
[更新] tracer (8.3.0)
tracer 现已支持 ING916,可通过主菜单选择。注意:需要先选择 Chip Family,然后打开 log 文件。
-
[新增] ING916: USB downloader (8.3.0)
对于 ING916 芯片,可通过 USB 接口下载程序,相比串口,下载速度更快。提供 3 种下载工具:
- ing_usb.exe:单独的命令行版本的下载工具
- Downloader:在原有的 GUI 版本里将端口配置为“USB”即可
- icsdw.py:Python 版本的下载工具,适合量产
-
[修正] Cube 关于 UART、WATCHDOG 等的问题 (8.3.2)
-
[修正] Cube 918 SPI0 时钟、UART RX 代码生成相关问题 (8.3.3)
-
[更新] ING916:Flash 烧写算法现已支持 IAR/SEGGER/Crossworks (8.3.4)
-
[修正] Cube 关于 WATCHDOG/ING91682C/GPIO唤醒 等的问题 (8.3.4)