Pitva odvařeného 40GB SSD Intel 320
Kapitoly článků
Identifikace pamětí
Než mi byl disk od WIFTa doručen, prohlédl jsem si fota vnitřností a zkoušel najít dokumentaci k použitým flash čipům. Bohužel pro obvod Intel 29F64G08ACME1 není dostupná žádná dokumentace, ale to nás přece neodradí – detektivní práce zpětného inženýra je to pravé geekovské dobrodružství.
V době internetu je hodně težké udržet tajemství a vyhledávání obrázků na Googlu poskytlo první indicii:
Zdroj: www.chipworks.com/Products/29F64G08ACME1_L74A_diemrk.jpg
K podobnému výsledku bychom se mohli dopracovat ve vlastní režii – za cenu nevratného poškození čipu, která ale není akceptovatelná – s obvody ještě máme své plány.
Intel a Micron mají úzkou spolupráci na poli NAND flash pamětí a toto je příkladná aplikace spolupráce. 64Gbit flash paměť byla nejčastěji používaná součástka a její masová výroba pomohla srazit ceny SSD do spotřebitelského segmentu.
Obrázek povrchu čipu nese kromě roku návrhu (2009) jednu důležitou informaci – kódové označení L74A. Modelová čísla v tomto formátu nesou obvody od Micronu – a pod tímto označením již nějakou dokumentaci najít lze. Zajímavostí je, že existují různé varianty obvodů – synchronní / asynchronní, 3.3V nebo 1.8V, jednočipové nebo vícečipové – a všechny jsou založeny na stejném kousku křemíku:
Zdroj: wenku.baidu.com/view/1942695a312b3169a451a49f.html
Označení Intelu se ale liší – kombinaci …ACME1 nelze dekódovat podle tabulky od Micronu. Protože označení nese jednu důležitou informaci – komunikační napětí, nezůstalo nám nic jiného než napětí před rozebráním disku změřit. Naše obvody zde používají 1.8V.
Hardware
Pro komunikaci s obvody jsem zvolil nejjednodušší cestu – na míru navrženou desku se sdílenou datovou sběrnící. Kromě zdroje na 1.8V a oddělovačů pro konverzi 3.3V/1.8V nese tato deska již jen samotné flash paměti. Řízení je realizováno univerzálně použitelným procesorovým modulem (ATmega644PA), který má na sobě i USB programátor a virtuální sériovou linku. V podstatě to je srovnatelné s Arduinem, jen rozměry jsou 30×40 mm a pro připojení do aplikace se používá vhodnější konektor nesoucí všechny signály procesoru.
Software
V procesorovém modulu běží náš vlastní „operační systém“ – složený z ovladačů a uživatelských utilit – programů komunikujících skrze příkazovou řádku. Tvorba nových komponent je tedy velice rychlá. Paměti používají otevřený standard ONFI – byl tedy implementován ovladač poskytující funkce podle této specifikace. Specifikace definuje dva různé přístupové režimy – povinný asynchronní (50 MHz SDR = 50MT/s) a volitelný synchronní (100 MHz DDR = 200MT/s). Jak se později ukázalo, synchronní režim není v našich obvodech povolen – ať žije marketing!
Specifikace ONFI definuje sadu identifikačních funkcí, které nám pomohly obvody identifikovat:
# onfi id 0
0:
ID4: 4f 4e 46 49 ONFI
ID8: 89 88 24 4b a9 00 00 00 ..$K....
MFG: INTEL
P/N: JS29F64G08AAME1
UID: 4eb1db74b8e9a07cff00ff00ff00ff00
Každý obvod se hlásí stejně, až na unikátní identifikátor, který je jiný v každém obvodu:
0: 4eb1db74b8e9a07cff00ff00ff00ff00
1: 4eb15bb198e8a05cff00ff00ff00ff00
2: aeb7db76d0e8a04cff00ff00ff00ff00
3: d6badb5ad0e8a07cff00ff00ff00ff00
4: aeb7db1621e9a04cff00ff00ff00ff00
5: 4eb1db9478e9a05cff00ff00ff00ff00
Není nám známo, zda tento identifikátor je použitý u šifrování disku, pravděpodobně není. Co je ale zajímavé, je fakt, že počet chyb, které jsme později změřili, korelují s hodnotou identifikátoru – obvody 0,1 a 5, nesoucí ID 4EB1…
vykazují o mnoho méně chyb.
Také nesouhlasí modelové číslo, kterým se obvod hlásí (JS29F64G08AAME1) s tím, co je na obvodě napsáno (JS29F64G08ACME1), ale bez příslušné dekódovací tabulky se nedá konkrétně říct, o kterou vlastnost obvodu se jedná.
Podrobnější identifikace a parametry obvodu jsou dostupné v binární podobě, zájemci si mohou parametry vyložit pak podle ONFI specifikace:
# onfi par 0
0x0000: 4f 4e 46 49 1e 00 58 00 ff 03 00 00 00 00 00 00 ONFI..X.........
0x0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x0020: 49 4e 54 45 4c 00 00 00 00 00 00 00 4a 53 32 39 INTEL.......JS29
0x0030: 46 36 34 47 30 38 41 41 4d 45 31 00 00 00 00 00 F64G08AAME1.....
0x0040: 89 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x0050: 00 20 00 00 c0 01 00 00 00 00 00 00 00 01 00 00 . ..............
0x0060: 00 10 00 00 01 23 02 64 00 88 13 01 00 00 01 00 .....#.d........
0x0070: 18 01 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x0080: 0a 3f 00 00 00 c4 09 10 27 4b 00 c8 00 00 00 00 .?......'K......
0x0090: 00 00 00 00 00 00 0a 07 4b 00 00 00 00 00 00 00 ........K.......
0x00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0x00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 85 78 ...............x
Organizace našich pamětí je:
- 8192 + 448 bajtů má stránka, což je nejmenší programovatelná oblast
- 256 stránek na blok, což je nejmenší mazatelná oblast
- 4096 bloků v obvodu
Celkem je to tedy 9.059.696.640 bajtů (72,48 Gbit), ale protože se jedná o MLC paměti, fyzicky je na čipu jen poloviční počet buněk (36,24 miliard). Pro srovnání: velikost stránky v SLC pamětech byla 4096+224 bajtů. Dokumentace zmiňuje ještě rozdělení sudých a lichých bloků na dvě oblasti (planes), které jsou výsledkem fyzické organizace obvodu do dvou podoblastí a umožňují současné mazání a programování, když se tyto operace provádí ve své oblasti.