- 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をのメモリ構成
- JEDECガイドによると、so-DIMMの標準構成は、1本のクロック線でSDRAM4個を駆動するよう設計されており
以下の種類となります。
モジュール
容量Ver 物理
バンクSDRAM Address bit 密度 チップ数 Row Col Bank 32MB A 1 64Mbit(16x 4M) 4 12 8 2 64MB B 2 64Mbit(16x 4M) 8 12 8 2 64MB A 1 128Mbit(16x 8M) 4 12 9 2 128MB B 2 128Mbit(16x 8M) 8 12 9 2 128MB A 1 256Mbit(16x16M) 4 13 9 2 256MB B 2 256Mbit(16x16M) 8 13 9 2 256MB A 1 512Mbit(16x32M) 4 13 10 2 512MB B 2 512Mbit(16x32M) 8 13 10 2
これは一般に販売されている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 物理
バンクSDRAM Address bit 密度 チップ数 Row Col Bank 256MB B 2 128Mbit(8x16M) 16 12 10 2
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のメモリ構成を調べてみました。
容量 メーカー 型番 構成 128Mbit SAMSUNG K4S280832C-NL1L 8bit 4M(12rows,10cols) word 4Bank x16 256M SO-DIMM(M464S3323CN0-L1L) 128Mbit Winbond W981216BH-75 16bit 2M(12rows,9cols) word 4Bank x8 128M SO-DIMM 128Mbit TOSHIBA TC59SM716FT-80 16bit 2M(12rows,9cols) word 4Bank x8 128M SO-DIMM 128Mbit Micron 48LC8M16A2-8E 16bit 2M(12rows,9cols) word 4Bank x4 64M Bryce内蔵(1号) 128Mbit SAMSUNG KM416S8030BT-GH 16bit 2M(12rows,9cols) word 4Bank x4 64M Bryce内蔵(2号) 128Mbit SAMSUNG KM416S8030-FL 16bit 2M(12rows,9cols) word 4Bank x4 64M CF-A1内蔵 64Mbit NEC HM5264165FTTA-60 16bit 1M(12rows,8cols) word 4Bank x8 64M SO-DIMM 64Mbit 三菱 M2V64S40BTP-8 16bit 1M(12rows,8cols) word 4Bank x8 64M SO-DIMM 64Mbit Hynix HY57V651620B 16bit 1M(12rows,8cols) word 4Bank x8 64M CF-A77内蔵 256Mbit Hynix HY57V56820BT-H 8bit 8M(13rows,10cols) word 4Bank x8 256M SO-DIMM(VN10S-AP256M) 430TX,iMax use only. 64Mbit NEC D4564841G5-A10-9JF 8bit 2M(12rows,8cols) word 4Bank x8 64M 168DIMM(MELCO VSF-64M) 128Mbit SEITEC PM72V28841CT-6 8bit 4M(12rows,10cols) word 4Bank x16 256M 168DIMM 64Mbit MOSEL V54C365804VCT7 8bit 2M(12rows,9cols) word 4Bank x16 128M 168DIMM 64Mbit SEIMENS HYB39S64800AT-8 8bit 2M(12rows,9cols) word 4Bank x8 64M 168DIMM
- SPDについても調べました!
- JEDECの144ピンSO-DIMMメモリデザインガイドでは、SPDはモジュールごとに1個実装され、SCL,SDAはDIMMソケットの142と141ピンにアサインされており、A0,A1,A2,WPはGND接続となっています。
実装されているチップについて手元の市販メモリを見てみました。168pinデスクトップメモリもSPD比較の為に掲載します。5種類じゃ寂しいというのもありますが...
使用したSO-DIMMは以下の種類です。
容量 名称 SDRAMチップ SPDチップ 256M IBM FRU-33L3070
(OEM:SAMSUNG M464S3323CN0-L1L)SAMSUNG K4S280832C-NL1L 16 個 34W02(SSOP) 128M PC-100(GREEN HOUSE?) Winbond W981216BH-75 8 個 24W02(SSOP) 128M 不明 TOSHIBA TC59SM716FT-80 8 個 S52-020(SSOP)Micron Technology? 64M HB52DBBDC-B6F PC100-322 HITACHI 5264165FTTA60 PC100-222-60 8 個 02AV 0071(SSOP) 64M FRU-08K3409 三菱 M2V64S40BTP-8 8 個 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枚が使い道の無いまま死蔵品となってますからもぎ取れば手に入ります♪
- 読むだけならソフトで!!
- 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メモリ使用機に片っ端からインストールしてみました。
↓結果
※ CF-A77はオンボードSDRAMを張り替えてしまったので64MB→96MBにアップしています。
機体 チップセット BIOS オンボード DIMM 最大メモリ OS SPDch Panasonic Let's Note CF-A77 440BX Panasonic(Phoenix) 96MB 1 352MB Win2000 ○ OK Panasonic Let's Note CF-A1 440MX Panasonic(Phoenix) 64MB(撤去) 1 256MB Win2000 × NG FUJITSU Bryce(FMV-NJ4/45C?) 440MX FUJITSU(Phoenix) 64MB 1 192MB Win2000 × NG HITACHI 220FX(PC7NP3) 440BX HITACHI(Phoenix) なし 2 512MB? Win2000 × NG Interware Poket370(ESPRESSO) i810 AMI なし 1 256MB Win2000 ○ OK
SPDchはもともとデスクトップのASUSマザーボードを対象としてるので、ノートパソコンではSPDが見れない場合があるようです。
Poket370は小型ですがノートと言うよりも作りはデスクトップに近いと思われるので、CF-A77を使用する事にしました。
- 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. ------------------------------------------------------- ------------------
- 比較表
- ダンプじゃ内容がわかりにくいので、SPDchの出力を比較表にしました。
12h,17h,18hを変更すればCL2に対応できそうです。
10,9,8 column はメモリチップ性能そのものですね、16チップと8チップのモジュールしかなかったので4チップモジュールは 05h:1rows になるのか確認できませんでした。デスクトップ用の片面実装64MBがあるのでこれを見れば参考になるかも知れません。
BYTE 256M 128M 128M
THSHIBA64M 64M
08K34090 [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 SupportedCLK0 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
- 秋月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のソケットが引き出されました。
- 実験結果!!
- ドナーはノーブランド 64MB so-DIMM で32MB-2Rank構成です。
まずSPDの無い状態で起動テストを行いました。
↓結果
※ CF-A77はオンボードSDRAMを張り替えてしまったので64MB→96MBにアップしています。
機体 チップセット BIOS オンボード DIMM 最大メモリ OS SPDch FUJITSU Bryce(FMV-NJ4/45C?) 440MX FUJITSU(Phoenix) 64MB 1 192MB Win2000 × 下記エラー画面を表示 Panasonic Let's Note CF-A77 440BX Panasonic(Phoenix) 96MB 1 352MB Win2000 ○ 正常に認識しBIOS通過、Win2000でも認識 HITACHI 220FX(PC7NP3) 440BX HITACHI(Phoenix) なし 2 512MB? Win2000 ○ 正常に認識しBIOS通過、Win2000未確認
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 が反映されているかどうかは今回検証してません)