Serial presence detect

In computing, serial presence detect (SPD) is a standardized way to automatically access information about a memory module.

In most cases, there is a special optional procedure for accessing BIOS parameters, to view and potentially make changes in settings.

Devices utilizing the memory automatically determine key parameters of the module by reading this information.

For example, the SPD data on an SDRAM module might provide information about the CAS latency so the system can set this correctly without user intervention.

Not only can the communication lines be shared among 8 memory modules, the same SMBus is commonly used on motherboards for system health monitoring tasks such as reading power supply voltages, CPU temperatures, and fan speeds.

All those values are seven-bit I2C addresses formed by a Device Type Identifier Code prefix (DTIC) with SA0-2: to read (1100) from slot 3, one uses 110 0011 = 0x33.

The SPD ROM defines up to three DRAM timings, for three CAS latencies specified by set bits in byte 18.

For cycle time fields (bytes 9, 23, 25 and 49), which are encoded in BCD, some additional encodings are defined for the tenths digit to represent some common timings exactly: The DDR3 SDRAM standard significantly overhauls and simplifies the SPD contents layout.

Instead of the old AT24C02-compatible 256-byte EEPROMs, JEDEC now defines a new nonstandard EE1004 type with two pages at the SMBus level each with 256 bytes.

Memory generally comes with conservative timing recommendations in the SPD ROM, to ensure basic functionality on all systems.

Adding different memory module to the system usually results in a refusal or other counter-measures (like pressing F1 on every boot).

This is the output of a 512 MB memory module from Micron Technologies, branded for Fujitsu-Siemens Computers, note the "FSC" string.

The system BIOS rejects memory modules that don't have this information starting at offset 128h.

Some Packard Bell AMD laptops also use this method, in this case the symptoms can vary but it can lead to a flashing cursor rather than a beep pattern.

Motherboard BIOSes read the SPD information to configure the memory controller.

A not so common use for old laptops is as generic SMBus readers, as the internal EEPROM on the module can be disabled once the BIOS has read it so the bus is essentially available for use.

The method used is to pull low the A0,A1 lines so the internal memory shuts down, allowing the external device to access the SMBus.

Its possible to use a tool like SPDTool or similar and replace the chip with one that has its WP line free so it can be altered in situ.

Some memory modules (especially on Gaming PCs)[39] support RGB LEDs that are controlled by proprietary SMBus commands.

Kernel drivers from multiple manufacturers required to control the lights have been exploited to gain access ranging from full kernel memory access, to MSR and I/O port control numerous times in 2020 alone.

Some of this equipment uses non-standard PD coding, IBM computers and Hewlett-Packard LaserJet and other printers in particular.

Memory device on an SDRAM module, containing SPD data (red circled)