A dedicated random number generator for USB hosts and Raspberry Pi.
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.
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
Top / component sideUnderside
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.
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.
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
Characteristic
Value
Payload per Random command
32 bytes / 256 bits
Subsequent Random execution
20.2 ms typical / 25.3 ms maximum
First Random execution, including self-tests
57 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.
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.
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.
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.