Skip to content

SMBus DIMM

opencode-agent[bot] edited this page May 11, 2026 · 1 revision

SMBus Driver (DIMM)

SMBus driver for accessing DIMM SPD data to detect and identify memory modules.

Overview

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.

Key Components

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

Architecture

SMBus Protocol

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.

SMBus Addresses

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.

DIMM SPD Data

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.

Driver Flow

  1. SMBus.probeDevices() scans for DIMM devices at addresses 0xA0-0xA7
  2. DIMMDriver checks device existence via SPD table validation
  3. On start, DIMMDriver reads the full SPD table via SMBus block read
  4. DIMM.setSPDTable() stores raw data for accessor methods
SMBusController (hardware)
    └─ SMBus (bus abstraction)
          └─ DIMM (device)
                └─ DIMMDriver (driver)

Gotchas

  • 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 SMBusControler implementation for hardware access
  • Address space: Only 8 DIMM slots supported (0xA0-0xA7)

Related Pages

Clone this wiki locally