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.

[参考译文] LAUNCHCC3220MODASF:LAUNCHCC3220MODASF

Guru**** 2594630 points
Other Parts Discussed in Thread: CC3200

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/673706/launchcc3220modasf-launchcc3220modasf

器件型号:LAUNCHCC3220MODASF
Thread 中讨论的其他器件:CC3200

您好!

我尝试使用加密函数/API、例如:

CryptoCC32XX_init、CryptoCC32XX_open、CryptoCC32XX_encrypt, CryptoCC32XX_decrypt

用于 AES 加密。

起初、CryptoCC32XX_encrypt/decrypt 调用失败。

在使用调试时、结果发现文件"CryptoCC32XX.c"的函数"CryptoCC32XX_aesProcess"中有一个循环。

"CryptoCC32XX_context_READY_MAX_COUNTER"的值为1000。

  /*等待上下文输入标志、该标志将在中断处理程序中设置。 *
   while ((!g_bAESReadyFlag)&&(计数> 0))
   {
       计数--;
   }
   如果(计数= 0)
   {
       返回加密 CC32XX_STATUS_ERROR;
   }

上下文中断未在这些1000次迭代中产生、因此函数返回失败。

我们决定尝试将此循环设置为无限循环(通过注释掉"count --"语句)。

然而、Tera 术语在某种程度上变得没有响应。

我们必须重新启动我们的 PC。   

重新启动后、循环变为无限循环使我们能够成功加密。

稍后、我想查看是否可以使用"count"值来检测中断、从而使加密成功、而不是无限循环。  我尝试了100000和10000个循环。  工作正常。  然后、即使值为1000、也会获得上下文、即加密成功。

以下是我的问题:

  1. PC 重新启动是否可以通过某种方式解决问题?  也就是说、在上述循环中无需更改、只是由于 CCS 和/或 PC 需要重新启动而出现错误行为?
  2. 此循环的重要性是什么?  为什么我们等待上下文可用、这是什么 AES 上下文?
  3. 什么/谁/何时提供此上下文?  加密功能需要它做什么?   
  4. 将该环路作为有限环路与无限环路相比、有哪些优缺点?
  5. 如果我想将其用于发送加密数据、此循环会引入不可预测性。  因为如果此循环失败,加密将失败,并且此失败可能随时发生。  可能会传输未加密的数据。  我如何应对这种不可预测性?

注:

我也观察到以下有关该循环的信息:

CC3200 "AES"示例中有一个相应的函数"AESCLRHT"。

此函数将此循环作为无限循环。  而在 CC3220中、该循环具有有限数量的迭代。

--

此致、

Neeraj Sallh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Neeraj、您好!

    要回答有关加密引擎的问题:

    1.不 重新启动您的 PC/重新启动 CCS 不会影响 CC3220。 您很可能会在重启过程中对 CC3220进行下电上电、这肯定会对其产生影响。
    2.循环的重要性在于它为加密函数提供了超时。 这是因为加密引擎可能很忙。 网络处理器(NWP)使用与应用处理器相同的加密引擎、因此有时加密引擎会忙于为 NWP 执行某些操作。 在此期间、它不可供应用处理器使用。
    加密引擎将设置一个中断、表示它已就绪、这是 NWP 未使用它的时候。 因此、您需要检查加密引擎是否准备好供应用处理器使用。
    4.如果您有无限循环,理论上可能会永远等待加密引擎为应用处理器做好准备。 具有固定持续时间超时循环将防止这种情况发生。
    5.当循环失败时,您将返回 CryptoCC32XX_STATUS_ERROR。 此时、您的应用程序必须重试、直到获得 CryptoCC32XX_STATUS_SUCCESS。

    此致、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Michael 的详细答复。

    现在,我对上面第4点中提到的“永远卡住”问题感到关切。

    "永远卡住"真的是可能的吗?
    NWP 使用加密引擎的原因之一可能是在安全 AP/STA Wi-Fi 连接上使用加密。
    如果是这种情况、则 NWP 应在每两个数据包传输之间释放加密。 否?
    这意味着"永远卡住"不会发生。 我们可能需要多次检查加密引擎是否可以免费使用。

    那么、NWP 是否可能无限期占用加密引擎?
    NWP 是否可以无限期或不可预测地对加密引擎进行真正的日志记录(有时说10、000个循环足够、而在另一个时间说、需要100、000甚至10、000、000个循环才能释放)?

    如果上述不可预测性是可能的、则:
    1.我应采取何种谨慎措施,以确保这种情况不会首先出现? 我是说、编码应用的一些指南
    MCU/NWP 相关事项、使得应用 MCU 和 NWP 都不会在长时间不可预测的时间内中断加密?
    2.有哪些准则可使这种占用情况可预测和确定性?
    可以为 NWP 提供复位功能吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Neeraj、您好!

    实际上、NWP 不应使用加密引擎、直到它永远阻止应用处理器。 就像应用 MCU 一样、NWP 需要使用加密函数、但需要用于数据块、而不是用于无限期流。 因此、您只需编写应用程序、使其需要捕获 CryptoCC32XX_STATUS_ERROR 故障并重试。

    您可以在 CryptoCC32XX.c 文件中调整循环条件、以增加超时时间并降低出现故障的可能性。 但是、您不能改变 NWP 的行为以使其更具可预测性。 话虽如此、我认为您必须编写应用程序代码来处理可能出现的故障、因此您也可以将其保持在1000。

    此致、
    Michael