Engenharia reversa e análise do cartão microSDXC SanDisk High Endurance

Para aqueles que têm preguiça de ler: os cartões SanDisk High Endurance usam memória flash SanDisk / Toshiba 3D TLC . Levei muito mais tempo do que deveria (e tudo por causa da SanDisk!) Para instalar isso.



Anteriormente, observei os cartões microSD da SanDisk para uso em aplicativos de gravação intensiva, como DVRs. Então eu olhei para os resultados do teste de velocidade e pensei sobre que tipo de NAND Flash é usado no cartão. A SanDisk não publica descrições detalhadas dos componentes internos dos cartões, então não tive escolha a não ser fazer a engenharia reversa do cartão sozinho.



Suporte técnico que falhou



Na esperança de obter informações, enviei um e-mail para o suporte da SanDisk perguntando que tipo de NAND Flash eles usam em sua linha de alta resistência, bem como métricas de resistência, como ciclos de P / E (Programa / Apagamento) e total o número de terabytes gravados (TBW). Infelizmente, a equipe de suporte da SanDisk não foi capaz de fornecer respostas satisfatórias às minhas perguntas, pois eles não fornecem informações não cobertas pelas especificações publicadas. Disseram-me que todos os seus cartões usam MLC Flash, o que é correto se você chamar o TLC Flash de 3 bits de "MLC" (como a Samsung faz).



Prezado Jason,



Obrigado por entrar em contato com o Suporte Global ao Cliente SanDisk. Agradecemos por você ser um membro de nossa família SanDisk.



Eu entendo que você deseja saber mais sobre nossa placa de monitoramento de vídeo SanDisk High Endurance. Informamos que todos os nossos cartões de memória utilizam a tecnologia Multi Level Cell Flash . No entanto, o número de ciclos de leitura / gravação flash não é publicado ou documentado. Apenas as velocidades de leitura e gravação são publicadas, ou seja, 100 MB / se 40 MB / s. O cartão de 64 GB pode gravar vídeo Full HD por até 10.000 horas. detalhes podem ser encontrados aqui.



SANDISK DE MONITORAMENTO DE VÍDEO DE ALTA RESISTÊNCIA CARTÃO microSD



Atenciosamente, ...


Vou dar a eles uma medalha com as palavras "você tentou".



Anatomia de um cartão SD



O cartão microSD pode parecer um dispositivo monolítico. No entanto, essas cartas são compostas de muitos chips diferentes, cada um dos quais desempenhando uma função diferente. O cartão SD mais simples terá um controlador que controla os chips NAND Flash e se comunica com o host (PC, câmera, etc.), bem como com o próprio NAND Flash (consistindo de um ou mais cristais de flash). O blog do Bunnie Studios tem um excelente artigo sobre a construção de cartões SD, incluindo descrições de falsificações e sua fabricação.





Diagrama de blocos de um cartão SD típico Os cartões



MicroSD são freqüentemente (mas nem sempre) encontrados em locais de teste usados ​​para programar e testar o NAND Flash em produção. Eles podem ser usados ​​para recuperar dadosou reutilizando cartões microSD com um controlador ou firmware com defeito. Eles permitem que você transforme um cartão em um simples NAND Flash - você pode ler sobre isso no blog de Gaua Louis. Observe que não existe um padrão para tais locais de teste (mesmo dentro do mesmo fabricante), no entanto, alguns fabricantes, em particular a SanDisk, possuem padrões que facilitam a engenharia reversa.



Controlador agachado, blocos de teste à espreita



Os cartões MicroSD se enquadram na categoria de dispositivos flash "monolíticos" porque combinam um controlador e o Flash NAND em um pacote único e não separável. Muitos fabricantes trazem o barramento de dados flash para sites de teste ocultos (e virtualmente sem documentação). Com a ajuda deles, outros fabricantes de cartões de memória e pendrives fazem unidades baratas com peças defeituosas. O controlador pode ser simplesmente desligado e o flash pode ser usado como um chip normal.



No caso dos cartões SanDisk, as informações sobre a pinagem de seus locais de teste são extremamente escassas. Cada geração tem suas próprias diferenças, mas o layout permanece praticamente inalterado. As diferenças podem ser fatais, pois os pinos de alimentação e aterramento às vezes são trocados (e se a polaridade estiver incorreta, o chip morrerá instantaneamente!).



Meu cartão (assim como muitos dos cartões da empresa de uma linha cara - não Ultra) tem almofadas de teste cobertas não com verniz, mas com algum tipo de epóxi impresso em tela com um número de série cortado a laser. Eu me aqueci, raspei e consegui remover esse revestimento muito frágil das almofadas de teste. Ao fazer isso, também removi o número de série - provavelmente é algo como um selo de garantia.





Almofadas de teste de epóxi





Delinear almofadas de teste



Depois de remover vestígios de revestimento de epóxi, me deparei com um layout familiar de almofadas de teste, ao qual alguns adicionais foram adicionados abaixo.



Criação de um módulo de interface



O conceito do módulo de interface é bastante simples. Para cada um dos blocos de teste, retiramos um fio que leva a um bloco maior para facilitar o acesso e conectamos o barramento SD normal ao conector SD para que o controlador faça seu trabalho enquanto mexemos no barramento NAND Flash. Dado o pequeno tamanho dos locais de teste e o grande número deles, o resultado pode acabar sendo um pouco confuso.





Montagem





do módulo de interface Módulo de interface, foto ampliada



Comecei colando o cartão com fita dupla-face no protoboard. Então estanhei todas as pastilhas e soldei um pequeno capacitor de cerâmica de 1uF nas pastilhas Vcc e GND do cartão. Usando fio esmaltado 40 AWG (0,1 mm), conectei cada pad de teste ao pino correspondente na placa de ensaio. Junto com os sites adicionais, isso totalizou 28 fios minúsculos!



Para o conector SD, usei um cabo com um dispositivo para atender telefones Android da HTC " XTC 2 ClipFuncionava como um "cartão SD remoto flexível" e encaminhava os sinais por meio de um pequeno cabo flexível. Enrolei o cabo com fita de cobre para protegê-lo de ruídos e amplificação e soldei a fita nas almofadas externas da placa de ensaio para fortalecer a estrutura. e conectei os fios esmaltados aos pinos da placa, depois inseri um LED com resistor no fio de alimentação para ver quando a placa estava energizada.



Análise de ônibus



Tendo espalhado todos os sites de teste para contatos de teste, pude começar a entender o que esses contatos são responsáveis ​​em termos de acesso ao NAND Flash localizado dentro do cartão.







Em geral, o layout dos pinos era o mesmo da maioria dos cartões microSD SanDisk.



Para analisar os sinais de todos os pinos, usei um analisador lógico DSLogic Plus... A pinagem para transferência de dados já era conhecida, e o trabalho mais difícil já havia sido feito (barramento de dados, controle, endereços, comandos, proteção contra gravação, status ocupado / livre). No entanto, o papel de nem cada um dos contatos foi imediatamente óbvio - a pinagem que encontrei incluía o número mínimo de barramentos que permitiam trabalhar com NAND Flash - com exceção do barramento de controle, que coloca o controlador em modo de reinicialização e o desconecta do controle do barramento de dados (isso será importante mais tarde) ...



Ao ouvir o barramento de dados na velocidade máxima disponível para o DSLogic (e usando o buffer de 32 MB disponível), consegui compilar uma lista clara de comandos enviados ao NAND Flash do controlador no momento da inicialização.



Noções básicas de escuta de barramento e NAND I / O (escrever comandos, endereços, ler dados)



Procurei especificamente por dois comandos: RESET (0xFF) e READ ID (0x90). Ao procurar sequências de comando, é importante saber quando e como os barramentos de dados e de controle mudam. Vou tentar explicar tudo passo a passo. Se você estiver interessado, recomendo o manual da Micron , que descreve os fundamentos do NAND Flash e dá muito mais informações sobre os princípios de seu funcionamento.





SanDisk High Endurance 128 GB RESET Command Tracking com Logic Analyzer. A linha pontilhada marca a aparência dos comandos de gravação e redefinição.





SanDisk High Endurance 128 GB RESET Command Tracking com Logic Analyzer. A linha pontilhada marca a aparência dos comandos de leitura / gravação.



Quando o comando RESET é enviado para o NAND Flash, o barramento / CE (Chip Select, Active Low) é puxado para baixo primeiro. Em seguida, o bus CLE (Command Latch Enable) é acionado; o barramento de dados é definido com seu valor programado 0xFF (em binário); em seguida, o barramento / WE (habilitar gravação, baixo ativo) vai de alta para baixa tensão e, em seguida, retorna para alta (os dados do barramento de dados são transferidos para o chip quando o barramento / WE passa de baixa tensão para alta, a chamada borda de sinal "); o barramento CLE é puxado para baixo, voltando ao normal. O chip flash então puxa o barramento R / B (status Pronto / Ocupado) para baixo para indicar que ele está ocupado com uma reinicialização e, quando concluído, puxa o barramento de volta ao nível superior.



O comando READ ID funciona de maneira semelhante, exceto que depois de escrever o comando 0x90 (1001 0000) no barramento de dados, ele puxa o barramento ALE (Address Latch Enable), não CLE, e escreve 0x00 (todos os zeros binários), resultando em / NÓS para o estado inferior. O chip transfere o NAND Flash ID escrito nele para o registrador de leitura interno e os dados são lidos do dispositivo em cada borda do barramento / RE (Read Enable, Active Low); para a maioria dos dispositivos, são 4 a 8 bytes de dados.



NAND Flash ID



Cada dispositivo NAND Flash tem seu próprio (na maior parte) identificador exclusivo que o relaciona a um fabricante específico e a outros dados funcionais específicos do fabricante. Em outras palavras, apenas o ID do fabricante atribuído pela associação de tecnologia JEDEC é bem definido .



O primeiro byte indica o fabricante do chip, e os demais (de 2 a 6) definem as características do dispositivo - todas elas são determinadas pelo próprio fabricante. A maioria dos fabricantes de NAND relutam em publicar especificações para dispositivos, e a SanDisk (e, portanto, a Toshiba / Kioxia) é rigidamente controlada por esses dados, com exceção de planilhas de dados da Toshiba ligeiramente desatualizadas que vazaram online. Uma vez que essas empresas compartilham capacidade de fabricação, pode-se supor que as estruturas de dados nos dados definidos pelo fabricante podem ser comparados entre si.



Já o cartão de 128 GB SanDisk High Endurance, usa NAND Flash ID de 0x45 48 9A B3 7E 72 0D 0E. Alguns desses números podem ser comparados com as especificações da 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

( )





Embora nem todos os valores de byte possam ser determinados sem ambigüidade, fui capaz de determinar que os cartões SanDisk High Endurance usam BiCS3 3D TLC NAND Flash - pelo menos é 3D NAND, que excede significativamente o NAND plano tradicional em termos de confiabilidade. Infelizmente, essas informações por si só não podem dizer se o controlador está aproveitando o mecanismo de armazenamento em cache do SLC nas operações de gravação.



A geometria do processo de fabricação do chip é determinado com base nos quatro primeiros bytes do Flash ID e sua comparação com a linha do arquivo de configuração de ferramentas de Silicon Motion para o SM3271 controlador USB Flash e SM2258XT controladorSSD sem DRAM. Essas ferramentas fornecem supostos SKUs dos chips SDTNAIAMA-256G e SDUNBIEMM-32G, respectivamente, mas me parece que isso não corresponde à configuração da memória flash neste cartão.



Controle externo



Eu queria ter certeza de que estava obtendo a ID correta do NAND Flash, então conectei uma placa de depuração Texas Instruments MSP430FR2433 e escrevi o código mais simples que envia os comandos RESET e READ ID necessários e tenta extrair dados adicionais dos parâmetros ocultos da página de parâmetros JEDEC em paralelo.



O primeiro obstáculo que encontrei foi que o MSP430 era reiniciado toda vez que eu tentava enviar um comando RESET, o que indicava que a fonte de alimentação limitada da placa MSP430 não conseguia lidar com essa corrente. Isso pode acontecer quando " contenção de ônibus“quando dois dispositivos estão lutando entre si, tentando aplicar simultaneamente alta e baixa tensão em um determinado barramento digital. Não tinha certeza se entendia o que estava acontecendo, já que não há informações livres sobre como desligar o controlador de placa embutido. era (e é por causa deste "deixa ir" o barramento NAND e permite que outro dispositivo assuma o controle dele).



Eu entendo que o bloco de teste A1 (veja o diagrama.) - este controlador de barramento redefinido, e se você segurá-lo a tensão na posição inferior, o controlador liberta completamente o controle sobre a NAND flash bus.After que meu código do microcontrolador foi capaz de ler o flash ID corretamente e sem obstáculos.





leitura do flash ID do cartão



A página de opções JEDEC ... ou pelo menos o que a SanDisk fez com ela!



Se disponível, a página de parâmetros JEDEC contém características detalhadas do chip Flash - muito mais detalhadas do que o NAND Flash ID - e, além disso, mais padronizado. Descobriu-se, entretanto, que a SanDisk optou por ignorar o padrão e usar o seu próprio! Normalmente a página começa com a string ASCII "JEDEC", porém encontrei uma string duplicada "SNDK" ( nome da empresa na troca ) e outros dados que não correspondiam a nada da especificação JEDEC! Bem, vale a pena tentar.



Coletei dados usando o mesmo esboço do Arduino que mostrei anteriormente e recebi 1536 bytes de dados. Em Ideone, escrevi um pequeno programa para converter os primeiros 512 bytes em um arquivo HEX simples:



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.....




Uma análise posterior usando o analisador DSLogic mostrou que o controlador precisa de uma página de parâmetro de 4128 bytes (4K + 32 bytes), preenchida com os mesmos dados de repetição mostrados acima.



Resetar problemas



Examinando os dados do analisador lógico, descobri que o controlador envia o comando READ ID duas vezes, mas a primeira vez sem redefinir o Flash (o que geralmente precisa ser feito imediatamente após aplicar energia ao chip!). Os dados retornados pelo chip são, para dizer o mínimo, estranhos.



Byte (hex) Descrição
98

Fabricante: Toshiba

00

Tensão de E / S: desconhecida (sem dados)

Capacidade do dispositivo: desconhecida (sem dados)

90

Tipo NAND: SLC (Célula de Nível Único / 1 bit por célula)

Chips Flash / CE: 1

93

Tamanho do bloco: 4 MB excluindo área sobressalente

Tamanho da página : 16.384 bytes / 16 kb excluindo área sobressalente

76

Matrix / CE: 2

72

Tipo de interface: assíncrono

Geometria do processo: plano de 70 nm





Isso me confundiu no início, porque eu estava tentando obter o ID analisando apenas a lógica. Mas depois de conversar com alguém que tem vasta experiência em recuperação de dados do NAND Flash, descobri que essa é a norma para dispositivos da SanDisk. Eles são muito vagos sobre comandos especiais e estruturas de dados. Se você acredita no quarto byte, o tamanho do bloco é de 4 MB, o que parece plausível para um chip Flash moderno. O resto da informação não faz sentido para mim, exceto que o primeiro byte diz que o fabricante do chip foi a Toshiba.



Conclusão



Fui longe demais em minha tentativa de obter uma resposta à simples questão de que tipo de chips a SanDisk usava em seu cartão de longo prazo. Parece que eles poderiam falar com orgulho sobre o uso da tecnologia 3D NAND para maior confiabilidade e operação de longo prazo - mas não!



arquivos



Para os interessados, posto os dados que interceptei do cartão depois que ele foi ativado. Eu também postarei um esboço do Arduino, permitindo que você leia manualmente o NAND ID e a página de parâmetros:




All Articles