Best Practices für die Produktionsprogrammierung von Daten-/NAND-Flash-Geräten

Ein Projekt hat endlich den Punkt erreicht, an dem Prototypen betriebsbereit sind und Enten in Reihen für die erste Vorproduktionscharge von Platinen anstehen. Es verwendet ein SOC-Gerät, das seinen ARM-Kern von einem externen NAND-FLASH-Chip bootet, der normalerweise einen Bootloader, die eingebettete Anwendung und andere Datenressourcen enthält. Mit einem minimalen Bootloader und einer Anwendung in FLASH ist ein Upgrade vor Ort einfach. Bei den Prototypen wurden Bootloader mit einem JTAG-Kabel installiert, aber das scheint mehr als ein wenig unhandlich für Produktionslose, die größer als etwa ein Dutzend Platinen sind.

Wenn dies ein NOR FLASH oder OTP PROM wäre, würde ich erwarten, dass ein Anbieter gerne eine Intel HEX- oder Motorola SRecord-Datei nimmt und Geräte liefert, die einfach funktionieren, wenn sie festgelötet sind.

Auf welche Probleme sollten wir angesichts der unterschiedlichen Natur von NAND-FLASH-Geräten achten? Welche Fragen sollten wir Anbietern stellen? Welche Bildform können wir erwarten?

Kurz gesagt, was ist die übliche Praxis für die Vorprogrammierung eines NAND-FLASH-Geräts vor dem Zusammenbau?

Bearbeiten:

Wenn es einen Unterschied machen würde, wäre es ein STM (numonyx oder micron, warum können die Chipfirmen nicht aufhören, sich gegenseitig ihre Produktlinien in der Mitte des Designzyklus zu verkaufen?) NAND512xxx 512 MB SLC-Familiengerät, das programmiert werden möchte.

Antworten (5)

Der Trick hier ist PogoPins ( Wikipedia )

Im Grunde machen Sie eine Vorrichtung, in die Sie die Platine fallen lassen, die oft als Bed-Of-Nails In-Circuit-Tester / Programmierer bezeichnet wird, und sie wird dann geflasht, ohne sich mit dem Aspekt des Anschlusses der jtag-Schnittstelle befassen zu müssen.

LadyAda hat ein Tutorial gemacht und SparkFun auch

Ich habe solche Sachen schon mal gemacht . Wir hatten jedoch wirklich gehofft, JTAG diesmal nicht in den Factory-Bring-up-Prozess einbeziehen zu müssen.
Die Klammer-Idee ist wirklich clever.

Es stellt sich heraus, dass der Händler herausgefunden hat, dass er diesen Service an losen Teilen vor der Lieferung an das Montagehaus durchführen kann. Ich persönlich bin nicht am Kaufprozess beteiligt und kann nicht annähernd erraten, um wie viel (wenn überhaupt) dies die Kosten der Teile erhöht hat.

Wir mussten eine Datei erstellen, die eine Kopie jedes zu programmierenden Bits enthielt, einschließlich der 16 zusätzlichen Bytes pro Seite, wobei die zusätzlichen Bytes ordnungsgemäß mit der ECC- und Bad-Block-Informationsstruktur formatiert waren, die den Annahmen des NAND-Treibers entspricht, und mit allen ungenutzten Blöcke (und ihre zusätzlichen Bytes) leer gelassen. Die Datei war so groß wie das Gerät, aber ZIP hatte eine große Hebelwirkung für die Komprimierung.

Daneben mussten wir eine Tabelle mit Basisadressen und erwarteten Größen der im Gerät verwendeten Partitionen erstellen.

Anscheinend überprüft der Data I/O FLASH-Programmierer jede Seite während des Programmierens, markiert fehlerhafte Seiten als fehlerhaft und versucht es automatisch auf der nächsten Seite erneut. Dies erfordert, dass die Partitionen über genügend freien Speicherplatz verfügen, um einige fehlerhafte Seiten zuzulassen. Der Teil wird zurückgewiesen, wenn eine bestimmte Anzahl von Seiten fehlerhaft ist oder wenn eine Partition nicht passt.

Unsere erste Charge ist in Bearbeitung, basierend auf einem Image-Dump des Live-Chips in einer Prototypeinheit. Unser Plan ist es, dies zu verbessern, indem wir ein Tool schreiben, das das erforderliche Image bei Bedarf oder als letzten Build-Schritt erzeugen kann.

Spot-on-Methode dafür. Die meisten Distributoren bieten diesen Service direkt oder über ein Partnerunternehmen an, bieten eine (normalerweise kostenlose) Lasergravur des Teils an und rollen es entsprechend Ihrem Hersteller neu auf.

Wenn ich ähnliche Dinge getan habe, habe ich den SoC immer mit JTAG (oder einem Gang-Programmierer) programmiert, dann das ARM-Core-Format gehabt und den NAND-Flash programmiert (Daten über Seriell oder Ethernet zugeführt).

Auf diese Weise kann die Software alle fehlerhaften Blöcke im NAND abbilden.

Die Probleme mit fehlerhaften Blöcken machen es also einfach nicht praktikabel, das NAND in großen Mengen vorprogrammiert zu bekommen? Das ist plausibel, aber schade.
Möglicherweise können Sie NAND ohne schlechte Blöcke kaufen. Es lohnt sich, Ihren Lieferanten zu fragen.

Eine Möglichkeit, das Problem mit fehlerhaften Blöcken zu vermeiden, besteht darin, nur einen minimalen Bootloader im anfänglich garantiert fehlerfreien Bereich des NAND zu haben und dieses Programm als Hauptinhalt über die Schnittstelle zu verwenden, die das Produkt während des Tests zur Verfügung stellt. zB vorübergehend eine SD-Karte anschließen oder so etwas.

Wenn Sie viel Platz im NAND haben, können Sie auch mehrere Bilder vorprogrammieren und den Prozessor beim ersten Einschalten ein gutes Bild aus diesen Bildern ableiten lassen.

Es lohnt sich, mit Unternehmen zu sprechen, die bereits Programmierdienstleistungen anbieten, da sie möglicherweise bereits Lösungen dafür gefunden haben.

Alles richtig, aber meine Frage bezieht sich wirklich auf den Produktionsprozess: Wie arrangiere ich die Dinge, damit beim ersten Einschalten einer neu zusammengebauten Platine genügend Software verfügbar ist, um Selbsttests durchzuführen und auf eine endgültige Version der Firmware zu flashen?
Sie erhalten das NAND von einem Programmierhaus vorprogrammiert. Wenn Sie den vorprogrammierten Teil im garantiert guten Bereich auf ein Minimum beschränken, muss sich das Programmierhaus nicht mit dem von Ihnen verwendeten Bad-Block-System befassen. Ich weiß jedoch nicht, wie standardisiert ECC-Algorithmen sind - insbesondere auf mehreren Ebenen vermute ich, dass sogar der Bereich "Garantiert gut" nur mit ECC garantiert werden kann.
Sie baten uns, das zu programmierende Bild einschließlich aller ECC-Bits bereitzustellen, und sie stimmten zu, einen bestimmten Wert in einen Offset in den zusätzlichen Bytes zu schreiben, um Seiten zu markieren, die nicht Bit-identisch mit unserem Bild sind. Ihr Standardwert und ihr Offset stimmten „zufällig“ mit den Anforderungen des Bootloaders unseres SOC-Anbieters überein. Ich nehme an, sie haben zugestimmt, jeden Chip zu verwerfen, bei dem Block 0 Seite 0 schlecht war.

Der vielseitigste Ansatz, obwohl ich nicht weiß, ob dies jemand unterstützt, wäre, einen Chipprogrammierer einen Chip lesen und in eine Datei schreiben zu lassen und dann ein vom Benutzer bereitgestelltes Programm auszuführen, um die Datei mit dem zu aktualisieren, was darin enthalten sein sollte Chip, programmieren Sie die resultierende Datei in den Chip und lesen Sie sie aus und führen Sie das vom Benutzer bereitgestellte Programm aus, um sie zu überprüfen (möglicherweise Wiederholen des Programmzyklus, wenn das Überprüfungsprogramm mit dem Ergebnis nicht zufrieden war). Wenn dies nicht praktikabel ist, denke ich, dass der beste Ansatz oft darin besteht, einfach die erforderlichen Daten in die Zielschaltung einzuspeisen, damit sie den Speicherchip mit den von ihm verwendeten Formen von Fehlerkorrektur- und Bad-Block-Speicher programmieren kann .