器件型号: CC2745R10-Q1
我想在 BLE 连接期间使用 Keystore_PSA_importkey () API、但由于对 Keystore_PSA_importkey () 的独占控制、BLE 连接断开。
因此、是否可以禁用 Keystore_PSA_importkey() 的独占控制并使用它?
如果可能、请告知程序和设置。
SDK 版本为 9.10。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号: CC2745R10-Q1
我想在 BLE 连接期间使用 Keystore_PSA_importkey () API、但由于对 Keystore_PSA_importkey () 的独占控制、BLE 连接断开。
因此、是否可以禁用 Keystore_PSA_importkey() 的独占控制并使用它?
如果可能、请告知程序和设置。
SDK 版本为 9.10。
Kento 您好:
你能用 PSA_IMPORT_KEY () 函数来尝试吗? Keystore 函数是 ARM PSA 功能周围的包装器。 我们建议为 CC27xx 使用 PSA 函数。 如果您正在使用任何其他 Keystore 函数、请使用您可 在此处找到的正确 PSA 函数将其切换掉。 PSA 函数可在 crypto.h 头文件中找到。 请尝试一下、如果这对我有所帮助、请告诉我。
此外、您是否在不同线程中执行加密功能?
请告诉我。
谢谢、
Isaac
您好、Isaac、
我使用了 PSA_import_key()、但得到的结果与使用 Keystore_PSA_importkey() 时的结果相同。
与使用 Keystore_PSA_importkey() 时类似、访问 PSA 密钥库时 BLE 连接断开。
访问 PSA 密钥库时是否无法保持 BLE 连接?
是否可以将密钥存储在 PSA 密钥库中、而不在 PSA_IMPORT_KEY_() 处理中使用互斥控制?
谢谢
Kento 您好:
您能否向我提供要传递到 PSA_IMPORT_KEY 函数的属性? 此外、您能否提供连接参数? 我和我们的 PSA 函数研发专家谈过、他提到根据属性、执行该函数所需的时间在微秒到 1ms 之间。 除非您在连接事件发生之前直接调用函数、否则这不应影响您的连接。
此外、您每次运行 PSA_IMPORT_KEY 函数时都看到断开连接的情况、还是断开连接是间歇性的?
请告诉我。
谢谢、
Isaac
Kento 您好:
此外、您是否调用了 PSA_IMPORT_KEY 函数调用? 如果 BLE 栈和 PSA_IMPORT_KEY 函数共享同一个栈/线程、则希望您使用 BLEAppUtil_invokeFunction 来调用 PSA_IMPORT_KEY 函数。 调用该函数将允许将函数执行添加到 BLE 栈队列。 这将防止 BLE 事件与 PSA_IMPORT_KEY 执行之间发生任何重叠。
如果您尚未实现此功能、请尝试执行此操作。
谢谢、
Isaac
您好、Isaac、
>是否可以向我提供要传递到 PSA_IMPORT_KEY 函数的属性?
传递给 PSA_IMPORT_KEY 函数的属性包括 Key_Type(作为 keystore 的 PSA_KEY_TYPE_AES)、Key_Bytes(作为 16)、寿命(作为持久密钥和本地存储)、Key_Usage(作为 keystore 的 PSA_KEY_USAG_SIGN_message)和 Key_Algorithm(作为 keystore 的 PSA_ALG_CMAC)。
>执行该功能所需的时间在微秒至 1ms 之间。
保存上述属性的键时、大约需要 10 毫秒。 为什么会这样?
>此外,您能否提供您的连接参数?
您能具体告诉我连接参数指的是什么吗?
>此外、每次运行 PSA_IMPORT_KEY 函数时、是否都看到断开连接、或者断开连接是否是间歇性的?
此问题并非每次都出现、而是间歇性出现。 当在调用 PSA_IMPORT_KEY 函数时执行连接事件时、会发生该情况。
谢谢。
您好、Isaac、
您好、Isaac、
感谢您的答复。
我们知道、通过在 BLEAppUtil 任务中对函数执行排队、可以阻止函数在本应发生 BLE 事件的时间执行。
但是、我们没有在我们的系统中集成 BLEAppUtil 任务。
相反、我们生成一个从任务 A 到任务 B 的事件、并在任务 B 收到事件时执行 PSA 密钥存储。
我们认为这实现了与 BLEAppUtil 任务中的函数执行排队等效的行为、如您所述。
这种理解是否正确?
如果没有、请您澄清其中的差异。
此外、如果我们的理解正确、在我们的环境中、我们会遇到广播传输与任务 B 中执行密钥存储到 PSA 中的时间重叠的问题、从而导致不传输广播。
我们不明白为什么要使用 BLEAppUtil_invokeFunction 函数来解决此问题。
如果您能解释为什么这种方法有效、我们将不胜感激。
谢谢。
您好、Isaac、
在用户应用中、使用以下 FreeRTOS 函数实现事件队列处理。
・vListInsertEnd
・xEventGroupSetBitsFromISR
・xEventGroupWaitBits
【程序】
1.任务 B 调用 vListInsertEnd 函数、并将消息排入任务 C 的队列句柄列表中
2.在任务 B 结束时、任务 B 执行 xEventGroupSetBitsFromISR 以向任务 C 通知事件。
3.任务 C 通过执行 xEventGroupWaitBits 函数等待事件通知,并在收到事件后,
将消息从队列句柄列表中取消队列。
4.任务 C 根据步骤 3 中出队的消息内容执行适当的处理。
注意:
我已将您的问题解释为与 UserApp 的事件队列机制有关、并相应地分享了上述信息。
如果这与您的问题或意图不符、请告诉我。
时序图说明了当前问题以及上述步骤 1 至 4 中所述的过程。
在 UserApp 中、根据随附图中所示的流程执行处理。
当 PSA 密钥存储的时序与连接间隔内接收空数据包的时间一致时、会发生争用、
导致连接间隔中断和随后发生监视超时。
注意:
下图中的数字 1 至 4 与步骤相对应。
【时序图】

谢谢。