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.

[参考译文] CC2642R:调整 TRNG 函数中的时间

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1053429/cc2642r-adjust-the-time-in-trng-function

器件型号:CC2642R

您好!

我想在10ms 内填充一个64字节的熵池。  

阅读完文档后、我认为可以首先将熵池编译标志更改为8 (TRNGCC26XX_entropy_pool_size=8)并重新编译 TRNGCC26XX.c 来实现这一点  我已经这样做了、并且已经验证了 entropyPoolBuffer 具有8个元素而不是4个元素。

其次、我创建了第二个 TRNG 配置、其熵生成周期为60000。  当我打开句柄时、我已经验证了对象上的 samplesPerCycle 为60000。

然后、当我按下左侧按钮时、我为 Simple Peripheral 编写了以下测试代码:

/*********************************************************************
 * @fn      SimplePeripheral_trng_test
 *
 * @brief   tests TRNG.
 *
 * @param   none
 */
static void SimplePeripheral_trng_test(void)
{
    static TRNG_Handle handle = NULL;

    CryptoKey entropyKey1, entropyKey2;
    uint8_t entropyBuffer1[32] = {0};
    uint8_t entropyBuffer2[32] = {0};

    if(handle == NULL)
        handle = TRNG_open(CONFIG_TRNG_1, NULL);

    if(handle != NULL)
    {
        //TRNGCC26XX_setSamplesPerCycle(handle, 60000);
        CryptoKeyPlaintext_initBlankKey(&entropyKey1, entropyBuffer1, 32);
        TRNG_generateKey(handle, &entropyKey1);
        CryptoKeyPlaintext_initBlankKey(&entropyKey2, entropyBuffer2, 32);
        TRNG_generateKey(handle, &entropyKey2);
        //TRNG_close(handle);  Leave TRNG handle open
    }
    else
    {
        ASSERT(0);
    }
}

我使用 Energytrace 捕获了以下内容、测试代码需要50ms 的时间:

您能不能帮助我理解为什么在我预计10ms 时需要50ms。

谢谢、

黎明

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

    您好 Dawn、

    感谢您发表问题、我已通知相应的专家、因此请给他们留出时间来制定回应。  同时、如果您能够提供 SysTick / 时钟 功能或其他 调试工具 来确认这些操作 与其他简单外设任务相比耗时、这将是很好的选择。

    此致、
    Ryan

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

    黎明

    您能否在没有 BLE 的情况下尝试在项目中进行测试? 例如、一个简单的 TI 驱动程序示例? BLE 堆栈也使用 TRNG 驱动器/硬件、因此我想确保这不会影响您的测量。  

    除了 Ryan 链接的调试资源之外、我还建议使用 Execution Graph 工具。 这可以向您显示任务状态、以查看其他操作是否阻止您的任务。 https://dev.ti.com/tirex/explore/content/simplelink_academy_cc13x2_26x2sdk_5_20_02_00/modules/rtos/tirtos_basics/tirtos_basics.html#execution-graph 

    此致、

    Daniel

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

    Daniel:o、您好!

    我已将测试更改为使用按钮示例。  我已注释掉按钮示例的所有初始化和运行时、并将其替换为 TRNG 测试。  我还添加了编译标志以将熵池增加到8个元素、并向工程添加了 TRNG 文件、以便使用新标志进行编译。  我已经验证了 SysTick 和时钟的功能、一切都按预期运行。  我花了一段时间才算出执行图、但我运行了该图、并看到只有我的1个任务/循环正在运行。  执行图是一个非常小的时间快照、因此它与 Energytrace 有一点难以关联。

    问题:为 Execution Graph 启用日志记录后、是否可以运行 Energy Trace。  

    我确实使用按钮项目获得了不同的结果、但结果仍然不符合预期。  下面是 Energytrace:

    该测试从按钮式任务的主循环调用。  每次调用后、都有一个100ms 的 Task_sleep。  每次另外两次、测试都会调用 TRNG_generateKey 两次来获取两个32字节的密钥、如前面发布的代码所述。  每次生成2个密钥时、 该图显示、需要40ms、这与默认周期时间和池大小的文档相匹配、但我将第一个帖子中描述的值更改为在10ms 内发生、因此第一个问题是为什么要更改熵池大小和每个周期的样本 似乎没有什么不同。

    第二个问题是如何让熵池填充背景?  我将 TRNG 句柄保持打开状态、我可以在10ms 标记处看到能量迹线上的单个尖峰、其中未调用 TRNG_generateKey、但这似乎对下次调用 TRNG_generateKey 的时间没有帮助。  我查看了 TRNGCC26XX.c 的源代码、它看起来像 TRNGCC26XX_hwiFxn ()是在获取随机字节的末尾填充熵池的内容、而不仅仅是在打开驱动程序时填充。  能否帮助我了解如何在后台填充熵池。

    谢谢、

    黎明

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

    黎明

    我只是想告诉大家、我已经能够重新创建驱动程序花费40ms 的时间来生成密钥的问题、而不管  samplesPerCycle 的值如何。 我正在努力尽快获得解决方案。

    此致、

    Daniel

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

    黎明

    同时、我想指出、对于安全用例、您不应修改 TRNG 设置。 生成非安全随机数的替代方法是使用 PRNG 算法、如   sources\ti\drivers\utils\Random.h 中提供的算法 此示例仅以82条指令(1.7uS)生成随机数。 它以来自 TRNG 的低熵来源种子。

    此致、

    Daniel

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

    Daniel、您好吗?您能解释为什么"对于安全用例、您不应该修改 TRNG 设置"?

    同时、您能否解释一下我上面提出的第二个问题...如何让熵池填充背景?

    黎明

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

    大家好、Dawn、我代表您咨询 TI 驱动程序软件开发团队、我们会尽快与您联系。  请允许延迟、因为美国有多名员工不在办公室 感恩节假期

    此致、
    Ryan

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

    他们能够提供一个快速响应:"TRNG 的工作原理是对几个自由运行的振荡器进行采样、并将这些采样混合到一个线性反馈移位寄存器中。 您需要让它在足够长的时间内执行该操作、以便输出在统计上具有足够的随机性。  否则、您将无法在较大的样本集上统一分配输出数字。  不过、这不是我们只能通过对数字进行观察就可以观察到的结果。 您需要对非常大的数据集运行统计分析。

    TRNG 熵池由状态机异步重新填充。 调用 TRNG_init()后,无需执行任何操作。 它将自动补充。"

    如果您有任何疑问、请告诉我。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您提供的所有信息。  我现在就知道了、我们不会更改每秒样本数的默认设置、因此不再需要出于我们的目的来研究这个问题。  再次感谢、您可以考虑关闭此帖子。

    黎明