In computing, serial presence detect ( SPD) is a standardized way to automatically access information about a memory module. Earlier 72-pin included five pins that provided five bits of parallel presence detect (PPD) data, but the 168-pin DIMM standard changed to a serial presence detect to encode more information.
When an ordinary modern computer is turned on, it starts by doing a power-on self-test (POST). Since about the mid-1990s, this process includes automatically configuring the hardware currently present. SPD is a memory hardware feature that makes it possible for the computer to know what memory is present, and what memory timings to use to access the memory.
Some computers adapt to hardware changes completely automatically. In most cases, there is a special optional procedure for accessing BIOS parameters, to view and potentially make changes in settings. It may be possible to control how the computer uses the memory SPD data—to choose settings, selectively modify memory timings, or possibly to completely override the SPD data (see overclocking).
The SPD EEPROM firmware is accessed using SMBus, a variant of the I2C protocol. This reduces the number of communication pins on the module to just two: a clock signal and a data signal. The EEPROM shares ground pins with the RAM, has its own power pin, and has three additional pins (SA0–2) to identify the slot, which are used to assign the EEPROM a unique address in the range 0x50–0x57. 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.
Before SPD, memory chips were spotted with parallel presence detect (PPD). PPD used a separate pin for each bit of information, which meant that only the speed and density of the memory module could be stored because of the limited space for pins.
The SPD ROM defines up to three DRAM timings, for three CAS latencies specified by set bits in byte 18. First comes the highest CAS latency (fastest clock), then two lower CAS latencies with progressively lower clock speeds.
+ SPD contents for DDR SDRAM ! colspan=2 | Byte ! colspan=8 | Bit ! rowspan=2 | Notes |
Typically 128 | |||
Typically 8 (256 bytes) | |||
Bank 2 is 0 if same as bank 1. | |||
Bank 2 is 0 if same as bank 1. | |||
Commonly 1 or 2 | |||
Commonly 64, or 72 for ECC DIMMs | |||
0, unless width ≥ 256 bits | |||
Decoded by table lookup | |||
Clock cycle time at highest CAS latency. | |||
SDRAM access time from clock (tAC) | |||
Table lookup | |||
Refresh requirements | |||
Width of bank 1 data SDRAM devices. Bank 2 may be same width, or 2× width if bit 7 is set. | |||
Width of bank 1 ECC/parity SDRAM devices. Bank 2 may be same width, or 2× width if bit 7 is set. | |||
Typically 1 | |||
Burst lengths supported (bitmap) | |||
Typically 4 | |||
latencies supported (bitmap) | |||
latencies supported (bitmap) | |||
latencies supported (bitmap) | |||
Memory module feature bitmap | |||
Memory chip feature bitmap | |||
Clock cycle time at medium CAS latency. | |||
Data access time from clock (tAC) | |||
Clock cycle time at short CAS latency. | |||
Data access time from clock (tAC) | |||
Minimum row precharge time (tRP) | |||
Minimum row active–row active delay (tRRD) | |||
Minimum to delay (tRCD) | |||
Minimum active to precharge time (tRAS) | |||
Module bank density (bitmap). Two bits set if different size banks. | |||
Address/command setup time from clock | |||
Address/command hold time after clock | |||
Data input setup time from clock | |||
Data input hold time after clock | |||
36–40 | colspan=8 | Superset information | |
Minimum active to active/refresh time (tRC) | |||
Minimum refresh to active/refresh time (tRFC) | |||
Maximum clock cycle time (tCK max.) | |||
Maximum skew, DQS to any DQ. (tDQSQ max.) | |||
Read data hold skew factor (tQHS) | |||
0x2e | colspan=8 | For future standardization | |
Height of DIMM module, table lookup | |||
0x30–0x3d | colspan=8 | For future standardization | |
SPD revision level, 0.0 or 1.0 | |||
Sum of bytes 0–62, not then negated | |||
Stored little-endian, trailing zero-padded | |||
Vendor-specific code | |||
ASCII, space-padded | |||
Vendor-specific code | |||
Manufacturing date (YYWW) | |||
Weeks (0–9) | |||
Vendor-specific code | |||
Could be enhanced performance profile |
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:
+ DDR2 BCD extensions ! Hex !! Binary !! Significance |
0.25 () |
0.33 () |
0.66 () |
0.75 () |
0.875 (, Nvidia XMP extension) |
Revision 1.1 lets some parameters be expressed as a "medium time base" value plus a (signed, −128 +127) "fine time base" correction. Generally, the medium time base is 1/8 ns (125 ps), and the fine time base is 1, 2.5 or 5 ps. For compatibility with earlier versions that lack the correction, the medium time base number is usually rounded up and the correction is negative. Values that work this way are:
+ DDR3 SPD two-part timing parameters ! MTB byte | Value |
tCKmin, minimum clock period | |
tAAmin, minimum CAS latency time | |
tRCDmin, minimum RAS# to CAS# delay | |
tRPmin, minimum row precharge delay | |
tRCmin, minimum active to active/precharge delay |
+ SPD contents for DDR3 SDRAM JESD21-C Annex K: Serial Presence Detect for DDR3 SDRAM Modules, Release 4, SPD Revision 1.1, Release 6, SPD Revision 1.3 | |||||||
1.0, 1.1, 1.2 or 1.3 | |||||||
Type of RAM chips | |||||||
Type of module; e.g., 2 = Unbuffered DIMM, 3 = SO-DIMM, 11=LRDIMM | |||||||
Zero means 8 banks, 256 Mibit. | |||||||
Modules voltages supported. 1.5 V is default. | |||||||
Module organization | |||||||
0x03 for 64-bit, non-ECC DIMM. | |||||||
Fine Time Base, dividend/divisor | |||||||
Medium Time Base, dividend/divisor; commonly 1/8 | |||||||
Divisor, nanoseconds (1–255) | |||||||
In multiples of MTB | |||||||
CAS latencies supported (bitmap) | |||||||
12 | |||||||
In multiples of MTB; e.g., 80/8 ns. | |||||||
In multiples of MTB; e.g., 120/8 ns. | |||||||
In multiples of MTB; e.g., 100/8 ns. | |||||||
In multiples of MTB; e.g., 60/8 ns. | |||||||
In multiples of MTB; e.g., 100/8 ns. | |||||||
Upper 4 bits of bytes 23 and 22 | |||||||
In multiples of MTB; e.g., 280/8 ns. | |||||||
In multiples of MTB; e.g., 396/8 ns. | |||||||
In multiples of MTB; e.g., 1280/8 ns. | |||||||
Minimum refresh recovery delay, tRFCmin, bits 15:8 | |||||||
In multiples of MTB; e.g., 60/8 ns. | |||||||
In multiples of MTB; e.g., 60/8 ns. | |||||||
In multiples of MTB; e.g., 240/8 ns. | |||||||
Minimum four activate window delay tFAWmin, bits 7:0 | |||||||
SDRAM optional features support bitmap | |||||||
SDRAM thermal and refresh options | |||||||
DIMM thermal sensor present? | |||||||
Nonstandard SDRAM device type (e.g., stacked die) | |||||||
Signed multiple of FTB, added to byte 12 | |||||||
Signed multiple of FTB, added to byte 16 | |||||||
Signed multiple of FTB, added to byte 18 | |||||||
Signed multiple of FTB, added to byte 20 | |||||||
Signed multiple of FTB, added to byte 23 | |||||||
For future standardization. | |||||||
For row hammer mitigation | |||||||
For future standardization. | |||||||
Module nominal height | |||||||
Module thickness, value = ceil(mm) − 1 | |||||||
JEDEC reference design used (11111=none) | |||||||
Differs between registered/unbuffered | |||||||
Assigned by JEP-106 | |||||||
Module manufacturer ID, msbyte | |||||||
Vendor-specific code | |||||||
Manufacturing year (BCD) | |||||||
Manufacturing week (BCD) | |||||||
Vendor-specific code | |||||||
Includes bytes 0–116 or 0–125; see byte 0 bit 7 | |||||||
ASCII subset, space-padded | |||||||
Vendor-defined | |||||||
As distinct from module manufacturer | |||||||
Manufacturer-specific data | |||||||
Available for customer use |
Annex L defines a few different layouts that can be plugged into a 512-byte (of which a maximum of 320 bytes are defined) template, depending on the type of the memory module. The bit definitions are similar to DDR3.
DDR5 expands the SPD table to 1024-byte. SPD of DDR5 is using the I3C bus.
There are also thermal sensor versions of EE1002 and EE1004 but they speak the same protocol for their SPD part.
For EE1002 and EE1004 the I2C address range is 0x50–0x57. They also use respond to 0x30–0x37 if they have not been write protected (see below). If they have an associated thermal sensor, they use 0x18–0x1F. 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 0'''011 = 0x33. With a final R/W bit it forms the 8-bit Device Select Code. JEDEC Standard 21-C section 4.1.4 "Definition of the TSE2002av Serial Presence Detect (SPD) EEPROM with Temperature Sensor (TS) for Memory Module Applications"
The 5118 contains many devices. The hub itself lies at 0x50–0x57, as before. The local devices are addressed through the hub using I3C.
The EE1004 has no WC# pin or a "permanent" layer. It has four commands to separately set the write-protect status of each 64-byte slice of the device (using different ) and one to clear them all at once. These commands all require driving VHV like before.JEDEC Standard No. 21-C 4.1.6 Definitions of the EE1004-v 4 Kbit Serial Presence Detect (SPD) EEPROM and TSE2004av 4 Kbit SPD EEPROM with Temperature Sensor (TS) for Memory Module Applications 4_01_06R26-01-1.pdf
The SPD5118 has two modes of protection. In the normal operating mode with the address pin connected to GND via a resistor, protection can only be added to 64-byte slices, not removed. In the "tester" mode with the address pin connected to GND directly however, these bits can be freely removed.
Memory generally comes with conservative timing recommendations in the SPD ROM, to ensure basic functionality on all systems. Enthusiasts often spend considerable time manually adjusting the memory timings for higher speed. Enabling special configurations such as Intel XMP or AMD EXPO often requires additional testing to ensure system stability and may void CPU warranty if used out of the manufacturer’s published specifications.
Nvidia's name for EPP memory that has been qualified for performance and stability is "SLI-ready memory". The term "SLI-ready-memory" has caused some confusion, as it has nothing to do with SLI video. One can use EPP/SLI memory with a single video card (even a non-Nvidia card), and one can run a multi-card SLI video setup without EPP/SLI memory.
An extended version, EPP 2.0, supports DDR3 memory as well. Enhanced Performance Profiles 2.0 (pp. 2–3)
Later, AMD developed AMP, an equivalent technology to XMP, for use in its "Radeon Memory" line of memory modules optimized for use in AMD platforms. Furthermore, motherboard developers implemented their own technologies to allow their AMD-based motherboards to read XMP profiles: MSI offers A-XMP, ASUS has DOCP (Direct Over Clock Profile), and Gigabyte has EOCP (Extended Over Clock Profile).
The header contains the following data. Most importantly, it contains a "medium timebase" value MTB, as a rational number of nanoseconds (common values are 1/8, 1/12 and 1/16 ns). Many other later timing values are expressed as an integer number of MTB units.
Also included in the header is the number of DIMMs per memory channel that the profile is designed to support; including more DIMMs may not work well.
This is the output of a 512 MB memory module from Micron Technologies, branded for Fujitsu-Siemens Computers, note the "FSC" (46 53 43) 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. Incidentally this can also be a symptom of BIOS corruption as well. Though upgrading a 2 GB to a 4 GB can also lead to issues.
A related technique is rewriting the chip on webcams often included with many laptops, as the bus speed is substantially higher. They can even be modified so that 25-series chips, commonly used in storing a motherboard's UEFI ROM, can be read and written for protection against chip failure.
On some chips it is also a good idea to separate write protect lines so that the onboard chips do not get wiped during reprogramming.
Some chipsets also do not correctly negotiate the reading of 34-series EEPROM chips so they may even fail to read. The software may return a "Incompatible SMBus driver?" message in response.
DDR5 uses an even more complex design, the SPD5118 "hub" with another doubling of capacity.
+ SPD contents for DDR4 SDRAM JESD21-C Annex L: Serial Presence Detect for DDR4 SDRAM Modules, Release 5 SPD bytes used Typically 0x10, 0x11, 0x12 Type of RAM chips Type of module; e.g., 2 = Unbuffered DIMM, 3 = SO-DIMM, 11=LRDIMM Zero means no bank groups, 4 banks, 256 Mibit. Signal loading SDRAM optional features SDRAM thermal and refresh options Other SDRAM optional features Secondary SDRAM package type Module nominal voltage, VDD Module organization Module memory bus width in bits Module thermal sensor Extended base module type colspan=8 Measured in ps. In multiples of MTB; e.g., 100/8 ns. In multiples of MTB; e.g., 60/8 ns. CAS latencies supported bit-mask CAS latencies supported bit-mask CAS latencies supported bit-mask CAS latencies supported bit-mask In multiples of MTB; e.g., 1280/8 ns. In multiples of MTB; e.g., 60/8 ns. In multiples of MTB; e.g., 60/8 ns. Upper nibbles for tRASmin and tRCmin In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB tFAWmin most significant nibble In multiples of MTB In multiples of MTB In multiples of MTB In multiples of MTB Upper nibble for tWRmin In multiples of MTB Upper nibbles for tWTRmin In multiples of MTB In multiples of MTB Base configuration section Connector to SDRAM bit mapping Base configuration section Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units Two's complement multiplier for FTB units CRC16 algorithm CRC16 algorithm Dependent upon memory module family (UDIMM, RDIMM, LRDIMM) Hybrid memory architecture specific parameters Extended function parameter block See JEP-106 Manufacturer-defined manufacturing location code Represented in Binary Coded Decimal (BCD) Represented in Binary Coded Decimal (BCD) Manufacturer-defined format for a unique serial number across part numbers ASCII part number, unused digits should be set to 0x20 Manufacturer-defined revision code See JEP-106 Manufacturer-defined stepping or 0xFF if not used Manufacturer's specific data colspan=8
DDR5 SDRAM
+ SPD contents for DDR5 SDRAM
EEPROM chip
Addressing
Write protection
Extensions
Enhanced Performance Profiles (EPP)
The parameters are particularly designed to fit the memory controller on the nForce 5, nForce 6 and nForce 7 chipsets. Nvidia encourages support for EPP in the BIOS for its high-end motherboard chipsets. This is intended to provide "one-click overclocking" to get better performance with minimal effort.
+ EPP SPD ROM usage EPP header Profile AP1 Profile AP2 Profile AP3 Profile AP4
Intel Extreme Memory Profile (XMP)
DDR3 XMP
+ XMP SPD ROM usage XMP header XMP profile 1 ("enthusiast" settings) XMP profile 2 ("extreme" settings) + XMP profile bytes Module Vdd voltage twentieths (0.00 or 0.05) Module Vdd voltage tenths (0.0–0.9) Module Vdd voltage units (0–2) Minimum SDRAM clock period tCKmin (MTB units) Minimum CAS latency time tAAmin (MTB units) CAS latencies supported (bitmap, 4–11 encoded as bits 0–7) CAS latencies supported (bitmap, 12–18 encoded as bits 0–6) Minimum CAS write latency time tCWLmin (MTB units) Minimum row precharge delay time tRPmin (MTB units) Minimum RAS to CAS delay time tRCDmin (MTB units) Minimum write recovery time tWRmin (MTB units) tRASmin upper nibble (bits 11:8) tRCmin upper nibble (bits 11:8) Minimum active to precharge delay time tRASmin bits 7:0 (MTB units) Minimum active to active/refresh delay time tRCmin bits 7:0 (MTB units) Maximum average refresh interval tREFI lsbyte (MTB units) Maximum average refresh interval tREFI msbyte (MTB units) Minimum refresh recovery delay time tRFCmin lsbyte (MTB units) Minimum refresh recovery delay time tRFCmin msbyte (MTB units) Minimum internal read to precharge command delay time tRTPmin (MTB units) Minimum row active to row active delay time tRRDmin (MTB units) tFAWmin upper nibble (bits 11:8) Minimum four activate window delay time tFAWmin bits 7:0 (MTB units) Minimum internal write to read command delay time tWTRmin (MTB units) Write to read command turnaround time adjustment (0–7 clock cycles) Write to read command turnaround adjustment sign (0=pull-in, 1=push-out) Read to write command turnaround time adjustment (0–7 clock cycles) Read to write command turnaround adjustment sign (0=pull-in, 1=push-out) Back-to-back command turnaround time adjustment (0–7 clock cycles) Back-to-back turnaround adjustment sign (0=pull-in, 1=push-out) System CMD rate mode. 0=JTAG default, otherwise in peculiar units of MTB × tCK/ns.
E.g. if MTB is 1/8 ns, then this is in units of 1/8 clock cycle.SDRAM auto self refresh performance.
Standard version 1.1 says documentation is . Reserved, vendor-specific personality code.
Newer versions
AMD Extended Profiles for Overclocking (EXPO)
Vendor-specific memory
02 0E 00 01-00 00 00 EF-02 03 19 4D-BC 47 C3 46 ...........M.G.F
53 43 00 04-EF 4F 8D 1F-00 01 70 00-01 03 C1 CF SC...O....p.....
Reading and writing SPD information
Onboard SMBus
Other SMBus features
Temperature sensor
RGB LED control
SMBIOS
Ex situ SMBus
Laptops and webcams
Chip generation issues
On older equipment
See also
|
|