SPI-Datenspeicher: (Micro)SD-Karte, DataFlash oder serielles EEPROM?

Ich überdenke einige meiner Designgewohnheiten, und eine davon wird ernsthaft unter die Lupe genommen: Das SPI-basierte Speichergerät der Wahl sind (Micro-)SD-Karten aufgrund ihres Preis-Leistungs-Verhältnisses und der allgemein höheren Geschwindigkeiten.

Unter den drei Haupttypen von SPI-basierten Speichergeräten – (Micro)SD-Karte, DataFlash und einfachere 25CxxSPI-EEPROM-Serien (und auch eingebautes EEPROM auf Mikrocontrollern und 24CxxI2C-EEPROM in Betracht ziehen) ist das geeignete Medium für die gegebenen Anwendungsfälle unter? Denken Sie daran, dass ich alle Medien als Rohblockgeräte verwende, sodass das Argument "SD-Karten benötigen ein Dateisystem" nicht gilt.

Anwendungsfälle:

  • Systemkonfigurations- und Kalibrierungsdaten. Beispiele: MAC-Adresse für die Ethernet-Schnittstelle, gemessene Spannung der Onboard-Spannungsreferenz.
  • Protokolle. Beispiel: erfasste Daten von Sensoren.
  • Code und Code-Ressourcen (zu groß, um in den Programmspeicher zu passen oder müssen tragbar transportiert werden.) Beispiel: Systemaktualisierungen, Internationalisierungs- und Lokalisierungszeichenfolgen, Benutzeroberflächenressourcen, Schriftarten.
  • Sicherheit und Verwaltung digitaler Rechte. Beispiel: kryptografische Schlüssel (öffentlich und/oder privat, symmetrisch und/oder asymmetrisch), digitale Signaturen.
Antwort in den meisten Fällen: Es kommt darauf an.
Nackte SPI-Flash-Chips können viel kleiner und billiger sein als SD-Karten. Ich habe einige 2-MB-BGA-Teile für etwa 2 US-Dollar gesehen, und sie sind 1,8 x 2,5 mm groß und haben die Größe eines Reiskorns

Antworten (1)

Grundsätzlich hängt die Wahl hauptsächlich von zwei Kriterien ab: ob die zu speichernden Daten groß oder klein sind und ob sie oft neu geschrieben werden oder nicht:

  • EEPROM eignet sich hervorragend für kleine Daten, die sich häufig ändern. Der Grund ist: Es wird nur für kleine Größen verkauft, aber sie können in der Regel Single-Byte-gelöscht werden. Darüber hinaus ist die Lebensdauer des EEPROM sehr hoch (Millionen von Zyklen).
  • Flash eignet sich hervorragend für große Datenmengen, die sich nicht oft ändern. Es ist für große Größen günstig erhältlich, aber wenn Sie Daten überschreiben müssen, können Sie dies nur für eine ganze Seite tun, die einige kB groß sein kann. Und die Ausdauer liegt eher im Bereich von 100.000 Zyklen.

Ich werde nicht näher auf den Unterschied zwischen beiden eingehen, er wurde bereits behandelt:

In Bezug auf SD-Karten: Die SD-Karte ist ein entfernbarer Flash-Typ und unterliegt als solcher den gleichen Einschränkungen wie ein normaler Flash. Es verwendet jedoch normalerweise NAND-Flash, während serielle Flash-Chips normalerweise NOR-Flash verwenden. NAND-Flash ist bequemer zum Schreiben (kleinere Seiten, schnelleres Löschen), aber weniger zuverlässig. Sie können nach einer Weile schlechte Blöcke bekommen, wenn Sie viele Schreibvorgänge ausführen. Wear Leveling kann dies abmildern, ist aber nicht immer in billigen SD-Karten implementiert ( stimmt es, dass eine SD/MMC-Karte Wear Leveling mit ihrem eigenen Controller durchführt? ). Sie könnten es in Software implementieren, aber es ist nicht trivial.

Die Wahl der Schnittstelle (I2C oder SPI) ist jedoch völlig unabhängig. I2C ist langsamer, verwendet aber weniger Pins. I2C EEPROM ist normalerweise auch billiger als SPI, aber Sie entscheiden sich normalerweise für den einen oder anderen, je nachdem, wie Sie MCU-Pins in Ihrer Anwendung zugewiesen haben.

Jetzt haben Sie bestimmte Anwendungsfälle angegeben, also schauen wir sie uns nacheinander an:

Systemkonfigurations- und Kalibrierungsdaten

Nun, dieser setzt nicht viele Einschränkungen: Diese Daten sind normalerweise sehr klein und ändern sich nicht oft. Hier ist es also am einfachsten, es dort zu platzieren, wo es weniger kostet:

  • entweder das interne MCU-EEPROM, falls vorhanden
  • oder einen externen Blitz, wenn Sie ihn bereits für andere Zwecke benötigen
  • oder eventuell eine SD-Karte, wenn Sie keinen anderen dauerhaften Speicher zur Verfügung haben. Beachten Sie jedoch, dass die Kalibrierungsdaten nicht mehr konsistent wären, da die SD-Karte eventuell entfernt und in ein anderes Gerät eingesetzt werden kann. Das solltest du also vermeiden.

Wenn in Ihrem Gerät kein weiterer Bedarf an persistentem Speicher besteht und kein internes EEPROM in der MCU vorhanden ist, können Sie möglicherweise eine bestimmte Flash-Seite im Flash der MCU selbst verwenden (sofern die MCU dies zulässt). Ansonsten kann man auf ein kleines externes EEPROM zurückgreifen.

Beachten Sie, dass es im speziellen Fall von MAC-Adressen EEPROMs gibt, die mit einer vorprogrammierten MAC-Adresse verkauft werden, die garantiert einzigartig ist (z. B. Microchip 24AAxxx). Das wäre also der richtige Weg, es sei denn, Ihnen wurde offiziell ein Adressblock von IEEE zugewiesen oder Sie sind bereit, das Risiko einzugehen, lokal zugewiesene Adressen zu verwenden.

Protokolle

Dies ist normalerweise groß und ändert sich häufig. Groß bedeutet Flash, nicht EEPROM. Sie können also entweder einen Flash-Chip oder eine SD-Karte verwenden, aber wenn die Protokolle wirklich oft neu geschrieben werden, sollten Sie besser eine SD-Karte verwenden. Andernfalls riskieren Sie, dass der Flash-Chip verschleißt, und wenn er auf die Platine gelötet ist, ist er schwieriger zu ersetzen als eine SD-Karte. Beachten Sie auch, dass beim Schreiben von Protokollen durch das Durchlaufen der gesamten Flash-Seiten das Wear-Leveling dann eigentlich trivial zu implementieren ist.

Falls es sich um kleine Protokolle handelt, haben Sie Glück, gehen Sie mit EEPROM (solange die Lebensdauer akzeptabel ist).

Beachten Sie, dass es zusätzliche Lösungen mit praktisch unbegrenzter Lebensdauer und relativ großer Größe gibt, wenn Ausdauer ein echtes Problem ist: F-RAM und MRAM. Aber diese kosten einen Arm und ein Bein, und Sie haben sie nicht als Option erwähnt. Beachten Sie auch, dass diese beiden neueren Technologien eine viel bessere Lösch-/Schreibgeschwindigkeit erreichen als Flash, sodass dies für die kontinuierliche Protokollierung interessant sein kann.

Code und Coderessourcen

Normalerweise groß, ändert sich aber nicht oft. Wenn Ihre MCU über einen internen Blitz verfügt (wie die meisten), wäre dies natürlich der richtige Weg: Er ist genau für diesen Zweck da. Wenn dies nicht der Fall ist oder zu klein ist, eignet sich hierfür ein externer Flash-Chip (typischerweise NOR-Flash). NOR-Flash ist besser geeignet als NAND, da Sie eine hohe Integrität für den Code wünschen, und NAND-Flash ist normalerweise schwieriger direkt mit MCUs/SoCs zu verbinden. Beachten Sie, dass die MCU zum Ausführen von Code direkt von einem externen Flash einen Adressraum haben muss, der zu diesem externen Flash geht, und die meisten Low-End-MCUs sind dazu nicht in der Lage (diese Funktionalität heißt normalerweise XIP: eXecute- An Ort und Stelle).

Sicherheit und Verwaltung digitaler Rechte

Dieser ist kniffliger. Wenn es wirklich sensible Daten enthält, die niemals extrahiert werden sollten, verwenden Sie besser eine Smartcard im SIM-Formfaktor (eventuell mit einer benutzerdefinierten Firmware). Aber das verkompliziert natürlich das Design sehr . Eine alternative (einfachere und billigere) Lösung kann ein dedizierter Sicherheitschip wie die AT88SC-Serie von Atmel sein, aber die auf dem Chip verfügbaren Befehle müssen für Ihre spezifische Anwendung sinnvoll sein. Was auf diesem Chip getan werden kann und unter welchen Bedingungen, muss sorgfältig geplant werden.

Wenn Sie nur "grundlegende" Sicherheit benötigen, ist es am einfachsten, das interne MCU-EEPROM zu verwenden. Es ist nicht so sicher wie eine Smartcard oder ein dedizierter Chip (der bestimmte Sicherheitsmaßnahmen enthält, wie Schutz vor Lichtangriffen, Gegenmaßnahmen gegen Strom- / Fehleranalyse innerhalb des Chips usw.), aber dies ist das Beste, was Sie können tun.

Andernfalls, wenn kein internes EEPROM vorhanden ist, erhalten Sie die gleichen Optionen wie bei den Konfigurations-/Kalibrierdaten. Die Verwendung eines externen Chips zum Speichern sicherer Daten ist jedoch ein Risiko, da die Datenleitungen leicht mit einem einfachen Logikanalysator überwacht und die sensiblen Daten extrahiert werden könnten. Auch wenn EEPROM angeblich schwieriger zu manipulieren ist als Flash, macht die Wahl des einen oder anderen im Falle eines externen Chips aus Sicherheitsgesichtspunkten keinen Unterschied.

Schließlich ist die SD-Karte hier definitiv die schlechteste Idee, da sie entfernbar ist. Die sensiblen Daten könnten dann von einem PC ausgelesen werden, ohne dass eine spezielle Hardware erforderlich wäre.