Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
M2354
【NuMaker-M2354试用】使用TRNG生成随机数
发布于 2021-12-18 22:50:39 浏览:696
订阅该版
时间:2021年12月18日 作者:lianghai **1.测试环境** MDK V5.26.2.0 Nu-Link_Keil_Driver 3.07.7246r [ENV V1.2.0](https://www.rt-thread.org/page/download.html) [Python V2.7.13 ](https://www.python.org/downloads/release/python-2713/) [rt-thread-v4.0.4](https://gitee.com/rtthread/rt-thread/repository/archive/v4.0.4.zip) **2.测试任务** 本次测试任务为新唐 NuMaker-M2354真随机数发生器TRNG模块 **3.资源介绍** 翻阅新唐M2354数据手册 ![image.png](https://oss-club.rt-thread.org/uploads/20211218/c62dc9feef45b7d278e918ac92a618d1.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/644fe251ac401a40273c29af041ec5a4.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211218/50a25128ad0f4e01f6a210c24c7b927e.png.webp) **4.代码** nu_rng.c ``` int32_t RNG_Random(uint32_t *pu32Buf, int32_t nWords) { int32_t i; int32_t timeout = 0x10000; /* Waiting for Busy */ while(CRPT->PRNG_CTL & CRPT_PRNG_CTL_BUSY_Msk) {} if(nWords > 8) nWords = 8; /* Trig to generate seed 256 bits random number */ CRPT->PRNG_CTL = (6 << CRPT_PRNG_CTL_KEYSZ_Pos) | CRPT_PRNG_CTL_START_Msk; while(CRPT->PRNG_CTL & CRPT_PRNG_CTL_BUSY_Msk) { if(timeout-- < 0) return 0; } for(i = 0; i < nWords; i++) { pu32Buf[i] = CRPT->PRNG_KEY[i]; } return nWords; } ``` drv_trng.c ``` #define NU_CRYPTO_TRNG_NAME "nu_TRNG" /* Private variables ------------------------------------------------------------*/ static struct rt_mutex s_TRNG_mutex; static int s_i32TRNGEnable = 0; static rt_uint32_t nu_trng_run(void) { uint32_t u32RNGValue; rt_err_t result; result = rt_mutex_take(&s_TRNG_mutex, RT_WAITING_FOREVER); RT_ASSERT(result == RT_EOK); RNG_Open(); if (RNG_Random(&u32RNGValue, 1) < 0) { //Failed, use software rand u32RNGValue = rand(); } result = rt_mutex_release(&s_TRNG_mutex); RT_ASSERT(result == RT_EOK); return u32RNGValue; } rt_err_t nu_trng_init(void) { rt_err_t result; result = rt_mutex_init(&s_TRNG_mutex, NU_CRYPTO_TRNG_NAME, RT_IPC_FLAG_PRIO); RT_ASSERT(result == RT_EOK); s_i32TRNGEnable = 1; SYS_ResetModule(TRNG_RST); return RT_EOK; } void nu_trng_open(void) { #if defined(NU_PRNG_USE_SEED) srand(NU_PRNG_SEED_VALUE); #else srand(rt_tick_get()); #endif } rt_uint32_t nu_trng_rand(struct hwcrypto_rng *ctx) { if (!s_i32TRNGEnable) { uint32_t u32RNGValue; //use software rand u32RNGValue = rand(); return u32RNGValue; } return nu_trng_run(); } ``` main.c ``` rt_uint32_t usr_trng; int main(int argc, char **argv) { #if defined(RT_USING_PIN) int counter = 100; /* set LEDR pin mode to output */ // rt_pin_mode(LEDR, PIN_MODE_OUTPUT); while (counter--) { // rt_pin_write(LEDR, PIN_HIGH); // rt_thread_mdelay(500); // rt_pin_write(LEDR, PIN_LOW); rt_thread_mdelay(500); usr_trng=nu_trng_rand(); } #endif return 0; } ``` **5.结果** ![image.png](https://oss-club.rt-thread.org/uploads/20211218/bcd1d39bfd23bf6df0493c815140c09d.png.webp) **6.心得** 第一次用新唐的开发板,很感兴趣,RT-Thread提供的BSP很全面,功能很强大,基本上直接调用API就可以了,由于身边的工具不够,仅仅通过debug测试了一下TRNG,后面闲下来,再对其他模块测试分享出来
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Bin角的最后一根
这家伙很懒,什么也没写!
文章
7
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部