É verdade que um cartão SD / MMC usa nivelamento com seu próprio controlador?

51

Não consigo encontrar nenhuma informação confiável sobre isso. Não tenho a especificação completa do hardware do cartão SD / MMC.

É verdade? Meu aplicativo de alto nível não precisa se preocupar com o nivelamento de desgaste ao trabalhar com esses cartões?

EDITAR

Alguém poderia confirmar que o nivelamento de desgaste é garantido pela especificação SD? Quero ter certeza, porque parece que a maioria dos fornecedores faz isso, mas não é exigido pela especificação.

ivarec
fonte
5
Nem todos os fabricantes de mídia flash investem em algoritmos de nivelamento de desgaste. O nivelamento de desgaste é mais prevalente nos SSDs, onde os fabricantes lideram o mercado por causa de algoritmos.
Chetan Bhargava

Respostas:

43

Eu trabalho para uma empresa que costumava ser membro da associação SD, estamos familiarizados com a especificação 2.0 (SDHC). A especificação do cartão SD NÃO possui entrada para o nivelamento do desgaste. Isso depende completamente do fabricante do SD para lidar com isso, se assim o desejar. Vimos que alguns provavelmente o fazem, enquanto outros o fazem (cuidado com os cartões SD baratos baratos). O SDXC pode ter alterado isso para incluir o nivelamento de desgaste, mas não tenho certeza disso. Infelizmente, a única maneira de realmente mostrar isso é colocar as mãos nas especificações oficiais. Você pode encontrá-lo on-line provavelmente, mas a associação de SD realmente deseja que você pague por isso.

Como nota lateral, pegar um cartão de 2 GB e gravá-lo do começo ao fim repetidas vezes tem uma média de 10 TB antes que o cartão esteja morto e não seja mais gravável. Além disso, os cartões SD não informam quando os dados estão ruins, ou seja, não retornam um erro de E / S como o disco rígido de um PC. Isso pode não ser um problema para projetos incorporados, pois 10 TB são MUITOS dados, mas pode ser um fator para alguém.

Kris Bahnsen
fonte
2
Presumo que, embora não esteja na especificação, as empresas ainda querem fazer isso para manter sua reputação boa. Enquanto imitações super baratas não se importam com a reputação, elas vendem para pessoas que procuram ficar baratas em tudo. Isso soa razoável?
precisa saber é o seguinte
11
@Kellenjb É uma suposição muito razoável, e eu pessoalmente concordo com você. No entanto, como não está na especificação e é muito improvável obter acesso aos projetos de controladores SD de qualquer fabricante em particular, não pode realmente ser comprovado. Nós fizemos muitos testes ao longo dos anos, algumas das principais marcas têm um desempenho muito melhor do que outras. Pode haver diferenças nos algoritmos internos ou completa falta deles.
Kris Bahnsen
4
Imitações baratas não vão se importar, mesmo que esteja nas especificações. Não é imediatamente visível para o cliente, poderia estar faltando. Estamos falando de pessoas que vendem plugues de chumbo como CIs. Não ouvi falar de um cartão de marca que não usasse nivelamento, mas suponho que seja possível.
darron
@KrisBahnsen, você pode explicar o que o cartão SD realmente retorna quando há um erro não recuperável? Eu estou muito interessado nisso. Não há como detectar essa condição?
Fred basset 23/05
3
@ fredbasset, maneira de zumbir o fio;) Já faz um tempo desde que eu fiz qualquer trabalho com cartão SD. No entanto, os próprios cartões SD IIRC retornam fisicamente o que quiserem. Alguns dos mais novos combinados com drivers decentes podem detectar um erro de E / S. No entanto, alguns dos cartões SD mais antigos retornarão apenas dados ruins armazenados em NAND e chamarão de bom. No entanto, se uma gravação não puder ser concluída, isso retornará um erro de E / S.
Kris Bahnsen
23

É verdade! Os cartões MicroSD contêm um chip flash NAND ligado a um microcontrolador (ARM) encapsulado em algum plástico preto. http://www.bunniestudios.com/blog/?p=898 explica.

No final da publicação seguinte, http://www.bunniestudios.com/blog/?p=918 Bunnie postula que integrar o controlador provavelmente custa menos do que testar o flash antes do tempo.

Citando o manual do produto do cartão SD da SanDisk: "1.9 Nivelamento de desgaste. O nivelamento de desgaste é uma parte intrínseca da funcionalidade de apagamento do cartão SD, usando memória NAND". Você pode ler tudo na folha de dados de um cartão de marca SanDisk .

joeforker
fonte
11
Bunnie Huang é definitivamente credível o suficiente para mim!
vicatcu
É bom saber, mas esperarei por alguém que possa esclarecer essa questão com base nas especificações formais dessa tecnologia.
Ivarec 5/03
2
Digikey me mostrou este folheto inútil da SanDisk quando tentei procurar uma folha de dados. As folhas de dados da Wintec e da Swissbit eram melhores e as duas mencionaram o nivelamento de desgaste. Você pode criar um link para essa folha de dados hospedada pelo Digikey?
Kevin Vermeer
Essas são muito melhores do que a antiga SanDisk.
31123 joeforker
O Wintec não foi ótimo, mas o novo SanDisk é o melhor de todos! Obrigado pela edição.
9139 Kevin Vermeer
19

Sim, os cartões SD / MMC possuem controladores que usam nivelamento. Caso contrário, você poderá destruir um em questão de minutos com os padrões de gravação incorretos.

Isso é realmente um problema para alguns projetos incorporados. Aparentemente, não há absolutamente nenhuma maneira de saber quais setores podem estar nivelados a qualquer momento; portanto, um ciclo de energia na hora errada pode destruir dados em qualquer lugar do cartão, não importa onde você PENSE que está escrevendo. (não pergunte como eu sei :))

Os cartões SD devem ser usados ​​com um sistema que garanta um desligamento limpo do sistema (ou pelo menos que as gravações possam ser concluídas) ou a perda de dados (eventualmente) resultará.

EDITAR

O problema é que o processo de nivelamento de desgaste está totalmente oculto. QUALQUER setor no disco pode ser movido a qualquer momento (trocado com a página gravada) e, se a energia falhar no meio desse processo, esse setor aleatório pode ser corrompido.

Embora existam maneiras razoavelmente seguras de implementar essa mudança, ela não existe em nenhuma especificação, portanto você não pode confiar que a placa fará isso. Você pode testar uma placa, fazê-la funcionar, o fabricante pode alterar a implementação sem alterar o número da peça e você está ferrado.

No teste, o controlador do meu cartão SD NÃO faz isso de maneira segura.

Posso procurar um cartão SD de "alta confiabilidade" que vi anunciado especificamente para tolerância a falhas de energia ... mas você precisa confiar no fabricante para fazer isso corretamente, e eu não. Eu realmente quero controle direto sobre apagamentos de páginas. Eu ainda estou tentando descobrir isso.

darron
fonte
4
Veja minha resposta postada. Como os algoritmos de nivelamento de desgaste são de responsabilidade do fabricante, eles podem não ser adequados. Um bom algoritmo de nivelamento de desgaste moverá os dados primeiro, depois marcará esses dados como bons e coletará os dados originais com lixo. Isso pode ser um problema em alguns cartões, talvez não em outros. O SD é um design muito feio quando você chega ao fundo.
Kris Bahnsen
2
Sim, é um padrão de porcaria para mim. É muito irritante que um padrão de armazenamento em memória tão onipresente seja tão inerentemente não confiável.
darron
2
@jpc: Talvez eu faça uma entrada de blog então. Estou tendo a impressão de que não é considerado com frequência. Eu mesmo não percebi as implicações até que fosse tarde demais. Eu lutei com isso, conversei com o fabricante do meu cartão SD, etc. Não há outra solução senão minimizar o tempo de gravação. Agora, escrevo para o flash NAND e copio para o SD uma vez por dia o mais rápido possível. Existem cartões SD projetados para serem "resistentes" a falhas de energia aleatórias, mas não tenho certeza, mesmo que sejam completamente confiáveis.
darron
2
@ fred basset Estranhamente, as especificações dos cartões industriais parecem ter mudado desde que essa resposta foi escrita. Eu estava vendo cartões microSD com garantias de gravação (acho que no diário) ... agora, eles não fazem tal afirmação. Conversando com um fabricante, eles estão usando supercaps agora ... mas apenas os cartões compactos têm espaço para eles. Fazer as coisas com segurança reduz muito o desempenho. Eles estão dizendo para fornecer, de alguma forma, energia de backup suficiente para concluir uma gravação. Dado o quão complexos são os SBCs ARM modernos ... é realmente difícil de fazer se o design de referência do fornecedor não o fizer. Nada que eu saiba fazer.
darron
2
Basset @freq Estou usando UBI e UBIFS. Parece funcionar bem ... Há muitos sistemas em funcionamento há anos, sem problemas.
darron
12

Qualquer tipo de cartão SD que utilize qualquer tipo de memória flash NAND convencional precisará usar algum tipo de virtualização de setor, pois nenhum dispositivo flash NAND convencional pode suportar o apagamento de setores individuais de 512 bytes e nenhum dispositivo flash NAND convencional de tamanho significativo seria capaz de produzir um desempenho dentro de uma ordem de magnitude que seria marginalmente aceitável se todas as tentativas de gravar um setor exigissem que o dispositivo copiasse todos os setores no bloco de apagamento desse setor (mesmo para a RAM), depois apague o bloco e escreva todos os setores de volta. A maioria das técnicas de virtualização de setor é inerentemente um pouco de nível de desgaste. Eu esperaria que o maior problema de variação entre dispositivos de qualidade e imitações seja o grau em que um dispositivo tenta ativamente nivelar o nivelamento entre blocos, versus simplesmente usando a alocação de blocos pseudo-aleatórios e esperando que isso produza resultados aceitáveis ​​quase uniformes. Na prática, eu esperaria que até mesmo a alocação aleatória / esperança para o melhor fosse adequada na maioria dos casos.

supercat
fonte
Pode ser que o "nivelamento de desgaste" que alguns fabricantes implementem seja causado pela própria interface NAND e bloqueie para setor / setor para bloquear virtualizações.
Kris Bahnsen
11
@KrisBahnsen: Eu esperaria que os fabricantes que afirmam nivelar o desgaste monitorem ativamente o desgaste relativo dos diferentes blocos e a idade dos dados nele contidos, e se os blocos com dados de longa duração estiverem em blocos com muito menos desgaste que a média, o os dados desses blocos serão movidos para blocos com mais desgaste (de modo a, provavelmente, minimizar o desgaste futuro desses blocos). Isso poderia melhorar em um fator 10 a vida útil de um dispositivo que é 95% preenchido com dados que nunca mudam, enquanto os 5% restantes de espaço são revolvidos com frequência.
supercat
Eu concordo, se eles estão anunciando, imagino que eles fariam algum tipo de nivelamento de desgaste real. Sou um pouco negativo em todo o assunto pelo qual peço desculpas; Fui mordido algumas vezes pelas peculiaridades do SD.
Kris Bahnsen
11
@KrisBahnsen: O maior problema que eu acho é um modelo de virtualização que assume um conjunto linear de setores de 512 bytes numerados consecutivamente. Pode ter sido conveniente fazer interface com o DOS, mas realmente não se encaixa bem com o hardware existente, nem com o que o software host realmente deseja. Abra os números de bloco para 64 bits e permita que eles sejam arbitrariamente não consecutivos e, em seguida, organize os arquivos sempre armazenados em blocos logicamente consecutivos. Para excluir um arquivo, exclua seu intervalo de blocos.
Supercat 6/12
2
Esta é possivelmente a melhor resposta. Eu suspeito que é assim que todos eles fazem isso. Se você pensar bem, não há como fazer o nivelamento determinístico do desgaste com qualquer tipo de algoritmo verdadeiramente sofisticado, porque o próprio histórico de desgaste teria que ser armazenado em algum lugar da mesma placa e essa parte falharia primeiro. O nivelamento aleatório é a única possibilidade prática. Não estou convencido de que os SSDs sejam mais inteligentes. Eles podem simplesmente ter mais buffers de substituição, embora seja certamente possível armazenar informações de desgaste muito grosseiras (e, portanto, com pouca frequência).
Nimrod
7

A Sandisk possui um white paper que explica a lógica de nivelamento de desgaste em seus cartões e fornece estimativas da vida útil do cartão em vários cenários. Resumo executivo: a menos que você esteja martelando o cartão sem parar, ele durará décadas.

Michael Slade
fonte
O link está inoperante e o conteúdo parece ter sido eliminado - porque revelou muito, talvez?
Cuadue 12/08/14
6
@Cuadue O link está acessível. Apenas no caso de quebra, a página está arquivada agora em web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/…
Lekensteyn 26/15
2

É interessante notar que, apesar disso, muitos dispositivos corrompem os cartões SD e microSD, especialmente os de alta densidade, se a bateria estiver fraca ou o telefone travar / desligar / etc. Suspeito que o problema seja a regulação inadequada da alimentação de tensão, pois isso é bem conhecido em alguns cartões (tosse Ad t / tosse), resultando no fenômeno de um cartão ilegível em certos leitores externos, mas funciona bem na micro variedade fornecida por alguns lojas de informática.

Estou no processo de recuperar um cartão no momento com essa falha. Curiosamente, a maioria dos dados é recuperável, mas alguns setores não são, embora isso mude a cada tentativa. O próprio nivelamento de desgaste pode estar errado? (sim tentei vários leitores, mesma falha!)

Dilema
fonte
0

Também teve sucesso "zombar" de cartões zumbis, ou seja, aqueles que não completam um formato ou são somente leitura. Funciona apenas com uma pequena porcentagem, mas são muito mais sensíveis do que a maioria das diretrizes "oficiais" ao efeito.

Um cartão de teste assim tratado durou quatro meses antes de falhar novamente, se não fosse o dispositivo usado para fornecer voltagem ruidosa, a vida útil poderia ter sido mais longa.

Conundrum5642Z
fonte
11
Por "nuking" você quer dizer colocá-lo no microondas? Em que potência e quanto tempo?
0x6d64 30/01
Ah, não :-) Além disso, por que isso quando uma descarga de brilho (RF) teria um efeito semelhante e seria muito menos perigoso do que o método que eu usei? Acontece que os cartões uSD são muito mais sensíveis devido à falta de uma caixa de metal de um lado.
precisa saber é o seguinte
Não posso confirmar ou negar que nuking se refere ao uso de um "gadget" 5642 + HVPS por motivos legais. No entanto fez trabalho várias vezes, ea técnica é agora conhecido como I publicou em teve etc.
Conundrum