Sazanami Online

SPD大研究

Index に戻る
SPDとは
Serial Presence Detectの略で、パソコン用のメモリの性能を記録したシリアルEEPROMです。
ここでは最近のDDRメモリやデスクトップの168ピンのものは除外し、ノートパソコン用PC66〜133の144ピンSO-DIMMについて研究します。


参考資料など
144ピンSO-DIMMメモリの形状やピン内容についてはJEDECに詳しいドキュメントがあります。
SPDの情報定義は 'PC SDRAM Serial Presence Detect (SPD) Specification, Rev 1.2B' がIntelサイトのメモリ技術情報ページで公開されていたのですが、2004/10/30現在、DDR2やDDR266-400の最新情報のみでSDRAMの情報は2003年以降削除されてしまているようです。これについては、過去のIntelサイト情報がweb.archive intel.com 2003-08で入手できます。

so-DIMMの構成とSPDの種類

SO-DIMMをのメモリ構成
JEDECガイドによると、so-DIMMの標準構成は、1本のクロック線でSDRAM4個を駆動するよう設計されており
以下の種類となります。
モジュール
容量
Ver物理
バンク
SDRAMAddress bit
密度チップ数RowColBank
32MBA1 64Mbit(16x 4M) 41282
64MBB2 64Mbit(16x 4M) 81282
64MBA1128Mbit(16x 8M) 41292
128MBB2128Mbit(16x 8M) 81292
128MBA1256Mbit(16x16M) 41392
256MBB2256Mbit(16x16M) 81392
256MBA1512Mbit(16x32M) 413102
512MBB2512Mbit(16x32M) 813102

これは一般に販売されているso-DIMMと異なる場合があるようです。SDRAMチップ4個でモジュールを構成する場合、表裏に2個ずつ実装するよう書かれていますが、一般に販売されている4チップのso-DIMMは片面に4チップ実装されたものがほとんどです。
内容的にもチップ種別や構成の異なる場合があります、256MB so-DIMM はモジュール構成の大きく違う代表例です。

※ 非常に多くの機種に対応した一般的な256MBメモリーです。
IBM純正 Thinkpad用メモリ FRU 33L3070 144p PC100 SODIMM 256MB
OEM : SAMSUNG M464S3323CN0-L1L
メーカー保証対応機種 (390X, 570, 570E, 600X, A20m, 390X, 570E, 600X, A20m, A20p, A21e, A21m, A21p, A22e, A22m, A22p, T20, T21, T22, Transnote 2675-xxx, X20, X21, X22, i1422, 1482, i1483, i1492, i1542, i1562, i1592, i1781など)

これをJEDECガイドと同じように表現すると下記のようになります
モジュール
容量
Ver物理
バンク
SDRAMAddress bit
密度チップ数RowColBank
256MBB2128Mbit(8x16M)1612102

DIMMの片面ずつ実装される、メモリモジュールの64bit(8bitタイプのメモリチップは8個1組、16bitタイプのメモリチップは4個1組)単位を Rank : ランク と言います。ところが、JEDECのSO-DIMMデザインガイドやIntelのSPD Specification, Rev 1.2Bではなぜか Bank と呼んでいるので非常にまぎらわしくなっています。
メモリチップのデータシートを見ると bank0, bank1 のピンがあり、DIMMソケットにも BA0, BA1 のピンアサインが見えます。一見これで64bit単位(片面)を選択するかのように思えますが、実際にはDIMMソケット CS0,CLK0,CKE0 と CS1,CLK1,CKE1 がそれぞれ表面と裏面に接続されて Rank : ランク 選択が行われています。

手元にあるDIMMのメモリ構成を調べてみました。
容量メーカー型番構成
128MbitSAMSUNGK4S280832C-NL1L8bit4M(12rows,10cols) word4Bankx16 256M SO-DIMM(M464S3323CN0-L1L)
128MbitWinbondW981216BH-7516bit2M(12rows,9cols) word4Bankx8 128M SO-DIMM
128MbitTOSHIBATC59SM716FT-8016bit2M(12rows,9cols) word4Bankx8 128M SO-DIMM
128MbitMicron48LC8M16A2-8E16bit2M(12rows,9cols) word4Bankx4 64M Bryce内蔵(1号)
128MbitSAMSUNGKM416S8030BT-GH16bit2M(12rows,9cols) word4Bankx4 64M Bryce内蔵(2号)
128MbitSAMSUNGKM416S8030-FL16bit2M(12rows,9cols) word4Bankx4 64M CF-A1内蔵
64MbitNECHM5264165FTTA-6016bit1M(12rows,8cols) word4Bankx8 64M SO-DIMM
64Mbit三菱M2V64S40BTP-816bit1M(12rows,8cols) word4Bankx8 64M SO-DIMM
64MbitHynixHY57V651620B16bit1M(12rows,8cols) word4Bankx8 64M CF-A77内蔵
256MbitHynixHY57V56820BT-H8bit8M(13rows,10cols) word4Bankx8 256M SO-DIMM(VN10S-AP256M) 430TX,iMax use only.
64MbitNECD4564841G5-A10-9JF8bit2M(12rows,8cols) word4Bankx8 64M 168DIMM(MELCO VSF-64M)
128MbitSEITECPM72V28841CT-68bit4M(12rows,10cols) word4Bankx16 256M 168DIMM
64MbitMOSELV54C365804VCT78bit2M(12rows,9cols) word4Bankx16 128M 168DIMM
64MbitSEIMENSHYB39S64800AT-88bit2M(12rows,9cols) word4Bankx8 64M 168DIMM

↑PageTop

SPDについても調べました!
JEDECの144ピンSO-DIMMメモリデザインガイドでは、SPDはモジュールごとに1個実装され、SCL,SDAはDIMMソケットの142と141ピンにアサインされており、A0,A1,A2,WPはGND接続となっています。
実装されているチップについて手元の市販メモリを見てみました。168pinデスクトップメモリもSPD比較の為に掲載します。5種類じゃ寂しいというのもありますが...

使用したSO-DIMMは以下の種類です。
容量名称SDRAMチップSPDチップ
256MIBM FRU-33L3070
(OEM:SAMSUNG M464S3323CN0-L1L)
SAMSUNGK4S280832C-NL1L16 個34W02(SSOP)
128MPC-100(GREEN HOUSE?)WinbondW981216BH-758 個24W02(SSOP)
128M不明TOSHIBATC59SM716FT-808 個S52-020(SSOP)Micron Technology?
64MHB52DBBDC-B6F PC100-322HITACHI5264165FTTA60 PC100-222-608 個02AV 0071(SSOP)
64MFRU-08K3409三菱M2V64S40BTP-88 個2402(SSOP)
256M参考:168pinデスクトップメモリ ノーブランドHT24LC02(SSOP)
128M参考:168pinデスクトップメモリ モーセルチップ9877-0259(SSOP)
64M参考:168pinデスクトップメモリ メルコS52(SSOP)
64M参考:168pinデスクトップメモリ ノーブランドCSI 24WC02J(SOP)
32M参考:168pinデスクトップメモリ 富士通CSI 24WC02J(SOP)
32M参考:168pinデスクトップメモリ 富士通02L(SSOP)

168pin-DIMMは基板面積が広いためか、SSOPとSOP両方のパターンがありどちらにも対応できるようになっていました。

SPD用EEPROMは3402として各社互換品を出しているようです。汎用EEPROMの2402が非常に良く似ています。
データシートはROHM社のものが日本語で見易いので紹介します。
・SPD用 2kbit EEPROM BR34L02FV-W.pdf
・シリアル 2kbit EEPROM BR24L02-W/BR24L02FV-W.pdf
3402はSPD専用、2402は汎用のシリアルEEPROMで両者の違いは、00-7Fhの128バイトがワンタイムROMになっているか全領域EEPROMの違いだけで、ピンやコマンドに互換性がありそうです。

つまり、2402タイプはWPをHに接続すればSCL,SDAのコントロールで書き換え可能、3402チップが搭載されているものも2402チップに換装すれば書き換え可能になるまたは、内容を書いた2402に換装すれば、SPDの内容を自由に変更できそうですね。
02AV,S52,02L,9877についてはどちらのタイプか解りませんが、これらも置き換えればよさそうです。
SOPパッケージなので少し大きいですけど24WC02Jを搭載した168pinメモリ8枚が使い道の無いまま死蔵品となってますからもぎ取れば手に入ります♪

↑PageTop

SPD覗いてみよう!!

読むだけならソフトで!!
SPD覗くにはSMBusにアクセスする簡単なコードを書けばいいようです。

参考になりそうなコードが公開されていました。
・PIIX4専用らしいCソースコード(1998年製)→ SPDを読む
・ICH2のSMBus Controllerへのアクセス方法などASMコード→ ttp://www10.big.or.jp/~soyama/diary/diary_200201.html

しかし、とりあえず見てみたいのでSPDをダンプし解説付きで表示してくれる便利なツール SPDch を使います。→paraffinさんのページ
Win2k/XpではGIVEIO.SYSが必要なのでこれも組み込みます。ワンクリックでGIVEIO.SYSをインストールするinstdrvというツールもどこかにあるはずです。便利なので探してみてください。
うちの144ピンSO-DIMMメモリ使用機に片っ端からインストールしてみました。
↓結果
機体チップセットBIOSオンボードDIMM最大メモリOSSPDch
Panasonic Let's Note CF-A77440BXPanasonic(Phoenix)96MB1352MBWin2000○ OK
Panasonic Let's Note CF-A1440MXPanasonic(Phoenix)64MB(撤去)1256MBWin2000× NG
FUJITSU Bryce(FMV-NJ4/45C?)440MXFUJITSU(Phoenix)64MB1192MBWin2000× NG
HITACHI 220FX(PC7NP3)440BXHITACHI(Phoenix)なし2512MB?Win2000× NG
Interware Poket370(ESPRESSO)i810AMIなし1256MBWin2000○ OK
※ CF-A77はオンボードSDRAMを張り替えてしまったので64MB→96MBにアップしています。

SPDchはもともとデスクトップのASUSマザーボードを対象としてるので、ノートパソコンではSPDが見れない場合があるようです。
Poket370は小型ですがノートと言うよりも作りはデスクトップに近いと思われるので、CF-A77を使用する事にしました。

↑PageTop

DUMPリスト
希望が持てたところで、さっそくダンプリストです。

256M
  OFFSET +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F    0123456789ABCDEF
  -------------------------------------------------------  ------------------
   0000  80 08 04 0C 0A 02 40 00 01 A0 60 00 80 08 00 01    ......@...`.....
   0010  8F 04 06 01 01 00 0E C0 70 00 00 14 14 14 32 20    ........p.....2 
   0020  20 10 20 10 00 00 00 00 00 00 00 00 00 00 00 00     . .............
   0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 47    ...............G
   0040  CE 00 00 00 00 00 00 00 01 4D 34 20 36 34 53 33    .........M4 64S3
   0050  33 32 33 43 4E 30 2D 4C 31 4C 20 30 43 24 01 23    323CN0-L1L 0C$.#
   0060  EE 8C 02 FF 57 37 41 31 30 30 43 FF FF FF FF FF    ....W7A100C.....
   0070  FF FF FF FF FF FF FF FF FF FF FF FF FF FF 64 CD    ..............d.
  -------------------------------------------------------  ------------------

128M

OFFSET +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF ------------------------------------------------------- ------------------ 0000 80 08 04 0C 09 02 40 00 01 A0 60 00 80 10 00 01 ......@...`..... 0010 8F 04 06 01 01 00 0F A0 60 00 00 14 14 14 32 10 ........`.....2. 0020 20 10 20 10 00 00 00 00 00 00 00 00 00 00 00 00 . ............. 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 0F ................ 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 F6 ..............d. ------------------------------------------------------- ------------------

128M THSHIBA
  OFFSET +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F    0123456789ABCDEF
  -------------------------------------------------------  ------------------
   0000  80 08 04 0C 09 02 40 00 01 A0 60 00 80 10 00 01    ......@...`.....
   0010  8F 04 06 01 01 00 0E A0 60 00 00 14 14 14 32 10    ........`.....2.
   0020  20 10 20 10 00 00 00 00 00 00 00 00 00 00 00 00     . .............
   0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 0E    ................
   0040  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ................
   0050  FF FF FF FF FF FF FF FF FF FF FF FF FF 03 12 FF    ................
   0060  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF    ................
   0070  FF FF FF FF FF FF FF FF FF FF FF FF FF 00 64 F6    ..............d.
  -------------------------------------------------------  ------------------

64M
  OFFSET +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F    0123456789ABCDEF
  -------------------------------------------------------  ------------------
   0000  80 08 04 0C 08 02 40 00 01 A0 60 00 80 10 00 01    ......@...`.....
   0010  8F 04 06 01 01 00 0E F0 90 00 00 14 14 14 32 08    ..............2.
   0020  20 10 20 10 00 00 00 00 00 00 00 00 00 00 00 00     . .............
   0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 85    ................
   0040  07 00 00 00 00 00 00 00 4A 48 42 35 32 44 38 38    ........JHB52D88
   0050  44 43 2D 42 36 46 20 20 20 20 20 30 20 00 22 53    DC-B6F     0 ."S
   0060  03 E7 2E FF FF FF FF FF FF FF FF FF FF FF FF FF    ................
   0070  FF FF FF FF FF FF FF FF FF FF FF FF FF FF 64 CD    ..............d.
  -------------------------------------------------------  ------------------

64M 08K3409
  OFFSET +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F    0123456789ABCDEF
  -------------------------------------------------------  ------------------
   0000  80 08 04 0C 08 02 40 00 01 A0 60 00 80 10 00 01    ......@...`.....
   0010  8F 04 04 01 01 00 0E 00 00 00 00 14 14 14 32 08    ..............2.
   0020  20 10 20 10 00 00 00 00 00 00 00 00 00 00 00 00     . .............
   0030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 03    ................
   0040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
   0050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
   0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
   0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 CD    ..............d.
  -------------------------------------------------------  ------------------

↑PageTop

比較表
ダンプじゃ内容がわかりにくいので、SPDchの出力を比較表にしました。
12h,17h,18hを変更すればCL2に対応できそうです。
10,9,8 column はメモリチップ性能そのものですね、16チップと8チップのモジュールしかなかったので4チップモジュールは 05h:1rows になるのか確認できませんでした。デスクトップ用の片面実装64MBがあるのでこれを見れば参考になるかも知れません。

BYTE256M128M128M
THSHIBA
64M64M
08K3409
0 [00h]Number of Bytes used by Module Manufacturer (General) 128 bytes used
1 [01h]Total SPD Memory Size (General) 256 bytes
2 [02h]Memory Type (General) SDRAM
3 [03h]Number of Row Address Bits (SDRAM specific) 12 row address bits
4 [04h]Number of Column Address Bits (SDRAM specific) 10 column address bits 9 column address bits 8 column address bits
5 [05h]Number of Module Rows 2 rows
6-7 [06-07h]Module Data Width x64
8 [08h]Module Interface Signal Levels LVTTL
9 [09h]SDRAM Cycle time (highest CAS latency) Tclk = 10.0ns/CL3
10 [0Ah]SDRAM Access time from Clock (highest CAS latency) Tac = 6.0ns/CL3
11 [0Bh]Module Configuration Type Non-Parity, Non-ECC
12 [0Ch]Refresh Rate/Type 15.625us/Self Refresh
13 [0Dh]SDRAM Width x8 x16 x16 x16 x16
(Primary SDRAM)(No Bank2 -OR- Bank2 uses same width Primary SDRAM as Bank1)
14 [0Eh]Error Checking SDRAM Width None
15 [0Fh]SDRAM Device Attributes, Min Clock Delay for Back to Back Random Column Addresses Tccd = 1 clock
16 [10h]SDRAM Device Attributes, Burst Lengths Supported Burst length = 1, 2, 4, 8, Page, Supported
17 [11h]SDRAM Device Attributes, Number of Banks on SDRAM Device 4 banks
18 [12h]SDRAM Device Attributes, CAS Latency CAS Latency = 3, 2, Supported CAS Latency = 3, Supported
19 [13h]SDRAM Device Attributes, CS Latency CS Latency = 0, Supported
20 [14h]SDRAM Device Attributes, WE Latency WE Latency = 0, Supported
21 [15h]SDRAM Module Attributes Unbuffered
22 [16h]SDRAM Device Attributes, General Early RAS# Precharge
Auto-Precharge, Precharge All
Write 1/Read Burst
Supported Lower Vcc tolerance = 10%, Upper Vcc tolerance = 10%
23 [17h]SDRAM Cycle time (2nd highest CAS latency) Tclk = 12.0ns/CL2 Tclk = 10.0ns/CL2 Tclk = 15.0ns/CL2 N/A
24 [18h]SDRAM Access from Clock (2nd highest CAS latency) Tac = 7.0ns/CL2 Tac = 6.0ns/CL2 Tac = 9.0ns/CL2
25 [19h]SDRAM Cycle time (3rd highest CAS latency) N/A
26 [1Ah]SDRAM Access from Clock (3rd highest CAS latency) N/A
27 [1Bh]Minimum Row Precharge Time Trp = 20ns
28 [1Ch]Row Active to Row Active Min Trrd = 20ns
29 [1Dh]RAS to CAS Delay Min Trcd = 20ns
30 [1Eh]Minimum RAS Pulse Width Tras = 50ns
31 [1Fh]Density of Each Row on Module Row = 128MB Row = 64MB Row = 32MB
32 [20h]Command and Address signal input setup time 2.0ns
33 [21h]Command and Address signal input hold time 1.0ns
34 [22h]Data signal input setup time 2.0ns
35 [23h]Data signal input hold time 1.0ns
62 [3Eh]SPD Data Revision Code Rev.1.2
63 [3Fh]Checksum for Bytes 0-62(The low 8-bits of the arithmetic sum of bytes 0) The checksum = 47h
(through 62. = 0547h)
The checksum = 0Fh
(through 62. = 050Fh)
The checksum = 0Eh
(through 62. = 050Eh)
The checksum = 85h
(through 62. = 0585h)
The checksum = 03h
(through 62. = 0403h)
64-71 [40-47h]Manufacturer's JEDEC ID Code Company Name = Samsung,
Bank = 1,
Number = 78 (DEC),
CODE = CE00000000000000 (HEX)
None Company Name = Unknown,
FFFFFFFFFFFFFFFF (HEX),
" " (ASCII)
Company Name = Hitachi,
Bank = 1,
Number = 7 (DEC),
CODE = 0700000000000000 (HEX)
None
72 [48h]Manufacturing Location 01h 00h FFh 4Ah 00h
73-90 [49-5Ah]Manufacturer's Part Number M4 64S3323CN0-L1L HB52D88DC-B6F
91-92 [5B-5Ch]Revision Code 30h, 43h N/A FFh, FFh 30h, 20h N/A
93-94 [5D-5Eh]Manufacturing Date Year : 36, Week : 1 Year : 0, Week : 0 Year : 3, Week : 18 Year : 0, Week : 34 Year : 0, Week : 0
95-98 [5F-62h]Assembly Serial Number S/N : 23EE8C02 (HEX) S/N : 00000000 (HEX) S/N : FFFFFFFF (HEX) S/N : 5303E72E (HEX) S/N : 00000000 (HEX)
99-125 [63-7Dh]Manufacturer Specific Data FF57374131303043FFFF...FF (HEX) 0000...00 (HEX) FFFF...FF00 (HEX) FFFF...FF (HEX) 0000...00 (HEX)
126 [7Eh]Intel specification for frequency 100MHz
127 [7Fh]Intel Specification details for 100MHz Support CLK0 CLK1 (2clock)Connected,
Junction Temp : 100C,
CL3 Supported,
Intel defined Concurrent Auto-precharge Supported
CLK0 CLK1 CLK2 CLK3 (4clock)Connected,
Junction Temp : 90C,
CL2 Supported,
CLK0 CLK1 (2clock)Connected,
Junction Temp : 100C,
CL3 Supported,
Intel defined Concurrent Auto-precharge Supported

↑PageTop

SPDを書き換えてみよう!!

秋月PICライターで読み書きします
AKI-PICにはPICやAVRマイコンのROMライターですが、シリアルEEPROMプログラム(eeprgm6.exe)で93xxと24xxのシリアルEEPROMの読み書きができます。
SCL,SDAはDIMMソケットの142と141ピンにアサインされているので、WPのピンを加工すればパソコン本体だけで書き変えできそうですが、まずは実験なのでお手軽にいきます〜

so-DIMMに付いていたSSOPと、ジャンクのCバス用モデムボード(PC-9801-120)からもぎとったAT24C02N-SOPを、秋月PICライターに挿せるようにDIPに変換しました。SSOPは秋月電子通商で買った変換基板を使いました。10個で150円と大変リーズナブルです。Vカットされた1枚基板でポキポキ折って使います。EEPROMの足が長いので直角に曲げて下におろさないとランドからはみ出てしまいます。あと0.2mm程度ランドが長いとすごくいいのにちょっと残念です。
SOPの変換は同店の1.25mmピッチユニバーサル基板をカットして使いました。ガラスエポキシで1枚120円♪


64MB so-DIMMのSPDの付いてた所から、DIP8Pのソケットが引き出されました。

↑PageTop

実験結果!!
ドナーはノーブランド 64MB so-DIMM で32MB-2Rank構成です。
まずSPDの無い状態で起動テストを行いました。

↓結果
機体チップセットBIOSオンボードDIMM最大メモリOSSPDch
FUJITSU Bryce(FMV-NJ4/45C?)440MXFUJITSU(Phoenix)64MB1192MBWin2000× 下記エラー画面を表示
Panasonic Let's Note CF-A77440BXPanasonic(Phoenix)96MB1352MBWin2000○ 正常に認識しBIOS通過、Win2000でも認識
HITACHI 220FX(PC7NP3)440BXHITACHI(Phoenix)なし2512MB?Win2000○ 正常に認識しBIOS通過、Win2000未確認
※ CF-A77はオンボードSDRAMを張り替えてしまったので64MB→96MBにアップしています。

FUJITSU Bryce ではSPD異常だとこのメッセージが出ます


あれれ?3機種のうちエラーが出るのは1機種だけ、しかもYと選択すれば物理メモリのチェックがはじまって普通に使えるようです。

次にSPDを偽造してBIOSを騙そうとしました。
1.Number of Module Rows=1 として、64MBのうち片面32MBだけと偽ってみました。
2.column address bits=7, Density of Each Row on Module=16MB として、16+16=32MBメモリだと偽ってみました。
3.さらにNumber of Module Rows=1 として、16MBだと偽ってみました。
4.256MBだと偽ってみました。

Bryceはチェックサムを間違うと「SPDが見つかりません」と出ますが、どんな内容でも物理メモリのチェックがはじまって指定しても意味がないようです。C-A77と220FXではSPDを見てすらいません(汗)

結論!

SPDは付いていれば良い.内容は関係なし!

(CAS latency や Speed が反映されているかどうかは今回検証してません)
↑PageTop

E-mail : saza00@mail.goo.ne.jp Index に戻る