Rekayasa Balik dan Analisis Kartu microSDXC Daya Tahan Tinggi SanDisk

Bagi mereka yang terlalu malas membaca: Kartu Daya Tahan Tinggi SanDisk menggunakan memori flash SanDisk / Toshiba 3D TLC . Saya butuh waktu lebih lama dari yang seharusnya (dan semua karena SanDisk!) Untuk menginstal ini.



Sebelumnya, saya melihat kartu microSD SanDisk untuk digunakan dalam aplikasi intensif tulis seperti kamera dasbor. Kemudian saya mempelajari hasil tes kecepatan dan memikirkan jenis NAND Flash apa yang digunakan di kartu tersebut. SanDisk tidak menerbitkan deskripsi rinci tentang bagian dalam kartu, jadi saya tidak punya pilihan selain merekayasa ulang kartu itu sendiri.



Dukungan teknis yang gagal



Berharap untuk menggali informasi, saya mengirim email ke dukungan SanDisk menanyakan jenis NAND Flash apa yang mereka gunakan di jalur High Endurance mereka, serta metrik ketahanan seperti siklus P / E (Program / Erase), dan total jumlah terabyte tertulis (TBW). Sayangnya, staf pendukung SanDisk tidak dapat memberikan jawaban yang memuaskan atas pertanyaan saya, karena mereka tidak memberikan informasi yang tidak disebutkan dalam spesifikasi yang dipublikasikan. Saya diberitahu bahwa semua kartu mereka menggunakan MLC Flash, yang benar jika Anda memanggil TLC Flash 3-bit β€œMLC” (seperti yang dilakukan Samsung).



Dear Jason,



Terima kasih telah menghubungi Dukungan Pelanggan Global SanDisk. Kami menghargai Anda menjadi anggota keluarga SanDisk kami.



Saya memahami bahwa Anda ingin mengetahui lebih banyak tentang kartu pemantauan video Daya Tahan Tinggi SanDisk kami. Izinkan kami memberi tahu Anda bahwa semua kartu memori kami menggunakan teknologi flash sel multi level . Namun, jumlah siklus baca / tulis flash tidak dipublikasikan atau didokumentasikan. Hanya kecepatan baca dan tulis yang dipublikasikan, yaitu 100 MB / s dan 40 MB / s. Kartu 64GB dapat merekam video Full HD hingga 10.000 jam. Detailnya dapat ditemukan disini.



SANDISK HIGH ENDURANCE VIDEO MONITORING KARTU microSD



Salam, ...


Saya akan memberi mereka medali dengan kata-kata "Anda mencoba".



Anatomi kartu SD



Kartu microSD mungkin tampak seperti perangkat monolitik. Namun, kartu-kartu ini terdiri dari banyak chip berbeda, yang masing-masing memainkan peran berbeda. Kartu SD yang paling sederhana akan memiliki pengontrol yang mengontrol chip NAND Flash dan berkomunikasi dengan host (PC, kamera, dll.), Serta dengan NAND Flash itu sendiri (terdiri dari satu atau lebih kristal flash). Blog Bunnie Studios memiliki artikel yang sangat bagus tentang pembuatan kartu SD, termasuk deskripsi barang palsu dan pembuatannya.





Diagram Blok dari Kartu SD Khas Kartu



MicroSD sering (tetapi tidak selalu) ditemukan situs pengujian yang digunakan untuk pemrograman dan pengujian NAND Flash dalam produksi. Mereka dapat digunakan untuk memulihkan data, atau menggunakan kembali kartu microSD dengan pengontrol atau firmware yang rusak. Mereka memungkinkan Anda mengubah kartu menjadi Flash NAND sederhana - Anda dapat membaca tentang ini di blog Gao Louis. Perhatikan bahwa tidak ada standar untuk lokasi pengujian tersebut (bahkan di dalam pabrikan yang sama), namun, beberapa pabrikan, khususnya SanDisk, memiliki pola yang memfasilitasi rekayasa balik.



Crouching Controller, Lurking Test Pads



Kartu MicroSD termasuk dalam kategori perangkat flash β€œmonolitik” karena menggabungkan pengontrol dan NAND Flash menjadi satu paket yang tidak dapat dipisahkan. Banyak pabrikan membawa bus data flash ke situs uji tersembunyi (dan hampir tidak ada dokumentasi). Dengan bantuan mereka, produsen kartu memori dan flash drive USB lainnya membuat drive murah dari komponen yang rusak. Pengontrol dapat dengan mudah dimatikan, dan flash dapat digunakan seperti chip biasa.



Dalam kasus kartu SanDisk, informasi tentang pinout dari situs pengujian mereka sangat langka. Setiap generasi memiliki perbedaannya sendiri, tetapi sebagian besar tata letaknya tetap tidak berubah. Perbedaannya bisa berakibat fatal, karena pin untuk daya dan arde terkadang bertukar (dan jika polaritasnya salah, chip akan langsung mati!).



Kartu saya (serta banyak kartu perusahaan dari jalur mahal - bukan Ultra) memiliki bantalan uji yang tidak dilapisi dengan pernis, tetapi dengan semacam epoksi yang dicetak di layar dengan nomor seri yang dipotong laser. Saya melakukan pemanasan, mengikis, dan berhasil menghilangkan lapisan yang sangat rapuh ini dari test pad. Saat melakukannya, saya juga menghapus nomor serinya - mungkin ini seperti segel garansi. Garis Tes Garis Besar





Bantalan Tes Epoksi Setelah menghilangkan jejak lapisan epoksi, saya menemukan tata letak bantalan tes yang sudah dikenal, yang beberapa tambahan ditambahkan di bawah ini.













Membuat modul antarmuka



Konsep modul antarmuka cukup sederhana. Untuk setiap bantalan uji, kami menarik kabel yang mengarah ke bantalan yang lebih besar untuk akses yang lebih mudah, dan menghubungkan bus SD normal ke konektor SD sehingga pengontrol melakukan tugasnya sementara kami mengotak-atik bus NAND Flash. Mengingat ukuran situs uji yang kecil dan jumlahnya yang besar, hasilnya mungkin akan sedikit ceroboh.





Perakitan modul antarmuka Modul





antarmuka, foto yang diperbesar



Saya mulai dengan menempelkan kartu dengan selotip dua sisi ke papan tempat memotong roti. Kemudian saya menyegel semua bantalan dan menyolder kapasitor keramik 1uF kecil ke bantalan Vcc dan GND pada kartu. Dengan menggunakan kabel enamel 40 AWG (0,1 mm), saya menghubungkan setiap panel uji ke pin yang sesuai di papan tempat memotong roti. Bersama dengan situs tambahan, ini berjumlah 28 kabel kecil!



Untuk konektor SD saya menggunakan kabel dengan perangkat untuk memperbaiki ponsel Android dari HTC " XTC 2 ClipIni bekerja seperti 'kartu SD jarak jauh fleksibel' dan mengarahkan sinyal melalui kabel fleksibel kecil. Saya membungkus kabel dengan pita tembaga untuk melindunginya dari kebisingan dan amplifikasi, dan menyolder selotip ke bantalan luar papan tempat memotong roti untuk memperkuat struktur. Kemudian saya menyelipkan ujung kabel, dan menghubungkan kabel enamel ke pin kartu, lalu saya memasukkan LED dengan resistor ke kabel listrik sehingga saya bisa melihat kapan kartu itu dinyalakan.



Analisis bus



Setelah menyebarkan semua situs uji untuk kontak uji, saya dapat mulai memahami apa yang menjadi tanggung jawab kontak ini dalam hal akses ke NAND Flash yang terletak di dalam kartu.







Secara umum, tata letak pin sama dengan kebanyakan kartu microSD SanDisk.



Untuk menganalisis sinyal dari semua pin, saya menggunakan penganalisis logika DSLogic Plus... Pinout untuk transfer data sudah diketahui, dan pekerjaan tersulit telah diselesaikan (bus data, kontrol, alamat, perintah, perlindungan tulis, status sibuk / bebas). Namun, peran tidak masing-masing kontak segera terlihat - pinout yang saya temukan termasuk jumlah minimum bus yang memungkinkan bekerja dengan NAND Flash - dengan pengecualian bus kontrol, yang menempatkan pengontrol ke mode reset dan memutusnya dari kontrol bus data (ini akan menjadi penting nanti) ...



Dengan mendengarkan bus data pada kecepatan maksimum yang tersedia untuk DSLogic (dan menggunakan buffer 32 MB yang tersedia), saya dapat menyusun daftar perintah yang jelas yang dikirim ke NAND Flash dari pengontrol pada saat inisialisasi.



Dasar-dasar bus listening dan NAND I / O (menulis perintah, alamat, membaca data)



Saya secara khusus mencari dua perintah: RESET (0xFF) dan READ ID (0x90). Saat mencari urutan perintah, penting untuk mengetahui kapan dan bagaimana data dan bus kontrol berubah. Saya akan mencoba menjelaskan semuanya selangkah demi selangkah. Jika Anda tertarik, saya merekomendasikan manual Micron , yang menjelaskan dasar-dasar NAND Flash dan memberikan lebih banyak informasi tentang prinsip-prinsip operasinya.





SanDisk High Endurance 128GB RESET Command Tracking dengan Logic Analyzer. Garis putus-putus menandai kemunculan perintah tulis dan setel ulang.





SanDisk High Endurance 128GB RESET Command Tracking dengan Logic Analyzer. Garis putus-putus menandai munculnya perintah baca / tulis.



Ketika perintah RESET dikirim ke NAND Flash, bus / CE (Chip Select, Active Low) ditarik ke bawah terlebih dahulu. Kemudian bus CLE (Command Latch Enable) ditarik; bus data disetel ke nilai terjadwal 0xFF (dalam biner); kemudian bus / WE (Write Enable, Active Low) beralih dari tegangan tinggi ke rendah, dan kemudian kembali ke tinggi (data dari bus data ditransfer ke chip ketika bus / WE beralih dari tegangan rendah ke tinggi, yang disebut tepi sinyal "); bus CLE ditarik mundur ke bawah, kembali normal. Chip flash kemudian menarik bus R / B (Status Siap / Sibuk) ke bawah untuk menunjukkan bahwa bus sibuk dengan pengaturan ulang, dan setelah selesai, menarik bus kembali ke tingkat atas.



Perintah READ ID bekerja dengan cara yang sama, kecuali setelah menulis perintah 0x90 (1001 0000) ke bus data, ia menarik bus ALE (Address Latch Enable), bukan CLE, dan menulis 0x00 (semua nol biner), menghasilkan / KAMI ke negara bagian yang lebih rendah. Chip mentransfer ID Flash NAND yang tertulis padanya ke register baca internal, dan data dibaca dari perangkat di setiap tepi bus / RE (Read Enable, Active Low); untuk sebagian besar perangkat, ini adalah 4 hingga 8 byte data.



ID Flash NAND



Setiap perangkat NAND Flash memiliki pengenal uniknya sendiri (untuk sebagian besar) yang menghubungkannya dengan pabrikan tertentu dan data fungsional khusus pabrikan lainnya. Dengan kata lain, hanya ID pabrikan yang ditetapkan oleh asosiasi teknologi JEDEC yang didefinisikan dengan baik .



Byte pertama menunjukkan pabrikan chip, dan sisanya (dari 2 hingga 6) menentukan karakteristik perangkat - semuanya ditentukan oleh pabrikan itu sendiri. Sebagian besar pabrikan NAND sangat enggan untuk mempublikasikan spesifikasi untuk perangkat, dan SanDisk (dan juga Toshiba / Kioxia) sangat ketat dikontrol oleh data ini, dengan pengecualian lembar data Toshiba yang sedikit usang yang bocor secara online. Karena perusahaan-perusahaan ini berbagi kapasitas produksi, dapat dibuat dugaan bahwa struktur data dalam data yang ditentukan oleh produsen dapat dicocokkan satu sama lain.



Sedangkan untuk kartu SanDisk High Endurance 128GB menggunakan NAND Flash ID 0x45 48 9A B3 7E 72 0D 0E. Beberapa dari angka ini dapat dibandingkan dengan spesifikasi Toshiba :



Byte (hex)
45

: SanDisk

48

I/O : 1.8 volts ( )

: 128 ( )

9A

NAND: TLC (Triple-Level Cell / 3 )

/CE: 4 ( 4 32 )

B3

: 12 (768 )

: 16 384 / 16

7E

/CE: 8 (2 )

72

:

: BiCS3 3D NAND

0D

( )

0E

( )





Meskipun tidak semua nilai byte dapat ditentukan dengan jelas, saya dapat menentukan bahwa kartu Daya Tahan Tinggi SanDisk menggunakan BiCS3 3D TLC NAND Flash - setidaknya ini adalah 3D NAND, yang secara signifikan melebihi NAND datar tradisional dalam hal keandalan. Sayangnya, informasi ini sendiri tidak dapat membedakan apakah pengontrol memanfaatkan mekanisme cache SLC untuk operasi tulis.



Geometri proses pembuatan chip ditentukan berdasarkan empat byte pertama ID Flash dan perbandingannya dengan baris file konfigurasi alat dari Silicon Motion untuk pengontrol USB Flash SM3271 dan pengontrol SM2258XTSSD tanpa DRAM. Alat-alat ini memberikan SKU yang diduga masing-masing dari chip SDTNAIAMA-256G dan SDUNBIEMM-32G, tetapi menurut saya ini tidak sesuai dengan konfigurasi memori flash di kartu ini.



Pengendalian eksternal



Saya ingin memastikan bahwa saya mendapatkan ID yang benar dari NAND Flash, jadi saya memasang papan debug Texas Instruments MSP430FR2433 dan menulis kode paling sederhana yang mengirimkan perintah RESET dan BACA ID yang saya butuhkan dan mencoba mengekstrak data tambahan secara paralel dari parameter tersembunyi chip Halaman Parameter JEDEC.



Hambatan pertama yang saya hadapi adalah bahwa MSP430 mereset sendiri setiap kali saya mencoba mengirim perintah RESET, yang menunjukkan bahwa catu daya terbatas papan MSP430 tidak dapat mengatasi arus ini. Ini bisa terjadi ketika " pertengkaran bus"ketika dua perangkat berkelahi satu sama lain, mencoba untuk secara bersamaan menerapkan tegangan tinggi dan rendah ke bus digital tertentu. Saya tidak yakin apakah saya mengerti apa yang terjadi, karena tidak ada informasi gratis tentang cara mematikan pengontrol kartu bawaan. adalah (dan karena ini dia "melepaskan" bus NAND dan memungkinkan perangkat lain untuk mengendalikannya.)



Saya menemukan bahwa panel uji A1 (lihat diagram) adalah bus reset pengontrol, dan jika Anda menjaga voltase di posisi bawah, pengontrol sepenuhnya membebaskan kendali atas bus Flash NAND. Setelah itu kode saya dari mikrokontroler dapat membaca ID Flash dengan benar dan tanpa hambatan.





Membaca ID Flash dari kartu



Halaman Pengaturan JEDEC ... atau setidaknya apa yang telah dilakukan SanDisk dengannya!



Jika tersedia, halaman parameter JEDEC berisi karakteristik detail chip Flash - jauh lebih detail daripada ID Flash NAND - dan, terlebih lagi, lebih standar. Namun, ternyata SanDisk memilih untuk mengabaikan standar tersebut dan menggunakan standarnya sendiri! Biasanya halaman dimulai dengan string ASCII "JEDEC", namun saya menemukan string duplikat "SNDK" ( nama perusahaan di bursa ) dan data lain yang tidak cocok dengan apa pun dari spesifikasi JEDEC! Nah, patut dicoba.



Saya mengumpulkan data menggunakan sketsa Arduino yang sama yang saya tunjukkan sebelumnya, dan menerima 1.536 byte data. Di Ideone saya menulis sebuah program kecil untuk mengubah 512 byte pertama menjadi dump HEX yang rapi:



Offset 00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F 0123456789ABCDEF

------ --+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-- ----------------

0x0000 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B SNDKSNDKSNDKSNDK

0x0010 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B SNDKSNDKSNDKSNDK

0x0020 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 ..... ...H.....A

0x0030 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 Hcj..... ...H...

0x0040 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 ..AHcj..... ...H

0x0050 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 .....AHcj..... .

0x0060 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 ..H.....AHcj....

0x0070 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 . ...H.....AHcj.

0x0080 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 .... ...H.....AH

0x0090 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 cj..... ...H....

0x00A0 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A .AHcj..... ...H.

0x00B0 B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 ....AHcj..... ..

0x00C0 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 .H.....AHcj.....

0x00D0 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 ...H.....AHcj..

0x00E0 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 ... ...H.....AHc

0x00F0 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 j..... ...H.....

0x0100 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 AHcj..... ...H..

0x0110 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 ...AHcj..... ...

0x0120 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 H.....AHcj.....

0x0130 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 ...H.....AHcj...

0x0140 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A .. ...H.....AHcj

0x0150 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 ..... ...H.....A

0x0160 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 Hcj..... ...H...

0x0170 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 ..AHcj..... ...H

0x0180 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 .....AHcj..... .

0x0190 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 ..H.....AHcj....

0x01A0 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 . ...H.....AHcj.

0x01B0 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 .... ...H.....AH

0x01C0 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 cj..... ...H....

0x01D0 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A .AHcj..... ...H.

0x01E0 B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 ....AHcj..... ..

0x01F0 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 .H.....AHcj.....




Analisis lebih lanjut menggunakan DSLogic analyzer menunjukkan bahwa pengontrol membutuhkan halaman parameter 4128 bp (4Kb + 32 bp) yang diisi dengan data berulang yang sama seperti yang ditunjukkan di atas.



Atur ulang masalah



Memeriksa data dari penganalisis logika, saya menemukan bahwa pengontrol mengirim perintah READ ID dua kali, tetapi pertama kali tanpa mengatur ulang Flash (yang biasanya perlu dilakukan segera setelah menerapkan daya ke chip!). Data yang dikembalikan oleh chip, secara halus, aneh.



Byte (hex) Deskripsi
98

Produsen: Toshiba

00

Tegangan I / O: tidak diketahui (tidak ada data)

Kapasitas perangkat: tidak diketahui (tidak ada data)

90

Jenis NAND: SLC (Sel Level Tunggal / 1 bit per sel)

Flash Chips / CE: 1

93

Ukuran blok: 4 MB tidak termasuk area cadangan.

Ukuran halaman : 16.384 byte / 16 kb tidak termasuk area cadangan

76

Matriks / CE: 2

72

Jenis antarmuka: Asynchronous

Proses geometri: 70 nm datar





Ini membuat saya bingung pada awalnya, karena saya mencoba mendapatkan ID dengan hanya mengurai logikanya. Tetapi setelah berbicara dengan seseorang yang memiliki banyak pengalaman dalam pemulihan data dari NAND Flash, saya mengetahui bahwa ini adalah norma untuk perangkat dari SanDisk. Mereka sangat longgar tentang perintah khusus dan struktur data. Jika Anda yakin dengan byte keempat, maka ukuran blok adalah 4 MB, yang terlihat masuk akal untuk chip Flash modern. Informasi lainnya tidak masuk akal bagi saya, kecuali bahwa byte pertama mengatakan bahwa produsen chip adalah Toshiba.



Kesimpulan



Saya melangkah terlalu jauh dalam upaya saya untuk mendapatkan jawaban atas pertanyaan sederhana tentang jenis chip apa yang digunakan SanDisk dalam kartu jangka panjangnya. Tampaknya mereka dengan bangga dapat berbicara tentang penggunaan teknologi 3D NAND untuk meningkatkan keandalan dan pengoperasian jangka panjang - tetapi tidak!



File



Bagi yang berminat, saya posting data yang saya intersep dari kartu setelah dihidupkan. Saya juga memposting sketsa kasar untuk Arduino, memungkinkan Anda untuk membaca ID NAND dan halaman parameter secara manual:




All Articles