Регистры TRNG RP2350
Регистры генератора истинно случайных чисел RP2350 на IP-блоке Arm TrustZone TRNG: запуск, 192 бита энтропии за один цикл генерации, три встроенные проверки качества, прерывания и настройка кольцевого генератора.
Содержание
- Регистры блока
- TRNG_RNG_IMR
- TRNG_RNG_ISR
- TRNG_RNG_ICR
- TRNG_TRNG_CONFIG
- TRNG_TRNG_VALID
- TRNG_EHR_DATA0
- TRNG_EHR_DATA1
- TRNG_EHR_DATA2
- TRNG_EHR_DATA3
- TRNG_EHR_DATA4
- TRNG_EHR_DATA5
- TRNG_RND_SOURCE_ENABLE
- TRNG_SAMPLE_CNT1
- TRNG_AUTOCORR_STATISTIC
- TRNG_TRNG_DEBUG_CONTROL
- TRNG_TRNG_SW_RESET
- TRNG_RNG_DEBUG_EN_INPUT
- TRNG_TRNG_BUSY
- TRNG_RST_BITS_COUNTER
- TRNG_RNG_VERSION
- TRNG_RNG_BIST_CNTR_0
- TRNG_RNG_BIST_CNTR_1
- TRNG_RNG_BIST_CNTR_2
TRNG собирает случайные биты, периодически считывая собственный кольцевой генератор, который работает асинхронно с системной частотой. Блок соответствует FIPS 140-2, BSI AIS-31 и NIST SP 800-90B и при 150 МГц даёт около 7,5 кбит/с энтропии; за один цикл генерации получается 192 бита в регистрах EHR_DATA0–EHR_DATA5 (даташит RP2350, раздел 12.12).
Генерацию запускает бит RND_SRC_EN в RND_SOURCE_ENABLE. Она идёт до готового результата или до отказа одной из трёх проверок — фон Неймана (32 одинаковых бита подряд), CRNGT (два одинаковых 16-битных блока подряд) или автокорреляции; итог показывает RNG_ISR. Пока результата нет, EHR_DATA читаются как 0; чтение EHR_DATA5 очищает все шесть регистров. После генерации RND_SRC_EN сбрасывают.
Длину цепочки кольцевого генератора выбирает TRNG_CONFIG, период выборки — SAMPLE_CNT1. Для среднего времени генерации около 2 мс даташит советует длину цепочки 0 или 1 и период 20–25. Загрузочное ПЗУ работает иначе: отключает проверки и передаёт сырые выборки кольцевого генератора в ускоритель SHA-256.
| Экземпляр | Базовый адрес |
|---|---|
| TRNG | 0x400F 0000 |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| TRNG_RNG_IMR | 0x0100 | Маски прерываний | 0x0000 000F |
| TRNG_RNG_ISR | 0x0104 | Состояние: готовность и ошибки проверок | 0x0000 0000 |
| TRNG_RNG_ICR | 0x0108 | Сброс флагов состояния | 0x0000 0000 |
| TRNG_TRNG_CONFIG | 0x010C | Длина цепочки кольцевого генератора | 0x0000 0000 |
| TRNG_TRNG_VALID | 0x0110 | Готовность 192 бит | 0x0000 0000 |
| TRNG_EHR_DATA0 | 0x0114 | Собранная энтропия, биты 31:0 | 0x0000 0000 |
| TRNG_EHR_DATA1 | 0x0118 | Собранная энтропия, биты 63:32 | 0x0000 0000 |
| TRNG_EHR_DATA2 | 0x011C | Собранная энтропия, биты 95:64 | 0x0000 0000 |
| TRNG_EHR_DATA3 | 0x0120 | Собранная энтропия, биты 127:96 | 0x0000 0000 |
| TRNG_EHR_DATA4 | 0x0124 | Собранная энтропия, биты 159:128 | 0x0000 0000 |
| TRNG_EHR_DATA5 | 0x0128 | Собранная энтропия, биты 191:160 | 0x0000 0000 |
| TRNG_RND_SOURCE_ENABLE | 0x012C | Включение источника энтропии | 0x0000 0000 |
| TRNG_SAMPLE_CNT1 | 0x0130 | Период выборки кольцевого генератора | 0x0000 FFFF |
| TRNG_AUTOCORR_STATISTIC | 0x0134 | Статистика теста автокорреляции | 0x0000 0000 |
| TRNG_TRNG_DEBUG_CONTROL | 0x0138 | Обход проверок | 0x0000 0000 |
| TRNG_TRNG_SW_RESET | 0x0140 | Программный сброс генератора | 0x0000 0000 |
| TRNG_RNG_DEBUG_EN_INPUT | 0x01B4 | Отладочный режим | 0x0000 0000 |
| TRNG_TRNG_BUSY | 0x01B8 | Генератор занят | 0x0000 0000 |
| TRNG_RST_BITS_COUNTER | 0x01BC | Сброс счётчика собранных битов | 0x0000 0000 |
| TRNG_RNG_VERSION | 0x01C0 | Конфигурация IP-блока | 0x0000 0000 |
| TRNG_RNG_BIST_CNTR_0 | 0x01E0 | Результат самопроверки 0 | 0x0000 0000 |
| TRNG_RNG_BIST_CNTR_1 | 0x01E4 | Результат самопроверки 1 | 0x0000 0000 |
| TRNG_RNG_BIST_CNTR_2 | 0x01E8 | Результат самопроверки 2 | 0x0000 0000 |
TRNG_RNG_IMR — маски прерываний
Смещение 0x0100, адрес 0x400F 0100, после сброса 0x0000 000F. Макросы pico-sdk: TRNG_RNG_IMR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | VN_ERR_INT_MASK | CRNGT_ERR_INT_MASK | AUTOCORR_ERR_INT_MASK | EHR_VALID_INT_MASK | |||||||||||
- RESERVED (биты 31:4, только чтение, после сброса 0x0000000) — Зарезервировано.
- VN_ERR_INT_MASK (бит 3, чтение и запись, после сброса 0x1) — Маска прерывания по ошибке фон Неймана: 1 — прерывания нет.
- CRNGT_ERR_INT_MASK (бит 2, чтение и запись, после сброса 0x1) — Маска прерывания по ошибке CRNGT: 1 — прерывания нет.
- AUTOCORR_ERR_INT_MASK (бит 1, чтение и запись, после сброса 0x1) — Маска прерывания по ошибке автокорреляции: 1 — прерывания нет.
- EHR_VALID_INT_MASK (бит 0, чтение и запись, после сброса 0x1) — Маска прерывания по готовности 192 бит: 1 — прерывания нет.
TRNG_RNG_ISR — состояние: готовность и ошибки проверок
Смещение 0x0104, адрес 0x400F 0104, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_ISR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | VN_ERR | CRNGT_ERR | AUTOCORR_ERR | EHR_VALID | |||||||||||
- RESERVED (биты 31:4, только чтение, после сброса 0x0000000) — Зарезервировано.
- VN_ERR (бит 3, только чтение, после сброса 0x0) — Ошибка фон Неймана: 32 одинаковых бита подряд.
- CRNGT_ERR (бит 2, только чтение, после сброса 0x0) — Ошибка CRNGT: два одинаковых 16-битных блока подряд.
- AUTOCORR_ERR (бит 1, только чтение, после сброса 0x0) — Тест автокорреляции не прошёл четыре раза подряд — генератор не работает до сброса.
- EHR_VALID (бит 0, только чтение, после сброса 0x0) — Собрано 192 бита, их можно читать.
TRNG_RNG_ICR — сброс флагов состояния
Смещение 0x0108, адрес 0x400F 0108, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_ICR_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | VN_ERR | CRNGT_ERR | AUTOCORR_ERR | EHR_VALID | |||||||||||
- RESERVED (биты 31:4, только чтение, после сброса 0x0000000) — Зарезервировано.
- VN_ERR (бит 3, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает VN_ERR в RNG_ISR.
- CRNGT_ERR (бит 2, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает CRNGT_ERR в RNG_ISR.
- AUTOCORR_ERR (бит 1, чтение и запись, после сброса 0x0) — Программно не сбрасывается — только сбросом генератора.
- EHR_VALID (бит 0, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает EHR_VALID в RNG_ISR.
TRNG_TRNG_CONFIG — длина цепочки кольцевого генератора
Смещение 0x010C, адрес 0x400F 010C, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_TRNG_CONFIG_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | RND_SRC_SEL | ||||||||||||||
- RESERVED (биты 31:2, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- RND_SRC_SEL (биты 1:0, чтение и запись, после сброса 0x0) — Длина цепочки инверторов кольцевого генератора — один из четырёх вариантов.
TRNG_TRNG_VALID — готовность 192 бит
Смещение 0x0110, адрес 0x400F 0110, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_TRNG_VALID_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | EHR_VALID | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- EHR_VALID (бит 0, только чтение, после сброса 0x0) — Сбор битов завершён, EHR_DATA можно читать.
TRNG_EHR_DATA0 — собранная энтропия, биты 31:0
Смещение 0x0114, адрес 0x400F 0114, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA0_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_EHR_DATA1 — собранная энтропия, биты 63:32
Смещение 0x0118, адрес 0x400F 0118, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA1_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_EHR_DATA2 — собранная энтропия, биты 95:64
Смещение 0x011C, адрес 0x400F 011C, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA2_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_EHR_DATA3 — собранная энтропия, биты 127:96
Смещение 0x0120, адрес 0x400F 0120, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA3_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_EHR_DATA4 — собранная энтропия, биты 159:128
Смещение 0x0124, адрес 0x400F 0124, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA4_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_EHR_DATA5 — собранная энтропия, биты 191:160
Смещение 0x0128, адрес 0x400F 0128, после сброса 0x0000 0000, только чтение. Макросы pico-sdk: TRNG_EHR_DATA5_…
Значение занимает регистр целиком, отдельных полей нет.
TRNG_RND_SOURCE_ENABLE — включение источника энтропии
Смещение 0x012C, адрес 0x400F 012C, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RND_SOURCE_ENABLE_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | RND_SRC_EN | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- RND_SRC_EN (бит 0, чтение и запись, после сброса 0x0) — Включение источника энтропии — запуск генерации.
TRNG_SAMPLE_CNT1 — период выборки кольцевого генератора
Смещение 0x0130, адрес 0x400F 0130, после сброса 0x0000 FFFF. Макросы pico-sdk: TRNG_SAMPLE_CNT1_…
- SAMPLE_CNTR1 (биты 31:0, чтение и запись, после сброса 0x0000 FFFF) — Тактов между двумя выборками кольцевого генератора; при обходе балансировщика фон Неймана — не меньше 17.
TRNG_AUTOCORR_STATISTIC — статистика теста автокорреляции
Смещение 0x0134, адрес 0x400F 0134, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_AUTOCORR_STATISTIC_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | AUTOCORR_FAILS | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| AUTOCORR_FAILS | AUTOCORR_TRYS | ||||||||||||||
- RESERVED (биты 31:22, только чтение, после сброса 0x000) — Зарезервировано.
- AUTOCORR_FAILS (биты 21:14, чтение и запись, после сброса 0x00) — Число отказов теста автокорреляции; любая запись в регистр обнуляет счётчики.
- AUTOCORR_TRYS (биты 13:0, чтение и запись, после сброса 0x0000) — Число запусков теста автокорреляции.
TRNG_TRNG_DEBUG_CONTROL — обход проверок
Смещение 0x0138, адрес 0x400F 0138, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_TRNG_DEBUG_CONTROL_…
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | AUTO_CORRELATE_BYPASS | TRNG_CRNGT_BYPASS | VNC_BYPASS | RESERVED | |||||||||||
- AUTO_CORRELATE_BYPASS (бит 3, чтение и запись, после сброса 0x0) — Обход теста автокорреляции.
- TRNG_CRNGT_BYPASS (бит 2, чтение и запись, после сброса 0x0) — Обход теста CRNGT.
- VNC_BYPASS (бит 1, чтение и запись, после сброса 0x0) — Обход балансировщика фон Неймана вместе с проверкой 32 одинаковых битов.
- RESERVED (бит 0, только чтение, после сброса 0x0) — Зарезервировано.
TRNG_TRNG_SW_RESET — программный сброс генератора
Смещение 0x0140, адрес 0x400F 0140, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_TRNG_SW_RESET_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | TRNG_SW_RESET | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- TRNG_SW_RESET (бит 0, чтение и запись, после сброса 0x0) — Запись 1 сбрасывает генератор.
TRNG_RNG_DEBUG_EN_INPUT — отладочный режим
Смещение 0x01B4, адрес 0x400F 01B4, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_DEBUG_EN_INPUT_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | RNG_DEBUG_EN | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- RNG_DEBUG_EN (бит 0, чтение и запись, после сброса 0x0) — Отладочный режим генератора.
TRNG_TRNG_BUSY — генератор занят
Смещение 0x01B8, адрес 0x400F 01B8, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_TRNG_BUSY_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | TRNG_BUSY | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- TRNG_BUSY (бит 0, только чтение, после сброса 0x0) — Генератор занят.
TRNG_RST_BITS_COUNTER — сброс счётчика собранных битов
Смещение 0x01BC, адрес 0x400F 01BC, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RST_BITS_COUNTER_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | RST_BITS_COUNTER | ||||||||||||||
- RESERVED (биты 31:1, только чтение, после сброса 0x0000 0000) — Зарезервировано.
- RST_BITS_COUNTER (бит 0, чтение и запись, после сброса 0x0) — Любая запись сбрасывает счётчик собранных битов и готовность; RND_SRC_EN при этом должен быть сброшен.
TRNG_RNG_VERSION — конфигурация IP-блока
Смещение 0x01C0, адрес 0x400F 01C0, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_VERSION_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RESERVED | RNG_USE_5_SBOXES | RESEEDING_EXISTS | KAT_EXISTS | PRNG_EXISTS | TRNG_TESTS_BYPASS_EN | AUTOCORR_EXISTS | CRNGT_EXISTS | EHR_WIDTH_192 | |||||||
- RESERVED (биты 31:8, только чтение, после сброса 0x000000) — Зарезервировано.
- RNG_USE_5_SBOXES (бит 7, только чтение, после сброса 0x0) — AES с 5 S-блоками (1) или с 20 (0).
- RESEEDING_EXISTS (бит 6, только чтение, после сброса 0x0) — Есть повторная инициализация (reseeding).
- KAT_EXISTS (бит 5, только чтение, после сброса 0x0) — Есть самопроверка на известных ответах (KAT).
- PRNG_EXISTS (бит 4, только чтение, после сброса 0x0) — Есть генератор псевдослучайных чисел.
- TRNG_TESTS_BYPASS_EN (бит 3, только чтение, после сброса 0x0) — Тесты можно обходить.
- AUTOCORR_EXISTS (бит 2, только чтение, после сброса 0x0) — Есть тест автокорреляции.
- CRNGT_EXISTS (бит 1, только чтение, после сброса 0x0) — Есть тест CRNGT.
- EHR_WIDTH_192 (бит 0, только чтение, после сброса 0x0) — Ширина EHR: 1 — 192 бита, 0 — 128.
TRNG_RNG_BIST_CNTR_0 — результат самопроверки 0
Смещение 0x01E0, адрес 0x400F 01E0, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_BIST_CNTR_0_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | ROSC_CNTR_VAL | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ROSC_CNTR_VAL | |||||||||||||||
- RESERVED (биты 31:22, только чтение, после сброса 0x000) — Зарезервировано.
- ROSC_CNTR_VAL (биты 21:0, только чтение, после сброса 0x000000) — Счётчик встроенной самопроверки (BIST) генератора.
TRNG_RNG_BIST_CNTR_1 — результат самопроверки 1
Смещение 0x01E4, адрес 0x400F 01E4, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_BIST_CNTR_1_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | ROSC_CNTR_VAL | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ROSC_CNTR_VAL | |||||||||||||||
- RESERVED (биты 31:22, только чтение, после сброса 0x000) — Зарезервировано.
- ROSC_CNTR_VAL (биты 21:0, только чтение, после сброса 0x000000) — Счётчик встроенной самопроверки (BIST) генератора.
TRNG_RNG_BIST_CNTR_2 — результат самопроверки 2
Смещение 0x01E8, адрес 0x400F 01E8, после сброса 0x0000 0000. Макросы pico-sdk: TRNG_RNG_BIST_CNTR_2_…
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RESERVED | ROSC_CNTR_VAL | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ROSC_CNTR_VAL | |||||||||||||||
- RESERVED (биты 31:22, только чтение, после сброса 0x000) — Зарезервировано.
- ROSC_CNTR_VAL (биты 21:0, только чтение, после сброса 0x000000) — Счётчик встроенной самопроверки (BIST) генератора.
Частые вопросы
Как получить случайное число от TRNG RP2350?
Установите RND_SRC_EN в RND_SOURCE_ENABLE и дождитесь EHR_VALID в RNG_ISR — или прерывания, если оно разрешено в RNG_IMR. Прочитайте 192 бита из EHR_DATA0–EHR_DATA5 и сбросьте RND_SRC_EN; если проверка не прошла, результата нет и генерацию запускают снова.
Почему TRNG RP2350 иногда отвечает очень долго?
Генерация недетерминирована: обычно она занимает примерно одинаковое время, но иногда дольше среднего более чем в 100 раз, а результат, не прошедший проверку энтропии, отбрасывается. Даташит советует держать небольшой запас случайных чисел и пополнять его заранее.
Источники
- Raspberry Pi. RP2350 Datasheet (release 8, build 80d627281ed5) — раздел 12.12.5: список регистров, назначение полей, тип доступа и значения после сброса
- Raspberry Pi. pico-sdk 2.1.1: заголовки src/rp2350/hardware_regs/include/hardware/regs/*.h (коммит bddd20f) — смещения, биты, тип доступа и значение после сброса каждого поля, базовые адреса из addressmap.h; лицензия BSD-3-Clause
Нашли ошибку в регистрах?
Другие регистры RP2350
- Все регистры RP2350Блоки периферии и базовые адреса
- SHA256 — ускоритель SHA-256SHA256_CSR, SHA256_WDATA, SHA256_SUMn
- TICKS — генераторы тиковTICKS_PROC0_CTRL, TICKS_PROC0_CYCLES, TICKS_PROC0_COUNT, TICKS_PROC1_CTRL, TICKS_PROC1_CYCLES, TICKS_PROC1_COUNT
- GLITCH_DETECTOR — детектор сбоевGLITCH_DETECTOR_ARM, GLITCH_DETECTOR_DISARM, GLITCH_DETECTOR_SENSITIVITY, GLITCH_DETECTOR_LOCK, GLITCH_DETECTOR_TRIG_STATUS, GLITCH_DETECTOR_TRIG_FORCE
- HSTX — быстрый последовательный выводHSTX_CTRL_CSR, HSTX_CTRL_BITn, HSTX_CTRL_EXPAND_SHIFT, HSTX_CTRL_EXPAND_TMDS
- HSTX_FIFO — FIFO быстрого выводаHSTX_FIFO_STAT, HSTX_FIFO_FIFO
- QMI — интерфейс QSPI-памятиQMI_DIRECT_CSR, QMI_DIRECT_TX, QMI_DIRECT_RX, QMI_M0_TIMING, QMI_M0_RFMT, QMI_M0_RCMD
- XIP_AUX — быстрый порт FIFO XIPXIP_AUX_STREAM, XIP_AUX_QMI_DIRECT_TX, XIP_AUX_QMI_DIRECT_RX
- BOOTRAM — регистры загрузочной памятиBOOTRAM_WRITE_ONCE0, BOOTRAM_WRITE_ONCE1, BOOTRAM_BOOTLOCK_STAT, BOOTRAM_BOOTLOCKn
- CORESIGHT_TRACE — FIFO трассировкиCORESIGHT_TRACE_CTRL_STATUS, CORESIGHT_TRACE_TRACE_CAPTURE_FIFO
- EPPB — регистры ядра от Raspberry PiM33_EPPB_NMI_MASK0, M33_EPPB_NMI_MASK1, M33_EPPB_SLEEPCTRL
- OTP — однократно программируемая памятьOTP_SW_LOCKn, OTP_SBPI_INSTR, OTP_SBPI_WDATA_0, OTP_SBPI_WDATA_1, OTP_SBPI_WDATA_2, OTP_SBPI_WDATA_3
- POWMAN — менеджер питанияPOWMAN_BADPASSWD, POWMAN_VREG_CTRL, POWMAN_VREG_STS, POWMAN_VREG, POWMAN_VREG_LP_ENTRY, POWMAN_VREG_LP_EXIT
- ACCESSCTRL — права доступа к шинеACCESSCTRL_LOCK, ACCESSCTRL_FORCE_CORE_NS, ACCESSCTRL_CFGRESET, ACCESSCTRL_GPIO_NSMASK0, ACCESSCTRL_GPIO_NSMASK1, ACCESSCTRL_ROM
- TIMER — системные таймерыTIMER_TIMEHW, TIMER_TIMELW, TIMER_TIMEHR, TIMER_TIMELR, TIMER_ALARMn, TIMER_ARMED
- WATCHDOG — сторожевой таймерWATCHDOG_CTRL, WATCHDOG_LOAD, WATCHDOG_REASON, WATCHDOG_SCRATCHn
- ADC — аналого-цифровой преобразовательADC_CS, ADC_RESULT, ADC_FCS, ADC_FIFO, ADC_DIV, ADC_INTR
- PWM — широтно-импульсная модуляцияPWM_CHn_CSR, PWM_CHn_DIV, PWM_CHn_CTR, PWM_CHn_CC, PWM_CHn_TOP, PWM_EN
- XOSC — кварцевый генераторXOSC_CTRL, XOSC_STATUS, XOSC_DORMANT, XOSC_STARTUP, XOSC_COUNT
- PLL — умножители частотыPLL_CS, PLL_PWR, PLL_FBDIV_INT, PLL_PRIM, PLL_INTR, PLL_INTE
- PADS_BANK0 — электрические настройки GPIOPADS_BANK0_VOLTAGE_SELECT, PADS_BANK0_GPIOn, PADS_BANK0_SWCLK, PADS_BANK0_SWD
- PADS_QSPI — электрические настройки выводов QSPIPADS_QSPI_VOLTAGE_SELECT, PADS_QSPI_GPIO_QSPI_SCLK, PADS_QSPI_GPIO_QSPI_SD0, PADS_QSPI_GPIO_QSPI_SD1, PADS_QSPI_GPIO_QSPI_SD2, PADS_QSPI_GPIO_QSPI_SD3
- RESETS — сброс подсистемRESETS_RESET, RESETS_WDSEL, RESETS_RESET_DONE
- PSM — автомат включения питанияPSM_FRCE_ON, PSM_FRCE_OFF, PSM_WDSEL, PSM_DONE
- SYSINFO — сведения о чипеSYSINFO_CHIP_ID, SYSINFO_PACKAGE_SEL, SYSINFO_PLATFORM, SYSINFO_GITREF_RP2350
- BUSCTRL — управление шинойBUSCTRL_BUS_PRIORITY, BUSCTRL_BUS_PRIORITY_ACK, BUSCTRL_PERFCTR_EN, BUSCTRL_PERFCTRn, BUSCTRL_PERFSELn
- ROSC — кольцевой генераторROSC_CTRL, ROSC_FREQA, ROSC_FREQB, ROSC_RANDOM, ROSC_DORMANT, ROSC_DIV
- SYSCFG — системные настройкиSYSCFG_PROC_CONFIG, SYSCFG_PROC_IN_SYNC_BYPASS, SYSCFG_PROC_IN_SYNC_BYPASS_HI, SYSCFG_DBGFORCE, SYSCFG_MEMPOWERDOWN, SYSCFG_AUXCTRL
- XIP_CTRL — кеш выполнения из флеш-памятиXIP_CTRL, XIP_STAT, XIP_CTR_HIT, XIP_CTR_ACC, XIP_STREAM_ADDR, XIP_STREAM_CTR
- USB — контроллер USBUSB_ADDR_ENDP, USB_ADDR_ENDPn, USB_MAIN_CTRL, USB_SOF_WR, USB_SOF_RD, USB_SIE_CTRL
- PIO — программируемый ввод-выводPIO_CTRL, PIO_FSTAT, PIO_FDEBUG, PIO_FLEVEL, PIO_TXFn, PIO_RXFn
- DMA — прямой доступ к памятиDMA_CHn_READ_ADDR, DMA_CHn_WRITE_ADDR, DMA_CHn_TRANS_COUNT, DMA_CHn_CTRL_TRIG, DMA_CHn_AL1_CTRL, DMA_CHn_AL1_READ_ADDR
- SIO — однотактный ввод-вывод ядерSIO_CPUID, SIO_GPIO_IN, SIO_GPIO_HI_IN, SIO_GPIO_OUT, SIO_GPIO_HI_OUT, SIO_GPIO_OUT_SET
- CLOCKS — тактированиеCLOCKS_CLK_GPOUT0_CTRL, CLOCKS_CLK_GPOUTn_DIV, CLOCKS_CLK_GPOUTn_SELECTED, CLOCKS_CLK_GPOUT1_CTRL, CLOCKS_CLK_GPOUT2_CTRL, CLOCKS_CLK_GPOUT3_CTRL
- IO_BANK0 — мультиплексор GPIOIO_BANK0_GPIOn_STATUS, IO_BANK0_GPIOn_CTRL, IO_BANK0_IRQSUMMARY_PROC0_SECURE0, IO_BANK0_IRQSUMMARY_PROC0_SECURE1, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE0, IO_BANK0_IRQSUMMARY_PROC0_NONSECURE1
- IO_QSPI — мультиплексор выводов QSPI и USBIO_QSPI_USBPHY_DP_STATUS, IO_QSPI_USBPHY_DP_CTRL, IO_QSPI_USBPHY_DM_STATUS, IO_QSPI_USBPHY_DM_CTRL, IO_QSPI_GPIO_QSPI_SCLK_STATUS, IO_QSPI_GPIO_QSPI_SCLK_CTRL
- M33 — системные регистры Cortex-M33M33_ITM_STIMn, M33_ITM_TER0, M33_ITM_TPR, M33_ITM_TCR, M33_INT_ATREADY, M33_INT_ATVALID
Статьи и термины
- Безопасная загрузкаЗапуск только подписанной прошивки: подпись, ключи в OTP, откат версий
- OTP-памятьОднократно программируемая память: ключи, настройки, необратимые биты
- RP2350: выводы и функции GPIO30 или 48 GPIO: выводы QFN-60 и QFN-80, функции F0–F11, АЦП, 5 В, токи
- RP2040 и RP2350RP2040 и RP2350: ядра, память, GPIO, PIO, АЦП, 5 В на выводах, эрраты