コンピューティング において、シリアルプレゼンス検出(SPD )は、メモリモジュールに関する情報に自動的にアクセスするための標準化された方法です。以前の72ピンSIMMには、5ビットのパラレルプレゼンス検出(PPD)データを提供する5つのピンが含まれていましたが、168ピンDIMM規格では、より多くの情報をエンコードするためにシリアルプレゼンス検出に変更されました。[1]
一般的な現代のコンピュータの電源を入れると、電源投入時セルフテスト(POST) が開始されます。1990 年代中ごろから、このプロセスには現在存在するハードウェアの自動構成が含まれるようになりました。SPD は、コンピュータが存在するメモリと、メモリにアクセスするために使用するメモリ タイミングを認識できるようにするメモリ ハードウェア機能です。
一部のコンピュータは、ハードウェアの変更に完全に自動的に適応します。ほとんどの場合、BIOSパラメータにアクセスして設定を表示し、場合によっては変更するための特別なオプション手順があります。コンピュータがメモリ SPD データを使用する方法を制御できる場合があります。設定を選択したり、メモリ タイミングを選択的に変更したり、場合によっては SPD データを完全に上書きしたりすることもできます (オーバークロックを参照)。
保存された情報
メモリ モジュールが SPD をサポートするには、JEDEC規格により、メモリ モジュールにあるEEPROMの下位 128 バイトに特定のパラメータが含まれている必要があります。これらのバイトには、タイミング パラメータ、製造元、シリアル番号、およびモジュールに関するその他の有用な情報が含まれています。メモリを使用するデバイスは、この情報を読み取ることで、モジュールの主要なパラメータを自動的に判別します。たとえば、SDRAMモジュールの SPD データはCAS レイテンシに関する情報を提供するため、システムはユーザーの介入なしにこれを正しく設定できます。
SPD EEPROM ファームウェアには、I 2 CプロトコルのバリエーションであるSMBus を使用してアクセスします。これにより、モジュール上の通信ピンの数が、クロック信号とデータ信号の 2 つに削減されます。EEPROM は RAM とグランド ピンを共有し、独自の電源ピンを持ち、スロットを識別するための 3 つの追加ピン (SA0 ~ 2) を持ちます。これらのピンは、EEPROM に 0x50 ~ 0x57 の範囲の一意のアドレスを割り当てるために使用されます。通信ラインを 8 つのメモリ モジュール間で共有できるだけでなく、同じ SMBus がマザーボード上で、電源電圧、CPU温度、ファン速度の読み取りなどのシステム状態監視タスクによく使用されます。
SPD EEPROM は、書き込み保護されていない場合はI 2 C アドレス 0x30~0x37にも応答し、拡張機能 (TSE シリーズ) は、オプションのオンチップ温度センサーにアクセスするためにアドレス 0x18~0x1F を使用します。これらの値はすべて、デバイス タイプ識別コード プレフィックス (DTIC) と SA0-2 で形成された7 ビットの I 2 C アドレス110 0011 = 0x33です。スロット 3 から (1100) を読み取るには、を使用します。最後の R/W ビットで 8 ビットのデバイス選択コードが形成されます。[2]書き込み保護操作ではスロット ID のセマンティクスが異なることに注意してください。書き込み保護操作では、SA ピンによってスロット ID が渡されることはありません。[3]
SPD 以前は、メモリ チップは並列プレゼンス検出 (PPD) で検出されていました。PPD では、情報の各ビットに個別のピンが使用されていたため、ピンのスペースが限られていたため、メモリ モジュールの速度と密度しか保存できませんでした。
SDR SDRAM

最初の SPD 仕様は JEDEC によって発行され、1998 年に導入されたPC100メモリ仕様の一部として Intel によって厳格化されました。 [4] [5] [6]指定された値のほとんどは、 2 進化 10 進数形式です。最上位ニブルには 10 から 15 までの値を含めることができ、場合によってはそれ以上の値になることもあります。そのような場合、1、2、3 のエンコードは、代わりに 16、17、18 のエンコードに使用されます。最上位ニブル 0 は、「未定義」を表すために予約されています。
SPD ROM は、バイト 18 の設定ビットによって指定される 3 つの CAS レイテンシに対して、最大 3 つの DRAM タイミングを定義します。最初に最高の CAS レイテンシ (最速クロック) が続き、その後に 2 つのより低い CAS レイテンシが続き、クロック速度が徐々に低下します。
DDR SDRAM
DDR DIMM SPD フォーマットは、SDR SDRAM フォーマットの拡張です。ほとんどの場合、パラメータ範囲は、より高速に対応するために再スケールされます。
DDR2 メモリ
DDR2 SPD 規格では多くの変更が行われていますが、おおよそ上記と同様です。注目すべき削除の 1 つは、異なるサイズの 2 つのランクを持つ DIMM のサポートがわかりにくく、あまり使用されていないことです。
BCDでエンコードされるサイクル タイム フィールド (バイト 9、23、25、49) では、一般的なタイミングを正確に表すために、10 桁目の追加のエンコードが定義されています。
DDR3 SDRAM
DDR3 SDRAM 規格では、SPD の内容のレイアウトが大幅に改良され、簡素化されています。BCD エンコードされたナノ秒フィールドの数の代わりに、いくつかの「タイムベース」単位が高精度に指定され、さまざまなタイミング パラメータがその基本単位の倍数としてエンコードされます。[10]さらに、CAS レイテンシに応じて異なる時間値を指定する方法は廃止され、タイミング パラメータのセットは 1 つだけになりました。
リビジョン 1.1 では、一部のパラメータを「中間タイム ベース」値と (符号付き、-128 +127)「ファイン タイム ベース」補正値として表すことができます。通常、中間タイム ベースは 1/8 ns (125 ps)、ファイン タイム ベースは 1、2.5、または 5 ps です。補正値のない以前のバージョンとの互換性を保つため、中間タイム ベース値は通常切り上げられ、補正値は負になります。このように動作する値は次のとおりです。
モジュールのメモリ容量は、バイト 4、7、8 から計算できます。モジュール幅 (バイト 8) をチップあたりのビット数 (バイト 7) で割ると、ランクあたりのチップ数が得られます。次に、これにチップあたりの容量 (バイト 4) とモジュール上のチップのランク数 (通常は 1 または 2、バイト 7 から) を掛けます。
DDR4メモリ
SPD の DDR4 SDRAM「Annex L」規格では、使用される EEPROM モジュールが変更されています。JEDEC は、古い AT24C02 互換の 256 バイト EEPROM の代わりに、SMBus レベルでそれぞれ 256 バイトの 2 ページを持つ新しい非標準 EE1004 タイプを定義しています。新しいメモリは、古い 0x50~0x57 アドレスを引き続き使用しますが、0x36 (SPA0) と 0x37 (SPA1) の 2 つの追加アドレスが、バスの現在アクティブなページを選択するコマンドを受信するために使用されるようになりました。これは、バンク スイッチングの形式です。 [13]内部的には、各論理ページはさらに 128 バイトの 2 つの物理ブロックに分割され、合計 4 つのブロックと 512 バイトになります。[14]「特別な」アドレス範囲のその他のセマンティクスは同じままですが、書き込み保護はブロックでアドレス指定され、ステータスを変更するには SA0 に高電圧が必要になります。[15]
Annex Lでは、メモリモジュールの種類に応じて、512バイト(最大320バイトが定義されています)のテンプレートにプラグインできるいくつかの異なるレイアウトが定義されています。ビット定義はDDR3に似ています。[14]
DDR5 メモリ
JESD400-5仕様に基づくDDR5の予備表。[17]
DDR5 は SPD テーブルを 1024 バイトに拡張します。DDR5 の SPD はI3Cバスを使用します。
拡張機能
JEDEC規格ではSPDバイトの一部のみを規定しています。本当に重要なデータは最初の64バイトに収まり、[8] [9] [18] [19] [20]、残りの一部は製造元の識別用に割り当てられています。ただし、通常は256バイトのEEPROMが提供されます。残りのスペースはさまざまな用途に使用されています。
拡張パフォーマンス プロファイル (EPP)
メモリには通常、すべてのシステムで基本的な機能を保証するために、SPD ROM に控えめなタイミングの推奨事項が付属しています。愛好家は、速度を上げるためにメモリのタイミングを手動で調整するのにかなりの時間を費やすことがよくあります。
拡張パフォーマンスプロファイルは、 NvidiaとCorsairによって開発されたSPDの拡張であり、JEDEC SPD仕様に含まれていない電源電圧やコマンドタイミング情報など、 DDR2 SDRAMの高性能動作のための追加情報が含まれています。EPP情報は同じEEPROMに保存されますが、標準のDDR2 SPDでは使用されないバイト99〜127に保存されます。[21]
パラメータは、 nForce 5、nForce 6、nForce 7チップセットのメモリ コントローラに適合するように特別に設計されています。Nvidia は、ハイエンド マザーボード チップセットのBIOSで EPP をサポートすることを推奨しています。これは、最小限の労力でパフォーマンスを向上させるための 「ワンクリックオーバークロック」を提供することを目的としています。
NVIDIA は、パフォーマンスと安定性が認定された EPP メモリを「SLI 対応メモリ」と呼んでいます。[22] 「SLI 対応メモリ」という用語は、 SLI ビデオとは何の関係もないため、混乱を招いています。EPP/SLI メモリは単一のビデオ カード (NVIDIA 以外のカードでも) で使用でき、EPP/SLI メモリなしでも複数のカードの SLI ビデオ セットアップを実行できます。
拡張版EPP 2.0はDDR3メモリもサポートしています。[23]
インテル エクストリーム メモリ プロファイル (XMP)
同様のIntelが開発したJEDEC SPD拡張機能はDDR3 SDRAM DIMM用に開発され、後にDDR4およびDDR5 SDRAMにも使用されました。XMPは、JEDECによって割り当てられていないバイト176〜255を使用して、より高性能なメモリタイミングをエンコードします。[24]
その後、AMDは、AMDプラットフォームでの使用に最適化されたメモリモジュールの「Radeon Memory」ラインで使用するために、XMPと同等の技術であるAMPを開発しました。[25] [26]さらに、マザーボード開発者は、AMDベースのマザーボードでXMPプロファイルを読み取ることができるように独自の技術を実装しました。MSIはA-XMPを提供し、[27] ASUSはDOCP(Direct Over Clock Profile)、GigabyteはEOCP(Extended Over Clock Profile)を提供しています。[28]
ヘッダーには次のデータが含まれています。最も重要なのは、ナノ秒の有理数として「中間タイムベース」値 MTB が含まれていることです (一般的な値は 1/8、1/12、1/16 ns です)。以降の他の多くのタイミング値は、MTB 単位の整数として表現されます。
ヘッダーには、プロファイルがサポートするように設計されているメモリ チャネルあたりの DIMM の数も含まれます。これより多くの DIMM を含めると、うまく機能しない可能性があります。
上記のデータはすべて DDR3 (XMP 1.1) 用です。DDR4 仕様はまだ入手できません。
オーバークロック用 AMD 拡張プロファイル (EXPO)
AMDのオーバークロック用拡張プロファイル(EXPO)は、 DDR5 DIMM用に開発されたJEDEC SPD拡張機能で、システムメモリにワンクリックの自動オーバークロックプロファイルを適用します。 [30] [31] AMD EXPO認定DIMMには、 Zen 4プロセッサのパフォーマンスを最適化する最適化されたタイミングが含まれています。[32] Intelのクローズド標準XMPとは異なり、EXPO標準はオープンでロイヤリティフリーです。[31] Intelプラットフォームで使用できます。[31] 2022年9月の発売時点で、最大6400 MT/sに達するEXPO認定のパートナーRAMキットが15種類あります。[33]
ベンダー固有のメモリ
よくある誤用は、特定のメモリ領域に情報を書き込んで、ベンダー固有のメモリ モジュールを特定のシステムにバインドすることです。Fujitsu Technology Solutions はこれを行っていることが知られています。システムに異なるメモリ モジュールを追加すると、通常は拒否されるか、その他の対策 (起動のたびに F1 キーを押すなど) が取られます。
02 0E 00 01-00 00 00 EF-02 03 19 4D-BC 47 C3 46 ...........MGF 53 43 00 04-EF 4F 8D 1F-00 01 70 00-01 03 C1 CF SC...O....p.....
これは、Fujitsu-Siemens Computers のブランドである Micron Technologies の 512 MB メモリ モジュールの出力です。「FSC」文字列に注意してください。システム BIOS は、オフセット 128h から始まるこの情報を持たないメモリ モジュールを拒否します。
一部のパッカードベルAMDラップトップでもこの方法が使用されていますが、この場合の症状はさまざまですが、ビープ音パターンではなく点滅するカーソルが発生する可能性があります。ちなみに、これはBIOS破損の症状である可能性もあります。[34]ただし、2 GBを4 GBにアップグレードすると問題が発生することもあります。
SPD情報の読み取りと書き込み
メモリ モジュールの製造元は、モジュール上のEEPROMに SPD 情報を書き込みます。マザーボードのBIOS は、 SPD 情報を読み取ってメモリ コントローラを構成します。ほとんどのマザーボード チップセットで SPD 情報を読み取り、変更できるプログラムがいくつかありますが、すべてではありません。
- dmidecodeプログラムはメモリ(およびその他の情報)に関する情報をデコードすることができ、Linux、FreeBSD、NetBSD、OpenBSD、BeOS、Cygwin、Solarisで動作します。dmidecodeはSPD情報に直接アクセスせず、メモリに関するSMBIOSデータを報告します。 [35]この情報は限られているか、不正確である可能性があります。
- LinuxシステムとFreeBSDでは、 i2c-toolsが提供するユーザー空間プログラムdecode-dimmsが、コンピュータ内のSPD情報を持つメモリの情報をデコードして出力します。[36] [37]カーネルのSMBusコントローラサポート、EEPROMカーネルドライバ、およびSPD EEPROMがSMBusに接続されていることが必要です。古いLinuxディストリビューションでは、decode-dimms.plはlm_sensorsの一部として利用できました。
- OpenBSD には、バージョン 4.3 以降、メモリ モジュールに関する情報を提供するためのドライバー (spdmem(4)) が含まれています。このドライバーは NetBSD から移植されたもので、リリース 5.0 以降で利用可能です。
- Coreboot はSPD 情報を読み取って使用し、タイミング、サイズ、その他のプロパティを使用してコンピューター内のすべてのメモリ コントローラーを初期化します。
- Windowsシステムでは、 HWiNFO、[38] CPU-Z、Speccyなどのプログラムを使用して、SPDからDRAMモジュール情報を読み取って表示することができます。
チップセットに依存しない SPD 情報の読み取りと書き込みは、EEPROM プログラマのハードウェアとソフトウェアを使用してメモリの EEPROM に直接アクセスすることによって行われます。
古いラップトップのあまり一般的ではない用途は、汎用 SMBus リーダーとして使用することです。これは、モジュールの内部 EEPROM は、BIOS が読み取った後無効にできるため、バスは基本的に使用可能になります。使用される方法は、A0、A1 ラインを低くして内部メモリをシャットダウンし、外部デバイスが SMBus にアクセスできるようにすることです。これが完了すると、カスタム Linux ビルドまたは DOS アプリケーションが外部デバイスにアクセスできるようになります。一般的な用途は、LCD パネル メモリ チップからデータを回復して、汎用パネルを独自のラップトップに改造することです。一部のチップでは、オンボード チップが再プログラミング中に消去されないように、書き込み保護ラインを分離することもお勧めします。関連する手法は、バス速度が大幅に速いため多くのラップトップに付属していることが多い Web カメラのチップを書き換えることです。また、チップ障害が発生した場合に 25x 互換チップを読み戻して後で uEFI を複製できるように変更することもできます。
残念ながら、これは DDR3 以下でのみ機能します。DDR4 は異なるセキュリティを使用し、通常は読み取りのみ可能です。SPDTool などのツールを使用して、WP ラインが空いているチップにチップを置き換え、その場で変更することができます。一部のチップセットでは、「互換性のない SMBus ドライバー?」というメッセージが表示される場合があり、読み取りも防止されます。
RGB LEDコントロール
一部のメモリモジュール(特にゲーミングPC)[39]は、独自のSMBusコマンドで制御されるRGB LEDをサポートしています。これにより、追加のコネクタやケーブルなしでLEDの色を制御できます。ライトを制御するために必要な複数のメーカーのカーネルドライバーは、2020年だけでも、完全なカーネルメモリアクセスからMSRおよびI/Oポート制御に至るまでのアクセス権を取得するために何度も悪用されています。[40] [41] [42]
古い機器の場合
一部の古い機器では、並列プレゼンス検出 (通常は単にプレゼンス検出または PD と呼ばれます) 機能を備えたSIMMを使用する必要があります。これらの機器の一部では、特にIBMコンピューターやHewlett-Packard LaserJetなどのプリンターでは、 非標準の PD コーディングが使用されています。
参照
参考文献
- ^ Thomas P. Koenig、Nathan John (1997 年 2 月 3 日)、「Serial Presence Detection が脚光を浴びる」、Electronic News、43 (2153)
- ^ JEDEC 規格 21-C セクション 4.1.4「メモリ モジュール アプリケーション用温度センサー (TS) 付き TSE2002av シリアル プレゼンス検出 (SPD) EEPROM の定義」
- ^ 「TN-04-42: メモリ モジュール シリアルプレゼンス検出書き込み保護」(PDF)。Micron 。
- ^ Dean Kent (1998年10月24日). 「Ram Guide」. Tom's Hardware .
- ^ Shimpi, Anand Lal. 「PC100 SDRAM: 入門」www.anandtech.com。
- ^ アプリケーション ノート INN-8668-APN3: SDRAM SPD データ標準、memorytesters.com
- ^ PC SDRAM シリアルプレゼンス検出 (SPD) 仕様(PDF)、1.2A、1997 年 12 月、p. 28
- ^ ab JEDEC 規格 21-C セクション 4.1.2.4「DDR SDRAM の SPD」
- ^ ab JEDEC 規格 21-C セクション 4.1.2.10「DDR2 SDRAM の特定の SPD」
- ^ 「DDR3 シリアルプレゼンス検出 (SPD) テーブルについて」。
- ^ JESD21-C Annex K: DDR3 SDRAM モジュールのシリアル プレゼンス検出、リリース 4、SPD リビジョン 1.1
- ^ JESD21-C Annex K: DDR3 SDRAM モジュールのシリアル プレゼンス検出、リリース 6、SPD リビジョン 1.3
- ^ Delvare, Jean. 「[PATCH] eeprom: DDR4メモリ用の新しいee1004ドライバー」LKML . 2019年11月7日閲覧。
- ^ ab JEDEC. 「付録 L: DDR4 SDRAM モジュールのシリアルプレゼンス検出 (SPD)」(PDF)。
- ^ JEDEC. 「EE1004およびTSE2004デバイス仕様(ドラフト)」(PDF) 。 2019年11月7日閲覧。
- ^ JESD21-C 付録 L: DDR4 SDRAM モジュールのシリアル プレゼンス検出、リリース 5
- ^ 「JESD400-5B(JESD400-5B)」。ジェデック。 2023年。2023 年12 月 31 日に取得。
- ^ JEDEC 規格 21-C セクション 4.1.2.11「DDR3 SDRAM モジュールのシリアル プレゼンス検出 (SPD)」
- ^ JEDEC 規格 21-C セクション 4.1.2「シリアル プレゼンス検出規格、一般規格」
- ^ JEDEC 規格 21-C セクション 4.1.2.5「同期 DRAM (SDRAM) の特定の PD」
- ^ DDR2 UDIMM 拡張パフォーマンス プロファイル設計仕様(PDF)、Nvidia、2006 年 5 月 12 日、 2009 年5 月 5 日取得
- ^ http://www.nvidia.com/docs/CP/45121/sli_memory.pdf [ベア URL PDF ]
- ^ 拡張パフォーマンスプロファイル 2.0 (pp. 2–3)
- ^ 「Intel Extreme Memory Profile (Intel XMP) とは?」Intel . 2022年9月26日閲覧。
- ^ 「メモリ プロファイル テクノロジー - RAM を AMP で強化」AMD 2012 年2018 年1 月 8 日閲覧。
- ^ Martin, Ryan (2012年7月23日). 「AMDがXMP相当のAMPを発表 - eTeknix」eTeknix . 2018年1月8日閲覧。
- ^ 「MSIはRyzenでA-XMPを有効にして最高のDDR4パフォーマンスを実現する世界初のブランドであり、新モデルを発売」MSI 2017年3月21日2018年1月8日閲覧。
- ^ Tradesman1 (2016 年 8 月 26 日). 「XMP、DOCP、EOCP の意味 - 解決済み - メモリ」。Tom 's Hardware Forums。2018年1 月 8 日閲覧。
{{cite web}}: CS1 maint: 数値名: 著者リスト (リンク) - ^ abc 「Intel Extreme Memory Profile (XMP) 仕様、Rev 1.1」(PDF)。Intel 。2007年10月。 2012年3月6日時点のオリジナル(PDF)からアーカイブ。2010年5月25日閲覧。
- ^ 「オーバークロック用AMD拡張プロファイル」AMD . 2022年9月26日閲覧。
- ^ abc Roach, Jacob (2022年9月6日). 「AMD EXPOとは何か、そして私のDDR5にはそれが備わっているべきか?」Digital Trends . 2022年9月26日閲覧。
- ^ Bonshor, Gavin (2022年8月30日). 「AMD EXPO メモリテクノロジー: Ryzen 7000 向けワンクリックオーバークロックプロファイル」AnandTech . 2022年9月26日閲覧。
- ^ 「AMD、DDR5メモリオーバークロック用のEXPOテクノロジーを発表」。VideoCardz。2022年8月30日。 2022年9月26日閲覧。
- ^ 「Packard Bell LJ65 RAM アップグレード」。Tom 's Hardware Forum。2014年 1 月 9 日。
- ^ 「dmidecode: 何の役に立つのか?」Linux.com | Linux 情報のソース。 2004 年 11 月 29 日。
- ^ "decode-dimms(1)". Debian マンページ。2020 年12 月 16 日に取得。
- ^ "decode-dimms". www.freebsd.org . 2021年1月24日閲覧。
- ^ 「HWiNFO - プロフェッショナルシステム情報と診断」HWiNFO。
- ^ 「VENGEANCE RGB PRO シリーズ DDR4 メモリ | デスクトップメモリ | CORSAIR」。www.corsair.com 。2020年11 月 26 日閲覧。
- ^ ActiveCyber. Viper RGB ドライバーのローカル権限昇格 (技術レポート)。CVE - 2019-18845 – MITRE Corporation 経由。
- ^ ActiveCyber. CORSAIR iCUE ドライバーのローカル権限昇格 (CVE-2020-8808) (技術レポート)。CVE - 2020-8808 – MITRE Corporation 経由。
- ^ ActiveCyber. ACTIVE-2020-003: Trident Z 照明制御ドライバーのローカル権限昇格 (技術レポート)。CVE - 2020-12446 – MITRE Corporation 経由。
外部リンク
- シリアルプレゼンス検出標準、一般標準
- DDR SDRAM 用 SPD Rev1.0
- DDR2 SDRAM 用 SPD Rev1.2
- DDR2 SDRAM 用 SPD Rev1.3
- 特殊DDR2-1066 SDRAM
- Linux パッケージ i2c-tools
- lm-sensors または i2c-tools を使用してデータを読み取る方法の説明 2007 年 5 月 19 日にWayback Machineにアーカイブされました
- メモリパフォーマンス: Ivy Bridge IGP の 16GB DDR3-1333 から DDR3-2400 と G.Skill の組み合わせ - さまざまなタイミング値の説明
