-
Notifications
You must be signed in to change notification settings - Fork 0
SMBus DIMM
SMBus driver for accessing DIMM SPD data to detect and identify memory modules.
JNode's SMBus (System Management Bus) driver provides access to DIMM (Dual In-line Memory Module) SPD (Serial Presence Detect) data. The SMBus is a two-wire interface based on I²C used for system and power management related tasks. DIMM devices expose their configuration data via SPD, which allows the system to automatically detect memory size, type, timing parameters, and manufacturer information.
| Class/File | Location | Purpose |
|---|---|---|
SMBus |
core/src/driver/org/jnode/driver/bus/smbus/SMBus.java |
SMBus bus abstraction extending Bus, manages device list and delegates operations to controller |
SMBusControler |
core/src/driver/org/jnode/driver/bus/smbus/SMBusControler.java |
Abstract base for SMBus controller implementations, defines protocol methods |
SMBusDevice |
core/src/driver/org/jnode/driver/bus/smbus/SMBusDevice.java |
Base class for devices on the SMBus, extends Device with address and capability tracking |
DIMM |
core/src/driver/org/jnode/driver/bus/smbus/DIMM.java |
DIMM device subclass of SMBusDevice, reads and parses SPD data |
DIMMDriver |
core/src/driver/org/jnode/driver/bus/smbus/DIMMDriver.java |
Driver for DIMM devices, reads SPD table on startup |
The SMBusControler defines the protocol operations:
- Quick Command: Single-bit communication for simple devices
- Send/Receive Byte: 8-bit data transfer
- Read/Write Byte/Word: Data transfer with command code
- Process Call: Write followed by read without STOP
- Block Read/Write: Multi-byte transfers (max 32 bytes)
The SMBus class wraps these operations and maintains a list of discovered devices.
The SMBus specification defines reserved addresses:
| Address | Purpose |
|---|---|
0x10 |
SMBus Host |
0x50-0x5F |
ACCESS.bus / LCD / Backlight |
0xA0-0xA7 |
RAM DIMM SPD (base address, 8 slots) |
0xC2 |
Device Default |
The ADDRESS_RAMDIM_BASE (0xA0) is used as the base address for DIMM SPD reads.
The DIMM class reads and parses the 128-byte SPD table:
Byte 0: SPD table length
Byte 2: Memory type (2=EDO, 4=SDRAM, 7=DDR)
Byte 62: Revision code
Bytes 64-71: Manufacturer code
Bytes 99-125: Manufacturer data
Supported memory types include EDO, SDRAM, and DDR SDRAM.
-
SMBus.probeDevices()scans for DIMM devices at addresses 0xA0-0xA7 -
DIMMDriverchecks device existence via SPD table validation - On start,
DIMMDriverreads the full SPD table via SMBus block read -
DIMM.setSPDTable()stores raw data for accessor methods
SMBusController (hardware)
└─ SMBus (bus abstraction)
└─ DIMM (device)
└─ DIMMDriver (driver)
- SPD reliability: SPD data may be corrupted or unavailable on older/no-name modules
- Limited memory types: Only EDO, SDRAM, and DDR are decoded; newer types show as "Unknown"
- Block read limitations: SMBus block reads limited to 32 bytes; SPD is 128 bytes requiring multiple reads
- No write support: SPD is read-only; write operations not implemented
-
Controller dependency: Requires concrete
SMBusControlerimplementation for hardware access - Address space: Only 8 DIMM slots supported (0xA0-0xA7)
- Bus-Drivers - Parent bus driver subsystem
- Driver-Framework - Device and driver framework
- Device-Manager - Device discovery and management
- Memory-Management - Memory subsystem using SPD data