單芯片解決方案,開(kāi)啟全新體驗(yàn)——W55MH32高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶(hù)帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿(mǎn)足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開(kāi)發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專(zhuān)為各種復(fù)雜工控場(chǎng)景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對(duì)工業(yè)控制中多樣化的連接需求,無(wú)論是與各類(lèi)傳感器、執(zhí)行器的通信,還是對(duì)復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場(chǎng)景,軟件使用方法一致。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開(kāi)發(fā)者快速上手與深入開(kāi)發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開(kāi)發(fā)板。開(kāi)發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線(xiàn),就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開(kāi)發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開(kāi)發(fā)者全面評(píng)估芯片性能。

第三十四章 TRNG——真隨機(jī)數(shù)
在當(dāng)今數(shù)字化時(shí)代,信息安全已成為嵌入式系統(tǒng)設(shè)計(jì)中不可忽視的關(guān)鍵因素。從物聯(lián)網(wǎng)設(shè)備的身份認(rèn)證到加密通信的密鑰生成,高質(zhì)量的隨機(jī)數(shù)是構(gòu)建安全系統(tǒng)的基石。W55MH32內(nèi)置的真隨機(jī)數(shù)生成器(TRNG)模塊為開(kāi)發(fā)者提供了硬件級(jí)別的隨機(jī)數(shù)解決方案。
本文將通過(guò)W55MH32 TRNG的工作原理、應(yīng)用場(chǎng)景、程序設(shè)計(jì)等方面對(duì)真隨機(jī)數(shù)進(jìn)行講解。
1TRNG概述
1.1簡(jiǎn)介
TRNG(True Random Number Generator)即真隨機(jī)數(shù)生成器,與偽隨機(jī)數(shù)生成器(PRNG)不同,其隨機(jī)性來(lái)源于物理噪聲,而非確定性算法。W55MH32的TRNG模塊利用芯片內(nèi)部的物理噪聲源(如熱噪聲、時(shí)鐘抖動(dòng)等)生成不可預(yù)測(cè)的隨機(jī)數(shù),適用于加密、安全認(rèn)證、隨機(jī)密鑰生成等對(duì)隨機(jī)性要求高的場(chǎng)景。
1.2硬件結(jié)構(gòu)
W55MH32的TRNG模塊主要由以下部分組成:
- 噪聲源:通常基于MOS管的熱噪聲或環(huán)形振蕩器的抖動(dòng),產(chǎn)生原始隨機(jī)信號(hào)。
- 放大與整形電路:增強(qiáng)噪聲信號(hào)并轉(zhuǎn)換為可處理的數(shù)字信號(hào)。
- 采樣電路:對(duì)噪聲信號(hào)進(jìn)行采樣,生成原始隨機(jī)比特流。
- 熵累積器:收集采樣得到的熵,積累足夠的隨機(jī)性。
- 隨機(jī)數(shù)生成器:將累積的熵轉(zhuǎn)換為可用的隨機(jī)數(shù)(如32位整數(shù))。
- 硬件測(cè)試與校準(zhǔn):確保噪聲源正常工作,必要時(shí)進(jìn)行校準(zhǔn)。
1.3真隨機(jī)與偽隨機(jī)的區(qū)別
隨機(jī)數(shù)在計(jì)算機(jī)科學(xué)中主要分為兩類(lèi)——真隨機(jī)和偽隨機(jī),其對(duì)比如下所示:
特性 |
真隨機(jī)數(shù)(TRNG) |
偽隨機(jī)數(shù)(PRNG) |
隨機(jī)性來(lái)源 |
物理噪聲(熱噪聲、時(shí)鐘抖動(dòng)) |
數(shù)學(xué)算法(如線(xiàn)性同余法) |
可預(yù)測(cè)性 |
不可預(yù)測(cè)(基于物理現(xiàn)象) |
理論上可預(yù)測(cè)(已知種子和算法) |
周期性 |
無(wú)周期性 |
存在周期性(周期長(zhǎng)度取決于算法) |
硬件依賴(lài) |
需要特定硬件模塊 |
純軟件實(shí)現(xiàn) |
應(yīng)用場(chǎng)景 |
加密、安全認(rèn)證、密碼學(xué) |
模擬、游戲、非安全場(chǎng)景隨機(jī)數(shù) |
1.4工作流程
TRNG的工作流程可以分為以下幾個(gè)關(guān)鍵步驟:
- 噪聲采集階段:多個(gè)環(huán)形振蕩器同時(shí)工作,其輸出頻率的微小差異被捕獲并放大。這些差異作為原始隨機(jī)信號(hào)輸入到后續(xù)處理電路。
- 數(shù)字化階段:模擬的隨機(jī)信號(hào)被采樣并轉(zhuǎn)換為數(shù)字比特流。采樣過(guò)程通常使用高速時(shí)鐘進(jìn)行,確保捕獲到足夠的隨機(jī)信息。
- 隨機(jī)性增強(qiáng)階段:原始數(shù)字信號(hào)可能存在統(tǒng)計(jì)偏差,需要通過(guò)算法進(jìn)行后處理。W55MH32的TRNG使用一種稱(chēng)為"異或樹(shù)"的結(jié)構(gòu),將多個(gè)環(huán)形振蕩器的輸出進(jìn)行異或運(yùn)算,增強(qiáng)隨機(jī)性并消除可能的偏差。
- 質(zhì)量檢測(cè)階段:生成的隨機(jī)數(shù)經(jīng)過(guò)實(shí)時(shí)統(tǒng)計(jì)測(cè)試,確保其符合隨機(jī)性標(biāo)準(zhǔn)。W55MH32的TRNG實(shí)現(xiàn)了兩種主要測(cè)試:
- 單比特頻率測(cè)試:確保0和1的出現(xiàn)概率接近50%
- 游程測(cè)試:檢測(cè)連續(xù)相同比特的長(zhǎng)度是否符合隨機(jī)分布
- 輸出階段:通過(guò)質(zhì)量檢測(cè)的隨機(jī)數(shù)被存儲(chǔ)在數(shù)據(jù)寄存器中,供CPU讀取使用。當(dāng)檢測(cè)到質(zhì)量問(wèn)題時(shí),TRNG會(huì)自動(dòng)禁用輸出并設(shè)置錯(cuò)誤標(biāo)志。
2應(yīng)用場(chǎng)景
- 加密密鑰生成:為AES、RSA等加密算法生成初始密鑰。
- 安全認(rèn)證:生成隨機(jī)挑戰(zhàn)值(Challenge)用于身份驗(yàn)證。
- 隨機(jī)數(shù)種子:為PRNG提供高質(zhì)量的初始種子。
- 安全協(xié)議:如TLS握手、VPN密鑰協(xié)商等場(chǎng)景。
- 游戲:需要高隨機(jī)性的虛擬骰子、卡牌等應(yīng)用。
3注意事項(xiàng)
- 低功耗模式:在睡眠或停機(jī)模式下,TRNG可能停止工作,需重新初始化。
- 噪聲源依賴(lài)性:溫度、電壓等環(huán)境因素可能影響噪聲源強(qiáng)度,導(dǎo)致隨機(jī)性波動(dòng)。
- 驗(yàn)證測(cè)試:在關(guān)鍵應(yīng)用中,建議對(duì)生成的隨機(jī)數(shù)進(jìn)行離線(xiàn)測(cè)試(如使用NIST測(cè)試工具)。
- 多線(xiàn)程安全:在RTOS環(huán)境中,訪(fǎng)問(wèn)TRNG時(shí)需加鎖,避免競(jìng)爭(zhēng)條件。
4程序設(shè)計(jì)
4.1TRNG_IntTest例程
TRNG_IntTest例程主要實(shí)現(xiàn)了基于W55MH32芯片的真隨機(jī)數(shù)生成器(TRNG)中斷測(cè)試功能。以下是實(shí)現(xiàn)過(guò)程和結(jié)果驗(yàn)證:
4.1.1執(zhí)行函數(shù)TRNG_Int()
TRNG的中斷配置、TRNG輸出使能、中斷使能、隨機(jī)種子設(shè)置和啟動(dòng)TRNG硬件主要在TRNG_Int()函數(shù)中實(shí)現(xiàn):
void TRNG_Int(void)
{
NVIC_Configuration();
TRNG_Out(ENABLE);
TRNG_ITConfig(ENABLE);
TRNG_SetPseudoRandom(0X12345560);
TRNG_Start();
}
4.1.2配置嵌套向量中斷控制器
NVIC_Configuration()為中斷配置函數(shù):
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetPriorityGrouping(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TRNG_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
該函數(shù)主要進(jìn)行了如下配置:
- NVIC_PriorityGroup_1:表示使用優(yōu)先級(jí)分組模式1,即:
- 搶占優(yōu)先級(jí)占1位(0-1)
- 子優(yōu)先級(jí)占3位(0-7)
- 中斷參數(shù)配置:
- 中斷源:TRNG_IRQn(真隨機(jī)數(shù)生成器中斷)
- 雙重優(yōu)先級(jí)機(jī)制:搶占優(yōu)先級(jí)1可以打斷更低搶占優(yōu)先級(jí)的中斷
- 子優(yōu)先級(jí)1:相同搶占優(yōu)先級(jí)時(shí)決定響應(yīng)順序
- 使能TRNG硬件中斷通道
- NVIC初始化
4.1.3使能TRNG輸出功能
TRNG_Out()函數(shù)是TRNG初始化過(guò)程中的關(guān)鍵步驟,通過(guò)控制時(shí)鐘來(lái)啟用或禁用TRNG模塊,從而間接控制隨機(jī)數(shù)的生成:
void TRNG_Out(FunctionalStateNewState)
{
if(NewState!= DISABLE)
{
RCC->RCC_SYSCFG_CONFIG=0x01;
SYSCFG->SYSCFG_LOCK =0xCDED3526;
SYSCFG->SSC_CLK_EN |= TRNG_RNG_ENABLE;
}
else
{
RCC->RCC_SYSCFG_CONFIG=0x00;
SYSCFG->SSC_CLK_EN &=~TRNG_RNG_ENABLE;
}
}
當(dāng)使能TRNG輸出時(shí),首先配置SYSCFG時(shí)鐘域(RCC_SYSCFG_CONFIG=0x01),然后向鎖定寄存器寫(xiě)入特定密鑰(SYSCFG_LOCK=0xCDED3526)以解鎖SYSCFG寄存器,最后設(shè)置安全系統(tǒng)時(shí)鐘使能寄存器(SSC_CLK_EN)的對(duì)應(yīng)位以開(kāi)啟TRNG時(shí)鐘。
當(dāng)失能輸出時(shí),則執(zhí)行相反操作:清除時(shí)鐘域配置并禁用TRNG時(shí)鐘。這種設(shè)計(jì)通過(guò)時(shí)鐘控制間接管理TRNG模塊,是低功耗和安全設(shè)計(jì)的常見(jiàn)做法,其中鎖定機(jī)制可防止意外修改寄存器。
4.1.4使能TRNG中斷
TRNG_ITConfig()是控制TRNG中斷功能的函數(shù),主要用于啟用或禁用TRNG模塊的中斷機(jī)制:
void TRNG_ITConfig(FunctionalStateNewState)
{
if(NewState!= DISABLE)
{
TRNG->RNG_CSR|= TRNG_RNG_CSR_INTP_EN_Mask;
}
else
{
TRNG->RNG_CSR&=~TRNG_RNG_CSR_INTP_EN_Mask;
}
}
當(dāng)傳入?yún)?shù)為ENABLE使能中斷時(shí),函數(shù)通過(guò)位操作(|=)將 TRNG控制狀態(tài)寄存器(RNG_CSR)中的中斷使能位(TRNG_RNG_CSR_INTP_EN_Mask)置 1,允許 TRNG在隨機(jī)數(shù)生成完成或檢測(cè)到錯(cuò)誤時(shí)觸發(fā)中斷。
當(dāng)傳入為DISABLE失能中斷時(shí),則通過(guò)位操作(&= ~)清除該位,禁用中斷功能。
4.1.5設(shè)置偽隨機(jī)數(shù)種子
通過(guò)TRNG_SetPseudoRandom()函數(shù)設(shè)置偽隨機(jī)種子,主要用于增強(qiáng)隨機(jī)數(shù)生成的質(zhì)量或?qū)崿F(xiàn)特定應(yīng)用場(chǎng)景:
void TRNG_SetPseudoRandom(uint32_t TRNG_PseudoRandom)
{
TRNG->RNG_PN= TRNG_PseudoRandom;
}
該函數(shù)將傳入的32位種子值寫(xiě)入RNG_PN寄存器。
4.1.6啟動(dòng)TRNG硬件
TRNG_Start()為啟動(dòng)TRNG(真隨機(jī)數(shù)生成器)的函數(shù),通過(guò)配置特定寄存器來(lái)激活TRNG模塊:
void TRNG_Start(void)
{
TRNG->RNG_AMA&=~TRNG_RNG_AMA_PD_ALL_Mask;
TRNG->RNG_CSR&=~TRNG_RNG_CSR_S128_TRNG0_Mask;
}
函數(shù)首先通過(guò)TRNG->RNG_AMA &= ~TRNG_RNG_AMA_PD_ALL_Mask來(lái)清除電源關(guān)閉位,將TRNG的模擬電路從低功耗模式喚醒,激活環(huán)形振蕩器等物理隨機(jī)源;接著通過(guò)TRNG->RNG_CSR &= ~TRNG_RNG_CSR_S128_TRNG0_Mask清除128位采樣模式標(biāo)志。這兩個(gè)步驟共同完成TRNG的啟動(dòng)初始化,為后續(xù)生成隨機(jī)數(shù)做準(zhǔn)備。
4.1.7中斷服務(wù)函數(shù)
RNG_IRQHandler()是處理TRNG中斷的函數(shù),主要用于響應(yīng)隨機(jī)數(shù)生成完成事件和檢測(cè)到的安全攻擊事件:
void RNG_IRQHandler(void)
{
if(TRNG_GetITStatus(TRNG_IT_RNG0_S128)== SET)
{
printf("Rng : %08X %08X %08X %08X rn", TRNG->RNG_DATA, TRNG->RNG_DATA, TRNG->RNG_DATA, TRNG->RNG_DATA);
TRNG_ClearITPendingBit(TRNG_IT_RNG0_S128);
}
if(TRNG_GetITStatus(TRNG_IT_RNG0_ATTACK)== SET)
{
TRNG_ClearITPendingBit(TRNG_IT_RNG0_ATTACK);
}
NVIC_ClearPendingIRQ(TRNG_IRQn);
}
當(dāng)128位隨機(jī)數(shù)生成完成(TRNG_IT_RNG0_S128標(biāo)志置位)時(shí),函數(shù)通過(guò)連續(xù)4次讀取RNG_DATA寄存器獲取128位隨機(jī)數(shù)(4個(gè)32位值)并打印輸出,隨后清除中斷標(biāo)志;當(dāng)檢測(cè)到安全攻擊(TRNG_IT_RNG0_ATTACK標(biāo)志置位)時(shí),清除中斷標(biāo)志。最后,函數(shù)清除NVIC中斷掛起標(biāo)志以允許后續(xù)中斷。
4.1.8主函數(shù)main()
主函數(shù)main()如下:
int main(void)
{
RCC_ClocksTypeDef clocks;
delay_init();
UART_Configuration(115200);
printf("TRNG Int Out Test.n");
RCC_GetClocksFreq(&clocks);
printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn",
(float)clocks.SYSCLK_Frequency /1000000,(float)clocks.HCLK_Frequency/1000000,
(float)clocks.PCLK1_Frequency /1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000);
TRNG_Int();
while(1);
}
程序首先初始化延時(shí)函數(shù)并配置串口通信(波特率115200),隨后打印系統(tǒng)各時(shí)鐘頻率(SYSCLK、HCLK、PCLK1/2、ADCCLK)。接著調(diào)用TRNG_Int()函數(shù)初始化TRNG,該函數(shù)會(huì)配置NVIC中斷、使能TRNG輸出、設(shè)置中斷模式和偽隨機(jī)種子并啟動(dòng)TRNG。最后程序進(jìn)入無(wú)限循環(huán),等待TRNG生成128位隨機(jī)數(shù)時(shí)觸發(fā)中斷,由中斷處理函數(shù)RNG_IRQHandler()讀取并打印隨機(jī)數(shù)。
4.1.9下載驗(yàn)證
程序下載運(yùn)行后,首先打印了示例名稱(chēng)和系統(tǒng)各時(shí)鐘的頻率,然后便不停地打印生成的隨機(jī)數(shù):

4.2TRNG_PollingTest例程
TRNG_PollingTest例程為T(mén)RNG的輪詢(xún)模式操作,與之前的中斷模式不同,此函數(shù)通過(guò)主動(dòng)查詢(xún)方式獲取隨機(jī)數(shù)。
4.2.1執(zhí)行函數(shù)TRNG_Polling()
TRNG的輸出使能、啟動(dòng)和查詢(xún)打印的功能主要在TRNG_Polling()函數(shù)中實(shí)現(xiàn):
void TRNG_Polling(void)
{
uint32_tBuf[4];
TRNG_Out(ENABLE);
TRNG_Start();
while(1)
{
if(0== TRNG_Get(Buf))
{
printf("Rng : %08X %08X %08X %08X rn",Buf[0],Buf[1],Buf[2],Buf[3]);
TRNG_ClearITPendingBit(TRNG_IT_RNG0_S128);
}
}
}
首先定義了一個(gè)4元素的32位整數(shù)數(shù)組作為緩沖區(qū),然后調(diào)用TRNG_Out(ENABLE)使能TRNG輸出,并通過(guò)TRNG_Start()啟動(dòng)TRNG生成隨機(jī)數(shù)。隨后進(jìn)入無(wú)限循環(huán),不斷調(diào)用TRNG_Get()函數(shù)嘗試獲取隨機(jī)數(shù),當(dāng)該函數(shù)返回0時(shí)表示獲取成功,此時(shí)將4個(gè)32位隨機(jī)數(shù)打印輸出,并清除中斷標(biāo)志位(即使在輪詢(xún)模式下也需清除)。
TRNG_Start()和TRNG_Get()在上節(jié)內(nèi)容已經(jīng)講解,且主函數(shù)僅示例名稱(chēng)和執(zhí)行函數(shù)有所修改,其他保持一致,這里就不再贅述。
4.2.2下載驗(yàn)證
程序下載運(yùn)行后,首先打印了示例名稱(chēng)和各系統(tǒng)時(shí)鐘頻率,接著便不斷打印生成的隨機(jī)數(shù):

5總結(jié)
W55MH32的TRNG模塊為嵌入式系統(tǒng)提供了硬件級(jí)別的真隨機(jī)數(shù)生成能力,是構(gòu)建安全系統(tǒng)的重要組成部分。通過(guò)合理配置和使用,可以生成高質(zhì)量的隨機(jī)數(shù),滿(mǎn)足加密、認(rèn)證等安全敏感應(yīng)用的需求。
WIZnet是一家無(wú)晶圓廠(chǎng)半導(dǎo)體公司,成立于1998年。產(chǎn)品包括互聯(lián)網(wǎng)處理器iMCU?,它采用TOE(TCP/IP卸載引擎)技術(shù),基于獨(dú)特的專(zhuān)利全硬連線(xiàn)TCP/IP。iMCU?面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet在全球擁有70多家分銷(xiāo)商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷(xiāo)。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。
-
隨機(jī)數(shù)發(fā)生器
+關(guān)注
關(guān)注
0文章
22瀏覽量
11151
發(fā)布評(píng)論請(qǐng)先 登錄
第十四章 USART——串口通訊

第十四章 ADC(下篇)

W55MH32高性能以太網(wǎng)單片機(jī)開(kāi)發(fā)課件 第十四章 ADC(上篇)

WIZnet W55MH32以太網(wǎng)單片機(jī)開(kāi)發(fā)教程第十一章 通用定時(shí)器(下篇)

WIZnet W55MH32以太網(wǎng)單片機(jī)開(kāi)發(fā)教程 第十一章 通用定時(shí)器(上篇)

W55MH32高性能以太網(wǎng)單片機(jī)教程 第九章 窗口看門(mén)狗(WWDG)

第二章 開(kāi)發(fā)板與芯片介紹 詳解W55MH32芯片及開(kāi)發(fā)板

第一章 W55MH32 高性能以太網(wǎng)單片機(jī)的學(xué)習(xí)方法概述

第十章 W55MH32中斷應(yīng)用概覽

即刻啟程,踏上W55MH32高性能以太網(wǎng)單片機(jī)學(xué)習(xí)之路!

WIZnet高性能以太網(wǎng)單片機(jī)W55MH32重磅發(fā)布!

labview怎么輸出不重復(fù)的整數(shù)隨機(jī)數(shù)
LuatOS開(kāi)發(fā)之4G模組隨機(jī)數(shù)(random)|實(shí)戰(zhàn)指南

解析Air780E模組LuatOS開(kāi)發(fā)的隨機(jī)數(shù)(random) 示例篇

雅特力AT32 MCU的隨機(jī)數(shù)生成

評(píng)論