1.提供了解决唤醒定时器硬件反跳问题的软件解决方法。当RCX为LP时钟时,唤醒定时器的反跳时间比预期的时间长3倍左右,因为硬件反跳机制假定LP时钟频率为32KHz。
添加了功能wkupct_tweak_deb_time(),以纠正系统使用RCX作为LP时钟进入睡眠状态时的唤醒计时器去抖时间。当系统即将进入睡眠状态(进行调整)和系统唤醒时(撤消
调整)。
2.修复了与arch_printf()处理相关的副作用,该副作用导致系统无法进入睡眠模式。
3.将主循环回调app_on_sytem_powered()重命名为app_on_system_powered()。
4.根据目标板选择默认的XTAL16M频率调整值。
5.现在只能在平台初始化期间调用的SystemInit()函数中设置RETRAM存储块的保留模式。如果应用程序在深度睡眠模式下不需要保留所有RETRAM块,则应设置PMU_CTRL_REG [RETENTION_MODE]
因此在SystemInit()中。
6.在RCX频率计算中,将浮点运算替换为整数运算,以减小代码大小。
7.修复了rwip_sleep()中的内核计时器问题。
8. I2C eeprom驱动程序中的更正:
-将I2C命令放在关键部分内。 I2C命令需要在整体上保持一致,并且不受ISR的影响。
-删除了从RX FIFO中读取接收到的数据的关键部分。 RX FIFO为32字节,因此没有理由将对其的访问视为关键部分。
-增加了I2C主设备轮询从设备的ACK时的超时。
9.在集成处理器项目中启用了看门狗定时器。
10.改进的RCX稳定性(设置’RCX20K_BIAS = 0’)。
11.增加了对低于4800bps UART波特率的支持。在这种情况下,用户必须将对ROM函数uart_init()的调用替换为对arch_uart_init_slow()的调用。
12. UART2中断优先级降至3。
13.增加了对UART2低于4800bps波特率的支持。
14.修复了HRPC配置文件中的条件错误。
15.从Proximity Reporter应用程序中删除了与FindMe配置文件相关的代码。
16. SUOTA过程在重新启动之前终止BLE连接。
17. Windows接近报告器主机应用程序清理。
18. Windows接近监控主机应用程序的次要修复。
19.修复了闪存编程器,以检测是否未连接I2C EEPROM。
20. Flash编程器支持1Mbit UART波特率。
21.修改了闪存编程器,以支持大型SPI闪存。
22.定制服务机制中的几个修复(代码大小优化,第二个定制服务缺少代码,用户定义的权限设置)
23.应用程序API更改:
向app_on_scanning_completed()添加了参数以传递状态值。
24.应用程序配置API的更改:
-从“ app.c”中删除了默认消息配置(广告,gapm,参数更新,中央等)。所有用户配置参数仅保留在“ user_config.h”文件中。
-修改了SDK应用程序项目中的所有“ user_config.h”文件。
-在“ app_user_config.h”中添加了用于用户中央设备配置的结构。
-在“ app_user_config.h”和“ user_config.h”中添加了广告过滤器策略选择。
-在中央配置参数中添加了白名单功能
-清除了指向gapm_start_connection_cmd消息结构的正确指针。
发送消息后,start_connection_cmd为NULL。
25.从default_app_on_connection()中删除了对default_advertise_stop_operation()调用的冗余调用。
26.添加了drift_value_in_ppm枚举类型,该类型包含CFG_NVDS_TAG_LPCLK_DRIFT设置的可能值。
27.应用程序API更改:
-添加了“ app_on_adv_nonconn_complete()”回调,该回调可处理不可连接广告操作的完成事件。
28.删除了“ default_app_on_adv_undirect_complete()”默认处理程序。
29.应用程序配置更改:
-从“ user_config.h”中删除了CSRK和TK。这些值不得在用户配置文件中公开。
30.从“ app_easy_security.c”中删除了默认的安全配置参数。
31.更正了不一致的类型分配,通常在“ app_mid.h”中对uint8_t进行布尔化处理。
32.添加了实用程序功能,可随机生成CSRK。
33.删除了对NVDS的冗余访问,以在应用程序初始化期间读取安全启用标志。
34. API更改:将void app_easy_security_tk_exch(uint8_t connection_idx)更改为void app_easy_security_tk_exch(uint8_t connection_idx,uint8_t * key,uint8_t长度)。
密钥和TK密钥的长度作为参数传递。 TK密钥可以是6位密码或提供的OOB。
35. API更改:删除了“ app_easy_security_set_tk()”。当准备好发送TK交换消息时,将生成TK密钥。
36.在app_easy_timer API中添加了对边界延迟值的断言。
37.修复了app_easy_timer_modify()中的极端情况。
38.修复了app_easy_timer_cancel_all()中错误的数组索引。
39.修复了在连接时启动不可连接广告时的应用程序层FSM。
40.解决了每隔约2.5分钟更新一次静态随机地址的问题。
错误修复后,不会更新静态随机地址。
41.从advertise_configuration结构中删除了addr成员。该地址值一定不能暴露给用户。
42. API更改:
-增加了对GAPC_SEC_IND消息的支持,该消息在从属设备请求具有特定级别的身份验证时在主设备侧触发。应用程序层在gapc_security_ind_handler()中处理此消息,并在应用程序回调结构中触发用户定义的回调app_on_security_req_ind()。
43. API更改:
-将枚举arch_main_loop_callback_ret更改为typedef枚举{…}
arch_main_loop_callback_ret_t。
-将函数app_asynch_trm()和app_asynch_proc()的返回值从bool更改为arch_main_loop_callback_ret_t。
44.修复了app_easy_gap_directed_advertise_start():
-将app_easy_gap_undirected_advertise_start_create_msg()更正为app_easy_gap_directed_advertise_start_create_msg()。
-添加了cmd-> intv_min = LLM_ADV_INTERVAL_MIN和cmd-> intv_max = LLM_ADV_INTERVAL_MAX。这些值在advInterval的计算中不起作用。 advInterval必须在上述范围内,否则将引发错误。 BLE堆栈将ADV_DIRECT_IND的advInterval设置为1.25ms。
45.修复了函数app_easy_gap_adv_read_from_NVDS()中返回的缓冲区长度与广告或扫描响应数据的最大允许大小的比较。
46. API清理:
-将PROXR应用程序的初始化从app_default_handlers.c移至负责处理PROXR初始化的app_prox_init()。
-从app_proxr_init()中删除了参数。
47.修复了skip_slave_latency_patch()从错误的RX描述符读取MD位的问题。
48.修复了skip_slave_latency_patch()不能始终正确地检测哪个数据包是连接事件的最后一个的问题。
49.删除了DA14580 / 3特定标志CFG_MEM_LEAK_PATCH。相应的补丁程序是无条件应用的。
50.修补代码重构以节省一些代码空间。
51.为log_ke_malloc()和log_ke_free()补丁添加了丢失的DA14581对象代码。
52.生产测试固件–默认情况下,所有目标均禁用音频测试支持,因为这会导致GPIO P0_4发生冲突。仅在测试DA14582设备时才应启用音频测试。
53.生产测试固件–修复了为HCI_LE_Test_End命令返回的命令完成事件包含错误数量的数据包的情况。
54.生产测试固件–添加了用于传感器测试的新测试命令。
55.生产测试固件–禁用了GPIO驱动程序检查,因此GPIO可通过用户命令动态更改。
56.生产测试固件–固定了方波输入引脚也是UART引脚的XTAL16M“ xtrim”校准命令。
57.生产测试固件-更新了XTAL修整算法。
58. PROXR消息界面已更改:
-PROXR_ALERT_IND消息已删除。
-添加了PROXR_LLS_ALERT_IND和PROXR_LEVEL_UPD_IND消息。
59. HOGPD消息接口已更改:现在,应用程序可以在HOGPD_CREATE_DB_REQ消息中配置报告参考ID。
60. FindMe配置文件:
1.修复了由FindMe Target配置文件角色实现断开连接后发送的双FINDT_DISABLE_IND。
2.修复了由FindMe定位器配置文件角色实现断开连接后发送的双FINDL_DISABLE_IND。
61. GLP配置文件:
1.固定了“葡萄糖测量”特性中“类型”和“样品位置”字段的颠倒顺序。
2.固定了“葡萄糖测量上下文”特征中“测试器”和“健康”字段的颠倒顺序。
62. LNP配置文件:
1.拆分通知的缓冲区是从堆而不是堆栈分配的。
2.添加了对“导航控件”操作码参数的支持(请参阅enum lanp_navi_control)。
3.发送导航通知之前,请考虑当前的“导航控制”设置。
自定义ATT读取请求处理的行为如下:
1.当ATT读取请求到达时,将首先检查其有效性。
-如果可以,请继续下一步
-否则回复ATT错误
2.找到管理正在读取的句柄服务的任务。
3.如果任务已注册为接收ATTS_READ_REQ_IND消息,则:
准备并将ATTS_READ_REQ_IND发送给任务,并停止进一步处理。
该任务负责通过调用dg_atts_read_cfm()函数进行答复。
其他:
从数据库中读取属性值。
发送ATT读取响应(还要考虑当前的ATT MTU)。
需要此机制的任务通常会在数据库创建时使用dg_register_task_for_read_request()API注册ATTS_READ_REQ_IND消息。此后,每当对等方发送ATT读操作时,它应收到ATTS_READ_REQ_IND消息。
对它管理的任何属性句柄的请求。
收到ATTS_READ_REQ_IND消息后,任务可以修改ATT DB,然后必须通过调用dg_atts_read_cfm()进行答复。有两种用例:
1.该任务确定读取请求有效,(可选)修改ATT DB中的值,最后通过在dg_atts_read_cfm()的status_code参数中传递ATT_ERR_NO_ERROR来进行回复。这导致将ATT读取响应发送到对等设备。
2.该任务确定读取请求无效,并通过传递ATT错误代码进行响应
到dg_atts_read_cfm()。这导致将ATT错误响应发送到对等设备。
仅应将其用于调试目的,而不应在功率测量或睡眠模式评估期间使用:
-调试器始终保持启用状态。
-相应地修改了Keil调试器对象加载脚本。每次用户想要通过Keil IDE将新的目标文件下载到DA1458x时,都无需触发硬重置。
-仅在将调试器连接到DA1458x芯片的情况下,才可以在扩展和深度睡眠情况下的WFI调用之前和之后更改检查程序计时器行为的检查。
-从SDK代码中删除了debugger enable命令。调试器的状态由引导rom代码决定:在开发模式下启用调试器,而在普通模式下,根据相应OTP标头的值启用/禁用调试器
领域。另外,用户应用程序还可以启用/禁用调试器。
-ble_app_sleepmode(演示扩展和深度睡眠模式的用法-睡眠
API)。
-ble_app_security(演示安全性API的功能)。
-ble_app_ota(演示SUOTA配置文件的使用-通过空中进行软件更新)。
-ble_app_all_in_one(在一个应用程序中演示ble_app_barebone,ble_app_profile,ble_app_peripheral,ble_app_sleepmode,ble_app_security和ble_app_ota Keil示例项目的功能)。
“ UM-B-050 DA1458x软件开发人员指南”文档包含有关以下内容的详细信息:
BLE支柱示例。
UDS服务器角色实现使用以下示例中的自定义ATT读取请求处理机制
为了返回自定义读取错误代码。
新增了对身份验证配对(密钥方法)的支持。读写时
特征命令,在配对也失败后发出断开连接。
1内核计时器问题。
根本原因是16bit / 32bit混合算法出错。修补函数:cmp_abs_time()。
函数app_timer_set()必须用作ke_timer_set()的包装器。它确保
调用ke_timer_set()的delay参数在限制范围内。
2拒绝对等请求。
当服务器发送指示并等待确认时,SW实现拒绝任何对等设备请求(读/写)。
修补函数:l2cc_pdu_recv_ind_handler()。更改也应用到配置文件(cscp,glp,rscp,prf_utils)。
3安全管理器问题
在配对PDU中检查的保留位会导致PTS测试TC_BV_04_C失败。
修补函数:smpc_send_pairing_req_ind(),smpc_check_pairing_feat(),smpc_pairing_cfm_handler()。已更新smpc_pairing_cfm_handler()补丁程序,以解决在输入密钥输入过程超时后收到SMPC_PAIRING_CFM时的硬故障。
4频道地图更新
当作为从设备运行并且已建立连接的从设备延迟不为0时,则在接收到带有以下内容的LL_CHANNEL_MAP_UPD或LL_CONN_PARAMS_UPD消息时:
如果在“延迟锚点”上设置了connInstant值,则在下次唤醒时立即断开连接。如果将connInstant设置为580计划唤醒以为其服务的“连接锚点”,则不会发生任何问题。
修补的函数为:llc_con_update_req_ind()和llc_ch_map_req_ind()。
5为连接的外围设备启用广播模式,支持AD BLE 4.0规范中的多个“服务数据”结构允许外围设备连接到中心并同时执行不可连接的广告(这是PTS中的CPP测试所要求的)。堆栈不允许这样做。 BLE 4.0规范允许在AD中使用多个“服务数据”结构实例。堆栈仅允许该AD类型的1个实例。修补的函数是gapm_adv_op_sanity()
6禁止外围设备在同一连接事件中发送LL_START_ENC_RSP LL控制PDU和数据包。
7在llc_llcp_tx_cfm_handler()中添加了空指针检查,以纠正当BLE控制器处理LL控制PDU的ACK时连接已经断开的特殊情况。
8修复了一个极端情况,即同时触发监管超时和LL响应超时,导致空指针被取消引用并导致硬故障。
9修复了中心模式下的一个极端情况,该情况导致后续的GAPC,GATTC消息失败。
10添加了一个关键部分来保护从中断上下文中调用时由ke_state_set()访问的内核数据结构。
11修复了死角情况,即在无效连接上更新参数后执行断开连接时,BLE主设备陷入无限循环。
12从GATT服务的“服务已更改”特征中删除了READ属性。
13 LL_ENC_RSP消息的SKD和IVs字段是随机生成的。
1个atts_read_resp补丁,用于在接收到读取请求消息时发送GATTC_READ_CMD_IND指示消息。特定应用程序需要此功能修补函数:atts_read_resp_patch()
2 lld_adv_start的补丁程序,以允许sysRAM应用程序修改ADV_IND间隔。 lld_adv_start使用的间隔是保留变量arch_adv_int的值。如果arch_adv_int的值为0,则lld_adv_start使用每种广告类型的默认值。
修补函数:lld_adv_start()必须计算最小间隔值,并将其分配给arch_adv_int。
compute_arch_adv_time()必须用于间隔计算。
与所有保留的变量一样,默认值arch_adv_int为0。如果未分配其他值,则lld_adv_start()将为不同类型的广告使用以下值:无向/可连接:1500 uSec,有向/可连接:1250 uSec,无向/不可连接:500 uSec。
详细信息将添加到文档UM-B-003中。
3修补程序smpc_pairing_cfm_handler(),以便在密码输入过程超时后收到SMPC_PAIRING_CFM时修复硬故障。
4为与bluez接口相关的HCI项目添加了补丁。
当我们从接收到的数据包中提取llid信息时,我们将pb_bc_flag掩码为1(原始掩码为3)
5修复了在中心模式下的一个极端情况,该情况导致后续的GAPC,GATTC消息失败。
6添加了一个关键部分,以保护从中断上下文调用ke_state_set()时访问的内核数据结构。
7修复了在死连接上更新参数后执行断开连接时,BLE主设备陷入无限循环的极端情况。
8修复了在进行中的连接参数更新过程中发送断开连接命令时外围设备的拐角情况。最终,空指针被取消引用
导致硬故障。修补函数:lld_evt_int_extract()
9从GATT服务的“服务已更改”特征中删除了READ属性。
1认证配置文件:CSCP,CSCS,GLP,GLS,HTP,HTS,RSCP,RSCS,ANP,ANS,BLP,BLS,CTS,HRP,HRS,NDCS,PASP,PASS,RTUS,TIP,CPP,LNP
1 UM-B-050 DA1458x软件开发人员指南
2 UM-B-051 DA1458x软件平台参考
2.2已知问题或局限性
1 GATT事件可能不会按照在BLE堆栈4.0中发生的顺序发送到配置文件任务。
解决方法:如果预期指示完成,但是收到了写请求,则概要文件应重新安排写请求一次,以具有相同数量的内核调度。此解决方法在葡萄糖,CPP,RSCP,CSCP配置文件中实现
2 SDK 5.0.4不支持使用OTP中存储的具有修补功能的软件修补
3外部处理器解决方案中默认情况下禁用“看门狗”。
4连接管理器当前不支持GATTC_WRITE_NO_RESPONSE命令