Estou revisitando alguns dos meus hábitos de design, e um deles está sendo minuciosamente examinado: o dispositivo de armazenamento baseado em SPI é (micro) cartões SD, por sua relação preço / capacidade e velocidades geralmente mais altas.
Entre os três principais tipos de dispositivos de armazenamento baseados em SPI - cartão (micro) SD, DataFlash e 25Cxx
EEPROM SPI da série mais simples (e também colocar a EEPROM embutida em microcontroladores e 24Cxx
I2C EEPROM), que é o meio apropriado para os casos de uso fornecidos abaixo? Lembre-se de que eu uso todos os meios como dispositivos de bloco bruto, portanto, o argumento "cartões SD precisam de um sistema de arquivos" não permanece.
Casos de uso:
- Dados de configuração e calibração do sistema. Exemplos: endereço MAC para a interface Ethernet, tensão medida da referência de tensão integrada.
- Histórico. Exemplo: dados capturados dos sensores.
- Código e recursos de código (grandes demais para caber na memória do programa ou precisam ser transportados de forma portável.) Exemplo: atualizações do sistema, cadeias de internacionalização e localização, recursos da interface do usuário, fontes.
- Segurança e gerenciamento de direitos digitais. Exemplo: assinaturas digitais de chaves criptográficas (públicas e / ou privadas, simétricas e / ou assimétricas).
spi
flash
eeprom
data-storage
Maxthon Chan
fonte
fonte
Respostas:
Basicamente, a escolha depende principalmente de dois critérios: se os dados a serem armazenados são grandes ou pequenos e se são reescritos com frequência ou não:
Não vou entrar em mais detalhes sobre a diferença entre os dois, já foi abordado:
Em relação aos cartões SD: o cartão SD é um tipo de flash removível e, como tal, segue as mesmas restrições que um flash comum. No entanto, ele normalmente usa flash NAND, enquanto, geralmente, os chips seriais usam o flash NOR. O flash NAND é mais conveniente para escrever (páginas menores, apagamento mais rápido), mas é menos confiável. Você pode obter blocos defeituosos depois de um tempo, se fizer muitas gravações. O nivelamento de desgaste pode atenuar isso, mas nem sempre é implementado em cartões SD baratos ( é verdade que um cartão SD / MMC usa nivelamento com seu próprio controlador? ). Você pode implementá-lo em software, mas não é trivial.
A escolha da interface (I2C ou SPI) é completamente independente, no entanto. I2C é mais lento, mas usa menos pinos. O I2C EEPROM também é geralmente mais barato que o SPI, mas você geralmente decide usar um ou outro, dependendo da maneira como atribuiu os pinos MCU em seu aplicativo.
Agora, você forneceu casos de uso específicos, então vamos examiná-los um por um:
Dados de configuração e calibração do sistema
Bem, este não impõe muitas restrições: esses dados geralmente são muito pequenos e não mudam frequentemente. Então, aqui, o mais simples é colocá-lo onde custa menos:
Se não houver outras necessidades de armazenamento persistente no dispositivo e não houver EEPROM interna no MCU, você poderá usar uma página de flash específica no flash do próprio MCU (se o MCU permitir). Caso contrário, você poderá recorrer a uma EEPROM externa pequena.
Observe que, no caso específico de endereços MAC, existem EEPROMs que são vendidas com um endereço MAC pré-programado, garantido que seja exclusivo (por exemplo, Microchip 24AAxxx). Portanto, esse seria o caminho, a menos que você tenha atribuído oficialmente um bloco de endereços pelo IEEE ou esteja disposto a arriscar usando endereços atribuídos localmente.
Histórico
Isso geralmente é grande e muda frequentemente. Grande significa flash, não EEPROM. Portanto, você pode usar um chip flash ou um cartão SD, mas se os registros forem realmente reescritos com frequência, é melhor usar um cartão SD. Caso contrário, você corre o risco de desgastar o chip flash e, se ele for soldado na placa, será mais difícil substituí-lo do que um cartão SD. Observe também que, ao gravar registros percorrendo as páginas flash inteiras, o nivelamento de desgaste se torna trivial de implementar.
Caso sejam pequenos logs, você tem sorte, use a EEPROM (desde que a resistência seja aceitável).
Observe que, se a resistência é um problema real, existem soluções adicionais com resistência praticamente ilimitada e tamanho relativamente grande: F-RAM e MRAM. Mas isso custa um braço e uma perna, e você não os mencionou como uma opção. Observe também que essas duas tecnologias mais recentes atingem uma velocidade de apagamento / gravação muito melhor que o flash, portanto, para o registro contínuo, isso pode ser interessante.
Código e recursos de código
Geralmente grande, mas não muda com frequência. Um chip flash externo (normalmente flash NOR) é ideal para isso.
Segurança e gerenciamento de direitos digitais
Este é mais complicado. Se ele realmente contém dados confidenciais que nunca devem ser extraídos, é melhor usar um cartão inteligente no formato SIM (eventualmente com algum firmware personalizado). Mas isso, claro, complica o design muito . Uma solução alternativa (mais fácil e barata) pode ser um chip de segurança dedicado como a série Atmel AT88SC, mas os comandos disponíveis no chip precisam fazer sentido para a sua aplicação específica. O que pode ser feito neste chip e sob quais condições devem ser cuidadosamente planejadas.
Se você precisar apenas de segurança "básica", o mais fácil é usar a EEPROM da MCU interna. Não será tão seguro quanto um cartão inteligente ou chip dedicado (que contém medidas de segurança específicas, como proteção contra ataques leves, contramedidas contra análise de energia / falha no chip, etc ...), mas é o melhor que você pode Faz.
Caso contrário, se não houver EEPROM interna, você terá as mesmas opções dos dados de configuração / calibração. No entanto, o uso de qualquer chip externo para armazenar dados seguros é um risco, pois as linhas de dados podem ser facilmente monitoradas com um simples analisador lógico e os dados confidenciais extraídos. Portanto, mesmo que se diga que a EEPROM é mais difícil de adulterar do que o flash, escolher um ou outro no caso de um chip externo não faz diferença do ponto de vista da segurança.
Finalmente, o cartão SD é definitivamente a pior idéia aqui, pois é removível. Os dados confidenciais podem ser lidos a partir de um PC, sem precisar de nenhum hardware específico.
fonte