ST意法半导体
直播中

杨海清

8年用户 1804经验值
私信 关注
[问答]

在STM32L4P5上遇到RNG故障是为什么?如何解决?

我刚刚更新了一个电路板设计,将 STM32L433CC 替换为 STM32L4P5RE。我在 L433 上使用 RNG 没有问题。但是,对于 L4P5,在出现种子错误之前,我只能从 RNG 获得一个结果。
RNG:CR = 00800004,DR = 9a4c8249,SR = 00000001
...
RNG:CR = 00800004,DR = 00000000,SR = 00000044
我觉得奇怪的一件事是,如果 RNG 一次产生 128 位熵,我希望 RNG 能够从 DR 提供 4 个 32 位随机值。
两块板上的 RNG 时钟略有不同。两者均由 48MHz 的 PLLSAI1Q 提供时钟。PLL 由 433 上的 MSI 和新板上的 HSE (TXCO) 提供。AHB 在 L433 上的时钟频率为 80MHz,在 L4P5 上的时钟频率为 120MHz。
  • PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
  • PeriphClkInit.RngClockSelection = RCC_RNGCLKSOURCE_PLLSAI1;
  • PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSE;
我尝试将 RNG 时钟源更改为 HSI48 并遇到了同样的问题,
我只要求每秒 9600 比特的熵。
我已将 SysClock 路由出 MCO (/8) 并验证它是否正常。
我正在使用 STM32CubeIDE 生成项目,包括初始化代码。我没有更改调用 MX_RNG_Init() 后 HAL 配置的 RNG 配置。
应该注意的是,USB 工作得很好,而且时钟来自同一源。
我在两块不同的板上遇到了同样的问题,所以这似乎不是有缺陷设备的随机问题。
关于在哪里看有什么建议吗?






回帖(1)

杨天舒

2023-1-5 10:10:42
在 RM0432 第 1088 页中,您可以找到 RNG 寄存器的正确配置。 写入 HTCR 寄存器时,必须在指示值之前立即写入幻数 0x17590ABC。
这是配置 A 的 RNG 配置示例:


  • #define RNG_MAGIC_NUMBER       0x17590ABC  /* Magic Number */
  • #define RNG_HTCR_VAL           0x0000AA74  /* HTCR Value */
  • __IO uint32_t  HTCR_VALUE=0;
  • //put this after the RNG initializition and before the infinite loop
  • RNG->CR = 0x40F00D40; // config A
  • HAL_Delay(20);
  • /* RNG HTCR value setting 0xAA74 */
  • /*!< magic number must be written immediately before to RNG_HTCRG */
  • RNG->HTCR = RNG_MAGIC_NUMBER;
  • RNG->HTCR = RNG_HTCR_VAL;
  • HTCR_VALUE = 0 ;
  • RNG->HTCR = RNG_MAGIC_NUMBER;
  • HTCR_VALUE = RNG->HTCR;
  • RNG->HTCR = RNG_MAGIC_NUMBER;
  • while ( HTCR_VALUE != RNG_HTCR_VAL); // check that HTCR value is correctly set
  • RNG->CR = 0x00F00D4C; // config A + RNG EN =1, IE=1
  • HAL_Delay(1); /* a delay to wait for CONDRST to take effect */


举报

更多回帖

发帖
×
20
完善资料,
赚取积分