【STM32】随机数发生器详解
00. 目錄
文章目錄
- 00. 目錄
- 01. 隨機(jī)數(shù)發(fā)生器簡(jiǎn)介
- 02. 隨機(jī)數(shù)發(fā)生器主要特性
- 03. 隨機(jī)數(shù)發(fā)生器功能說(shuō)明
- 04. 隨機(jī)數(shù)發(fā)生器操作
- 05. 隨機(jī)數(shù)發(fā)生器寄存器
- 5.1 RNG 控制寄存器 (RNG_CR)
- 5.2 RNG 狀態(tài)寄存器 (RNG_SR)
- 5.3 RNG 數(shù)據(jù)寄存器 (RNG_DR)
- 5.4 RNG寄存器映射
- 06. 附錄
- 07. 聲明
01. 隨機(jī)數(shù)發(fā)生器簡(jiǎn)介
RNG 處理器是一個(gè)以連續(xù)模擬噪聲為基礎(chǔ)的隨機(jī)數(shù)發(fā)生器,在主機(jī)讀數(shù)時(shí)提供一個(gè) 32 位的隨機(jī)數(shù)。
RNG 已通過(guò) FIPS PUB 140-2(2001 年 10 月 10 日)測(cè)試,成功率達(dá) 99%。
02. 隨機(jī)數(shù)發(fā)生器主要特性
● 提供由模擬量發(fā)生器產(chǎn)生的 32 位隨機(jī)數(shù)
● 兩個(gè)連續(xù)隨機(jī)數(shù)的間隔為 40 個(gè) PLL48CLK 時(shí)鐘信號(hào)周期
● 通過(guò)監(jiān)視 RNG 熵來(lái)標(biāo)識(shí)異常行為(產(chǎn)生穩(wěn)定值,或產(chǎn)生穩(wěn)定的值序列)
● 可被禁止以降低功耗
03. 隨機(jī)數(shù)發(fā)生器功能說(shuō)明
04. 隨機(jī)數(shù)發(fā)生器操作
要運(yùn)行 RNG,請(qǐng)按以下步驟操作:
如果需要,使能中斷(為此,將 RNG_CR 寄存器中的 IE 位置 1)。準(zhǔn)備好隨機(jī)數(shù)時(shí)或出現(xiàn)錯(cuò)誤時(shí)生成中斷。
通過(guò)將 RNG_CR 寄存器中的 RNGEN 位置 1 使能隨機(jī)數(shù)產(chǎn)生。這會(huì)激活模擬部分、RNG_LFSR 和錯(cuò)誤檢測(cè)器。
每次中斷時(shí),檢查確認(rèn)未出現(xiàn)錯(cuò)誤(RNG_SR 寄存器中的 SEIS 和 CEIS 位應(yīng)為 0),并且隨機(jī)數(shù)已準(zhǔn)備就緒(RNG_SR 寄存器中的 DRDY 位為 1)。然后即可讀取 RNG_DR寄存器中的內(nèi)容。
按照 FIPS PUB(聯(lián)邦信息處理標(biāo)準(zhǔn)出版物)140-2 的要求,將 RNGEN 位置 1 后產(chǎn)生的第一個(gè)隨機(jī)數(shù)不應(yīng)使用,但應(yīng)保存起來(lái),與產(chǎn)生的下一個(gè)隨機(jī)數(shù)進(jìn)行比較。隨后產(chǎn)生的每個(gè)隨機(jī)數(shù)都需要與產(chǎn)生的上一個(gè)隨機(jī)數(shù)進(jìn)行比較。如果任何一對(duì)進(jìn)行比較的數(shù)字相等,則測(cè)試失敗(連續(xù)隨機(jī)數(shù)發(fā)生器測(cè)試)。
05. 隨機(jī)數(shù)發(fā)生器寄存器
5.1 RNG 控制寄存器 (RNG_CR)
RNG control register
偏移地址:0x00
復(fù)位值:0x0000 0000
位 31:4 保留,必須保持復(fù)位值
位 3 IE :中斷使能 (Interrupt enable)
0:禁止 RNG 中斷。
1:使能 RNG 中斷。只要 RNG_SR 寄存器中 DRDY=1 或 SEIS=1 或 CEIS=1,就會(huì)掛起中斷。
位 2 RNGEN :隨機(jī)數(shù)發(fā)生器使能 (Random number generator enable)
0:禁止隨機(jī)數(shù)發(fā)生器。
1:使能隨機(jī)數(shù)發(fā)生器。
位 1:0 保留,必須保持復(fù)位值
5.2 RNG 狀態(tài)寄存器 (RNG_SR)
RNG status register
偏移地址:0x04
復(fù)位值:0x0000 0000
位 31:3 保留,必須保持復(fù)位值
位 6 SEIS :種子錯(cuò)誤中斷狀態(tài) (Seed error interrupt status)
此位與 SECS 同時(shí)設(shè)置,通過(guò)向其寫(xiě)入 0 來(lái)清零。
0:未檢測(cè)到錯(cuò)誤序列
1:檢測(cè)到以下錯(cuò)誤序列之一:
— 超過(guò) 64 個(gè)連續(xù)位具有相同值(0 或 1)
— 超過(guò) 32 個(gè)連續(xù)交替的 0 和 1 (0101010101…01)
如果 RNG_CR 寄存器中 IE = 1,則會(huì)掛起中斷。
位 5 CEIS :時(shí)鐘錯(cuò)誤中斷狀態(tài) (Clock error interrupt status)
此位與 CECS 同時(shí)設(shè)置,通過(guò)向其寫(xiě)入 0 來(lái)清零。
0:正確檢測(cè)到 PLL48CLK 時(shí)鐘
1:未正確檢測(cè)到 PLL48CLK 時(shí)鐘 (f PLL48CLK < f HCLK /16)
如果 RNG_CR 寄存器中 IE = 1,則會(huì)掛起中斷。
位 4:3 保留,必須保持復(fù)位值
位 2 SECS :種子錯(cuò)誤當(dāng)前狀態(tài) (Seed error current status)
0:目前未檢測(cè)到錯(cuò)誤序列。如果 SEIS 位置 1,則意味著已檢測(cè)到錯(cuò)誤序列并已恢復(fù)正常。
1:檢測(cè)到以下錯(cuò)誤序列之一:
— 超過(guò) 64 個(gè)連續(xù)位具有相同值(0 或 1)
— 超過(guò) 32 個(gè)連續(xù)交替的 0 和 1 (0101010101…01)
位 1 CECS :時(shí)鐘錯(cuò)誤當(dāng)前狀態(tài) (Clock error current status)
0:正確檢測(cè)到 PLL48CLK 時(shí)鐘。如果 CEIS 位置 1,則意味著已檢測(cè)到時(shí)鐘錯(cuò)誤并已恢復(fù)
正常。
1:未正確檢測(cè)到 PLL48CLK 時(shí)鐘 (f PLL48CLK < f HCLK /16)。
位 0 DRDY :數(shù)據(jù)就緒 (Data ready)
0:RNG_DR 寄存器尚未有效,無(wú)可用隨機(jī)數(shù)據(jù)
1:RNG_DR 寄存器包含有效隨機(jī)數(shù)據(jù)
注意:如果 RNG_CR 寄存器中 IE = 1 ,則會(huì)掛起中斷。
讀取 RNG_DR 寄存器后,此位恢復(fù)到 0 ,直到計(jì)算出新的有效值
5.3 RNG 數(shù)據(jù)寄存器 (RNG_DR)
RNG data register
偏移地址:0x08
復(fù)位值:0x0000 0000
RNG_DR 寄存器是只讀寄存器,在讀取時(shí)提供 32 位隨機(jī)數(shù)值。讀取后,此寄存器在最多40 個(gè) PLL48CLK 時(shí)鐘周期后,提供新的隨機(jī)數(shù)值。在讀取 RNDATA 值之前,軟件必須檢查DRDY 位是否已置 1。
5.4 RNG寄存器映射
06. 附錄
6.1 【STM32】STM32系列教程匯總
網(wǎng)址:【STM32】STM32系列教程匯總
07. 聲明
STM32F4xx英文參考手冊(cè)
總結(jié)
以上是生活随笔為你收集整理的【STM32】随机数发生器详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【STM32】RTC程序示例
- 下一篇: 【STM32】随机数发生器相关函数和类型