Microchip RNG90 / USB & native I²C

Hardware
randomness.

A dedicated random number generator
for USB hosts and Raspberry Pi.

I’m Patrick Tudor, author of the Linux and FreeBSD RNG90 drivers.

Physical entropy and a SHA-256 Hash_DRBG in silicon. Standard host interfaces, explicit error handling, and a documented path from device output to the operating system’s random subsystem.

R90-DIRECT + R90-HATRNG90
Green R90-HAT board with RNG90, real-time clock, coin-cell battery, and Raspberry Pi header.
Green R90-DIRECT board with USB-C, CP2112 bridge, RNG90, and Qwiic connector.
USB-C / CP2112 · Raspberry Pi / RTCCAD ILLUSTRATIONS
256-bitOutput per
Random command
128-bitSpecified
security strength
SHA-256Hash_DRBG
mechanism
I²CFixed address
0x40

01 / Hardware

One generator.
Two host interfaces.

Both boards expose the RNG90’s I²C command interface. The USB board adds a bridge; the HAT connects directly to the Pi’s bus.

R90-DIRECT

USB / CP2112

57.15 × 38.1 mm
R90-DIRECT top view, plain green solder mask with gold pads.
Top / component side
R90-DIRECT underside.
Underside

USB-C supplies power and data to a Silicon Labs CP2112 HID-to-I²C bridge. The host runs the RNG90 protocol; there is no application MCU or board firmware to flash.

Host connection
USB-C · full-speed USB HID
Bridge
Silicon Labs CP2112
Random source
Microchip RNG90 · I²C address 0x40
Expansion
3.3 V Qwiic connector on the same I²C bus
Supply
USB bus power · onboard 3.3 V regulator
Mounting
Four 3.2 mm holes

Linux exposes the bridge as an I²C adapter through hid-cp2112; FreeBSD uses cp2112 and iicbus. USB Direct is a HID device, not a serial console.

USB connection and configuration

R90-HAT

Raspberry Pi / RTC

65 × 56.5 mm
R90-HAT top view, plain green solder mask with RNG90 and clock battery.
Top / component side
R90-HAT underside with 40-pin receptacle.
Underside

The RNG90 and a MAX31328 real-time clock share the Pi’s native I²C bus. A CR1220 cell maintains the clock when the Pi is off. A separate ID EEPROM identifies the HAT.

Host connection
40-pin Raspberry Pi header · native I²C
Random source
Microchip RNG90 · I²C address 0x40
Real-time clock
MAX31328 · 0x68 · CR1220 backup
Board identity
M24128 EEPROM · 0x50 on the Pi ID bus
Supply
3.3 V from the Pi header
Mounting
2.7 mm holes · 58 × 49 mm pattern

RNG90 and RTC use GPIO2 / GPIO3. The EEPROM uses ID_SD / ID_SC. The backup cell powers the clock only; the random generator runs from the Pi’s 3.3 V supply.

HAT connections and mechanical fit

CAD illustrations use plain green solder mask and simplified component bodies.

02 / Generator architecture

Physical entropy.
Hash_DRBG output.

The Random command returns the RNG90’s DRBG output. Its internal noise source supplies entropy at instantiation and for each generation request.

Inside the Microchip RNG90

  1. Entropy sourcePhysical noise

    Non-deterministic source inside the device.

  2. Source monitoringHealth tests

    Noise-source checks before output is used.

  3. DRBG mechanismHash_DRBG

    SHA-256, supplied with fresh entropy.

  4. Command result256 bits

    128-bit security strength specified by Microchip.

Functional overview from RNG90 data sheet DS40002499A, §2.2. Device and standards references ↗

SP 800-90A

Deterministic generation

Defines the DRBG mechanisms. RNG90 uses the SHA-256 variant of Hash_DRBG.

NIST SP 800-90A Rev. 1

SP 800-90B

Entropy sources

Covers entropy-source design, health testing, and validation. Microchip describes evaluation of the RNG90’s noise source against this standard.

NIST SP 800-90B

SP 800-90C

RBG construction

Specifies how entropy sources and DRBG mechanisms form an RBG. DS40002499A references the draft that preceded the final standard.

NIST SP 800-90C

Validation scope. Algorithm validation, entropy-source validation, and cryptographic-module validation have different scopes. The RNG90’s silicon claims do not establish FIPS 140 validation for either board or its host system. Output length, security strength, and credited entropy are also distinct quantities.

03 / Operating characteristics

Generation, transport,
and error handling.

Device execution time sets the starting point. The I²C adapter, USB bridge, polling, and host scheduling determine end-to-end throughput.

RNG90 timing and host throughput
CharacteristicValue
Payload per Random command32 bytes / 256 bits
Subsequent Random execution20.2 ms typical / 25.3 ms maximum
First Random execution, including self-tests57 ms typical / 72 ms maximum
Observed USB throughput≈850 B/s through CP2112 on Linux, at 100 kHz I²C
Observed Pi HAT throughput≈1.07 kB/s on Pi 5 / Linux, at 100 kHz I²C

Device timing: DS40002499A, Table 5-6, under its stated operating conditions. Measured rates include their respective host paths and are not guarantees. HAT validation and test scope ↗.

Successful Random response / 35 bytes

0x23Count · 1 B
Random outputPayload · 32 B
CRC-162 B

Validate before delivery.

The driver checks transfer length, response count, CRC, and device status. It strips the framing and returns only the payload. Four-byte status replies, padding, and failed health-test responses do not become random output.

CRC checks transport integrity. The RNG90’s internal health tests monitor its entropy source. The host’s entropy-credit policy determines how accepted output contributes to the system pool.

Protocol and recovery behavior

04 / Host integration

Native operating-system
interfaces.

The RNG90 driver owns the device protocol. Applications continue to use the OS random APIs, with the board contributing an additional hardware source.

Linux

GPL-2.0-only

/dev/hwrng

The driver registers with the hardware RNG framework. USB Direct uses the kernel’s hid-cp2112 I²C adapter; Pi HAT uses native I²C. The same RNG90 command and response checks apply to both paths.

Integration
Project RNG90 module, built for the running kernel. Pi device-tree setup is separate.
Entropy credit
quality = 1: conservative project policy, nominally one credited bit per 1024 returned bits. This is not a measured entropy density.
Failure handling
Device health or self-test failures fail the read. Repeated failures latch the device until unbind/rebind.
Linux integration details

FreeBSD

BSD-2-Clause

/dev/rng90N

A separate native iicbus driver provides root-only raw reads and an optional kernel entropy feed through RANDOM_PURE_RNG90. It supports native I²C controllers and FreeBSD’s cp2112 bridge.

Integration
Project module with a matching kernel source definition. USB hardware, cold boot and disconnect recovery have been tested on FreeBSD 15.1.
Entropy feed
Disabled by default; enabled through a device hint or sysctl. Verified blocks use the dedicated RNG90 source and the kernel’s health policy.
Output semantics
Raw reads generate separate blocks; those blocks are not also submitted to the kernel feed.
FreeBSD integration details

Application use

Use the OS random interface for keys, nonces, and other application requests. The board’s kilobyte-per-second class output is suited to supplying seed material; the system generator supplies bulk output. Reading device bytes and crediting the kernel pool are separate operations.

05 / Technical references

Specifications
and implementation notes.

The device data sheet defines the generator and command interface. The integration guide covers board connections and host behavior.

R90-DIRECT / R90-HAT

Hardware enquiries.

For boards, design files, or host-integration questions, include the board format, target operating system, and quantity.

Contact Patrick Tudor ptudor@ptudor.net

RNG90 hardware

USB-C + CP2112
Raspberry Pi + RTC

Dedicated random number generation.
Documented hardware and host interfaces.