串行存在检测

**序列存在檢測**（英語：**serial presence detect**，縮寫 **SPD**）是一種存取記憶體模組有關訊息的標準化方式。 早期的 72 pin SIMM 包括五個針腳，提供 5 位元**平行存在檢測**（PPD）資料，而 168 pin DIMM 標準更改為**序列存在檢測**，以編碼更多訊息。

在普通的現代電腦開機時，它將進行一次開機自檢（POST）。自從 20 世紀 90 年代中期以來，這個過程包括自動設定當前存在的硬體。SPD 是一項記憶體硬體特性，可使電腦了解存在的記憶體以及存取記憶體要使用的時序。

部分電腦可以完全自動地適應硬體變更。在大多數情況下，有一個特殊的可選步驟可以存取 BIOS 參數，得以檢視並可能更改相關設定。有些電腦可以控制如何使用 SPD 中儲存的資料 —— 可以選擇性的修改記憶體時序，乃至完全覆蓋（忽視）SPD 資料，詳見超頻。

## 儲存的訊息

對於支援 SPD 的記憶體模組，JEDEC 標準要求在記憶體模組的一個 EEPROM 上的低 128 位元組中存有特定參數。這些位元組包括模組相關的時序參數、製造商、序列號及其他實用訊息。利用記憶體的裝置可以讀取該訊息來自動確定模組的關鍵參數。例如，SDRAM 模組上的 SPD 資料可能提供有關 CAS 潛伏時間的訊息，使系統可以自動組態而無需使用者干預。

SPD EEPROM 採用 SMBus 存取，這是 I²C 協定的一個變種。這將模組上的通信針腳數量減少到兩個：時鐘訊號和資料訊號。EEPROM 與 RAM 共享接地針腳，有自己的電源針腳，並有三個額外針腳（SA0-2）來標識該槽，用於將 EEPROM 分配到 0x50-0x57 範圍內的唯一位址。通信線路不僅可以在 8 個記憶體模組之間共享，同一 SMBus 通常也用於主機板上的系統健康監視任務，例如讀取電源電壓、CPU 溫度和風扇速度。

（如果沒有防寫，SPD EEPROMs 也回應 I²C 位址 0x30–0x37。一個擴充使用 0x18–0x1F 位址存取可選的晶片上溫度感測器。）

### SDR SDRAM

第一個 SPD 規範由 JEDEC 發布，並由英特爾加強，作為其 PC100 記憶體規範的一部分。指定的大多數值為二進碼十進數形式。最重要的半位元組可以包含 10 到 15 個值，並在某些情況下可以擴充到更高。在這種情況下， 1、2、3 的編碼用於編碼 16,17 和 18。最高的 0 的半位元組被保留表示為「未定義」。

SPD ROM 定義了最多三個 DRAM 時序，在位元組 18 中用設定位指定了三個 CAS 延遲。首先是最高的 CAS 延遲（最快時鐘），然後是兩個降低時鐘速度的較低的 CAS 延遲。

### DDR2 SDRAM

DDR2 SPD 標準做了一些修改，但大致同上。一個顯著變化是刪除混亂且很少使用的有兩個不同大小 Rank 的 DIMM 支援。

時間周期欄位（位元組 9、23、25 和 49）以二進碼十進數（BCD）編碼，一些額外編碼以十分位定義，以正確表示一些常見時序：

### DDR3 SDRAM

DDR3 SDRAM 標準大幅修繕，簡化了 SPD 內容布局。取代多個 BCD 編碼的奈秒欄位，一些「時基」單元被規定為高精度，並且各種時序參數被編碼為基本單元的倍數。此外，根據 CAS 延遲指定不同時序的做法已被刪除，現在只有一組時序參數。

修訂 1.1 使一些參數列示為「中等時基」值加上（帶符號，-128 +127）「精細時基」校正。通常來說，中等時基為 1/8 ns（125 ps），精細時基為 1、2,5 或 5 ps。為了與缺少校正的早期版本相容，中等時間基數通常向上取整，並且校正為負。以這種方式工作的值為：

模組的儲存容量可以從位元組 4、7 和 8 計算。模組寬度（位元組 8）除以每個晶片的位數（位元組 7）得出每個 rank 的晶片數量。然後可以乘以每個晶片的容量（位元組 4）和模組上晶片的 Rank 數量（通常為 1 或 2，從位元組 7）。

### DDR4 SDRAM

## 擴充

JEDEC 標準僅規定了部分 SPD 位元組。真正關鍵的資料放在了前 64 個位元組，而其餘部分則由製造商標定。然而，通常提供的 EEPROM 為 256 位元組。剩餘空間目前已有一些用途。

### 增強效能組態（EPP）

記憶體通常在 SPD ROM 中附有保守的時序建議，以確保在所有系統上基本功能執行正常。愛好者通常會花費很多時間來手動調整記憶體時序以提高速度。

增強效能設定檔是一項 SPD 擴充，由 Nvidia 和 Corsair 開發，其中包含使 DDR2 SDRAM 以更高效能執行的額外訊息，例如 JEDEC SPD 規範中不包括的供電電壓和命令時序訊息。EPP 訊息儲存在同一個 EEPROM 中，不過位元組在 99-127，屬於 DDR2 SPD 標準中的未使用區域。

這些參數專為 nForce 5、nForce 6 和 nForce 7 晶片組上的記憶體控制器設計。Nvidia 鼓勵在 BIOS 為其高端主機板晶片組支援 EPP。此能旨在提供「一鍵超頻」，以最小的努力取得更佳效能。

Nvidia 為效能和穩定性得到認證的 EPP 記憶體提供的名稱是「SLI-Ready 記憶體」。術語「SLI-Ready 記憶體」引起了一些混亂，因為這與 NVIDIA SLI 無關。使用者可以使用單個影片卡（哪怕非 Nvidia 卡）搭配 EPP/SLI 記憶體，也可以在沒有 EPP/SLI 記憶體的情況下執行多卡 SLI 影片組態。

其擴充版本 EPP 2.0 則支援 DDR3 記憶體。

### Extreme Memory Profile（XMP）

與之類似的是，英特爾為 DDR3 SDRAM DIMM 開發了一個 JEDEC SPD 擴充。它使用 JEDEC 未分配的位元組 176-255 來編碼更高效能的記憶體時序。中文也稱「擴充記憶體組態」
頭部包含下列資料。其中最重要的是「中等時基」值 MTB，它是一個合理的奈秒（常用值為 1/8、1/12 和 1/16 奈秒）。之後的許多時序值都以整數個 MTB 單位表示。

頭部還包括該設定檔旨在支援的每個記憶體通道的 DIMM 數量；更多的 DIMM 可能無法正常工作。

AMD 也開發了一個 SPD 擴充集名為 AMP，功用與 XMP 一樣。

### 供應商指定記憶體

一種常見的濫用是將訊息寫入某些記憶體區域，以將特定供應商的記憶體模組繫結到特定系統。已知富士通技術解決方案有這樣做。向系統添加不同的記憶體模組通常會導致拒絕執行或其他反制措施（例如每次啟動時需按 F1）。

```
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.....
```
這是一個美光科技 512 MB 記憶體模組的輸出，它的品牌是富士通西門子，注意「FSC」字串。該系統 BIOS 拒絕從偏移 128h 開始沒有此訊息的記憶體模組。

## 讀取和寫入 SPD 訊息

記憶體模組製造商會將 SPD 訊息寫入模組上的 EEPROM。主機板 BIOS 則讀取 SPD 訊息來組態記憶體控制器。在大多數（但不是所有）主機板晶片組中，存在多個能讀取和修改 SPD 訊息的程式。

* dmidecode（頁面存檔備份，存於網際網路檔案館）程式可以解碼記憶體（及其他）有關訊息，可以在 Linux、FreeBSD、NetBSD、OpenBSD、BeOS、Cygwin 和 Solaris 上執行。dmidecode 不直接存取 SPD 訊息；它會報告有關記憶體的 BIOS 資料。此訊息可能受限或不正確。
* 在 Linux 系統上，使用者空間程式 decode-dimms 可以以 i2c-tools 解碼和印出電腦中任何有 SPD 訊息的記憶體訊息。它需要核心中支援 SMBus 控制器、EEPROM 核心驅動，並且 SPD EEPROM 已連接到 SMBus。在舊的 Linux 發行版上，decode-dimms.pl 作為 lm\_sensors 的一部分可用。
* OpenBSD 自 4.3 版本起包含驅動程式 spdmem (4) 來提供有關記憶體模組的訊息。該驅動程式從 NetBSD 移植（自 5.0 版本可用）。
* Coreboot 讀取和使用 SPD 訊息來初始電腦中的所有記憶體控制器的時序、大小及其他屬性。
* Windows 上使用如 HWiNFO32、CPU-Z 或 Speccy 軟體可以讀取和顯示 SPD 中的 DRAM 模組訊息。

使用 eeprom 編程器硬體和軟體直接存取記憶體的 EEPROM，可以直接讀寫 SPD 訊息，而無需關心晶片組。

對於舊筆記型電腦來說，一種不太常見的用法是通用的 SMBus 讀取器，因為 BIOS 可以在讀取後禁用模組上的內部 EEPROM，因此匯流排基本上可以使用。所用方法是將 A0、A1 線拉低，使記憶體關閉，從而允許外部裝置存取 SMBus。完成此操作後，客製化的 Linux 版本或 DOS 應用程式就可以存取外部裝置。這樣做的一個常見目的是從 LCD 面板的記憶體晶片中恢復資料，將通用面板改裝為筆記型電腦專用。

## 在舊裝置

部分較舊的裝置必需使用具有**平行**存在檢測（常稱為簡單存在檢測，或縮寫 PD）的 SIMM。這些裝置中部分使用非標準的 PD 編碼，尤其是如 IBM 電腦、惠普 LaserJet，及其他一些印表機。

## 參見

* 感測器電子資料表

## 參考資料

## 外部連結

* Serial Presence Detect Standard, General Standard
* SPD Rev1.0 for DDR SDRAM（頁面存檔備份，存於網際網路檔案館）
* SPD Rev1.2 for DDR2 SDRAM（頁面存檔備份，存於網際網路檔案館）
* SPD Rev1.3 for DDR2 SDRAM
* SPECIALITY DDR2-1066 SDRAM（頁面存檔備份，存於網際網路檔案館）
* Linux 軟體套件 i2c-tools
* Instructions on how to use lm-sensors or i2c-tools to read the data
* Memory Performance: 16GB DDR3-1333 to DDR3-2400 on Ivy Bridge IGP with G.Skill（頁面存檔備份，存於網際網路檔案館） – explanation of various timing values