PatentDe  


Dokumentenidentifikation DE102004004796B4 29.11.2007
Titel Vorrichtung zur Datenübertragung zwischen Speichern
Anmelder Infineon Technologies AG, 81669 München, DE
Erfinder Mahrla, Peter, 85604 Zorneding, DE;
Barstow, John, Swindon, GB;
Gödecke, Michael, 80634 München, DE
Vertreter Lange, T., Dipl.-Phys.(Univ.) Dr.rer.nat., Pat.-Anw., 81673 München
DE-Anmeldedatum 30.01.2004
DE-Aktenzeichen 102004004796
Offenlegungstag 01.09.2005
Veröffentlichungstag der Patenterteilung 29.11.2007
Veröffentlichungstag im Patentblatt 29.11.2007
IPC-Hauptklasse G06F 13/00(2006.01)A, F, I, 20051017, B, H, DE
IPC-Nebenklasse G11C 29/52(2006.01)A, L, I, 20051017, B, H, DE   

Beschreibung[de]

Die Erfindung betrifft eine Vorrichtung zur Datenübertragung zwischen Speichern nach dem Oberbegriff des Anspruchs 1.

In Mikroprozessorsystemen müssen häufig große Datenmengen zwischen flüchtigem und nichtflüchtigem Speicher transportiert werden. Gewöhnlich ist die Zugriffsgeschwindigkeit höher, wenn der Code des flüchtigen Speichers benutzt wird, und deshalb werden normalerweise Daten während des Systemstarts vom nichtflüchtigen zum flüchtigen Speicher transferiert, um eine höhere Ausführungsgeschwindigkeit erzielen zu können. Auch während der Programmausführung werden Daten zwischen flüchtigem und nichtflüchtigem Speicher transferiert, um den begrenzten flüchtigen Speicher optimal zu nutzen und/oder den Erhalt der Daten im Falle eines Spannungsausfalls sicherzustellen.

Der Speicherzugriff hängt stark vom verwendeten Speichertyp ab. So ist z.B. ein Zugriff auf einen flüchtigen asynchronen RAM relativ einfach. Andere Speichereinrichtungen, z.B. nichtflüchtige NAND-Flash-Einrichtungen, erfordern ein relativ komplexes Zugriffsprotokoll. Nichtflüchtige Speichereinrichtungen mit einer NAND-Architektur, wie z.B. Infineon NROM, gewinnen derzeit signifikant an Bedeutung, und zwar aufgrund des wachsenden Speicherbedarfs in mobilen Vorrichtungen, wie z.B. digitalen Fotokameras, Mobiltelefonen, PDAs oder Notebooks, und aufgrund ihrer extrem niedrigen Kosten. Der wahlfreie Zugriff auf diese letztgenannten Speichereinrichtungen ist sehr langsam und erfordert Code- und Datentransfer auf einen schnelleren flüchtigen Speicher (VM – volatile memory) vor der Programmausführung. Aufgrund ihrer internen Struktur ist das Lesen oder Schreiben größerer Datenblöcke, d.h. Speicherseiten, der optimale Datentransfermodus. Für Lesezugriffe nach dem Ausgeben eines Lesekommandos und der Seitenadresse an die NAND-Flash-Einrichtung werden die Daten zunächst zu einem einrichtungsinternen Puffer übertragen, der typischerweise Übertragungszeiten in der Größenordnung von einigen 10 Mikrosekunden erfordert. Sobald die NAND-Flash-Einrichtung die Beendigung dieser Übertragung signalisiert, können dann alle Seitendaten (512 oder 2048 Byte) mit einer hohen Datengeschwindigkeit von bis zu 40 MB pro Sekunde in den flüchtigen Speicher übertragen werden. Außerdem neigen NAND-Flash-Einrichtungen zu Bit-Fehlern, was eine Bit-Fehlererfassung und Bit-Fehlerkorrektur vor der Datenübertragung auf den flüchtigen Speicher erforderlich macht.

Datentransfer zwischen VM und nichtflüchtigem Speicher (NVM – non-volatile memory) sollte mit der maximal möglichen Geschwindigkeit durchgeführt werden, um die Hochfahrzeit des Systems zu minimieren. Darüber hinaus sollten Datenübertragungen während der Mikroprozessorprogrammausführung möglich sein, um dynamisches Laden von Code und Daten zu gestatten. Ferner sollte der Einfluß der Datentransfers auf die Leistung des Mikroprozessors minimiert werden. Idealerweise legt der Mikroprozessor eine Liste von Datenübertragungsaufgaben in einen flüchtigen Speicher ab und wird erst nach vollständiger Beendigung dieser Aufgaben unterbrochen.

Datenübertragungen zwischen Speichern werden normalerweise unter Verwendung eines Direktspeicherzugriffscontrollers (DMAC – direct memory access controller) ausgeführt. DMACs sind jedoch auf einfache Zugriffsarten beschränkt und nicht in der Lage, komplexere Datenübertragungsprotokolle zu beherrschen. In letzterem Fall muß ein Mikrocontroller die Datenübertragung steuern.

Die den nächstliegenden Stand der Technik darstellende Druckschrift US 2003/0217202 A1 beschreibt eine Vorrichtung zur Übertragung von Daten zwischen einem RAM- und einem Flash-Speicher.

Die Druckschrift WO 03/104976 A2 beschreibt ein Verfahren zum Schreiben von Daten von einem Prozessor in einen Flash-Speicher. Zur Vermeidung einer Blockadesituation („deadlock") werden die Daten dabei mit Hilfe einer Schnittstelle in einem RAM-Speicher zwischengespeichert.

Der Erfindung liegt die Aufgabe zugrunde, eine Vorrichtung zur möglichst schnellen Datenübertragung zwischen Speichern bereitzustellen, welche in der Lage ist, auch komplexere Datenübertragungsprotokolle zu beherrschen, dabei jedoch mit möglichst wenig Hardware auskommt und flexibel an verschiedenste Einsatzbedingungen angepaßt werden kann.

Erfindungsgemäß wird diese Aufgabe gelöst durch eine Vorrichtung nach Anspruch 1.

Vorteilhafte und bevorzugte Ausführungsformen der erfindungsgemäßen Vorrichtung sind Gegenstand der Ansprüche 2 bis 18.

Durch die Erfindung wird erreicht, daß nicht zusätzlich noch ein dedizierter Datenübertragungscontroller verwendet werden muß, so daß die Gesamthardware minimiert und existierende Hardware, wie z.B. der DMAC oder der konventionelle Speichercontroller, wiederverwendet wird. Ferner wird die Flexibilität dadurch maximiert, daß nur ein Basis-Übertragungsprotokoll hardwaremäßig implementiert werden muß. Alle weiteren Anpassungen an unterschiedliche Anwendungsfälle können softwaremäßig auf ein und derselben Hardwarestruktur erfolgen. Dies erhöht im Vergleich zum Stand der Technik, bei dem der jeweilige zusätzliche spezielle Datenübertragungscontroller dediziert hardwaremäßig an die jeweiligen speziellen Anwendungsanforderungen angepaßt wurde, die Produktionsflexibilität und trägt somit in erheblichem Maße zur Kostenreduktion bei.

Vorteilhafte und bevorzugte Ausführungsbeispiele der erfindungsgemäßen Vorrichtung werden nachfolgend anhand von Figuren erläutert. Es zeigt:

1 ein schematisches Blockbild eines ersten Ausführungsbeispiel einer erfindungsgemäßen Vorrichtung mit einem Direktspeicherzugriffscontroller,

2 ein schematisches Blockbild eines zweiten Ausführungsbeispiels einer erfindungsgemäßen Vorrichtung unter Verwendung eines Direktspeicherzugriffscontrollers und eines konventionellen Speichercontrollers,

3 schematisch einen Datenfluß bei einer NAND-Flash-Schreiboperation,

4 schematisch den Datenfluß bei einer NAND-Flash-Leseoperation,

5 ein schematisches Blockdiagramm eines Ausführungsbeispiels eines Flash-Steuerungs-Direktspeicherzugriffs-Ports (FCDP),

6 ein Ausführungsbeispiel einer NAND-Flash-Schnittstelle (NAND-Flash-Interface),

7 schematisch ein Ausführungsbeispiel einer FCDP-Schutz-Gestaltung,

8 schematisch ein erstes Ausführungsbeispiel einer NAND-Flash-Seiten-Konfiguration mit einer Seitengröße von (512 + 16) × 8 Bit,

9 schematisch ein zweites Ausführungsbeispiel einer NAND-Flash-Seiten-Konfiguration mit einer Seitengröße von (2048 + 64) × 8 Bit,

10 schematisch das Register FCDP_NFECCCONFIG gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 4 zu finden ist,

11 schematisch das Register FCDP_NFMECCPTR gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 5 zu finden ist,

12 schematisch das Register FCDP_NFSECCPTR gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 6 zu finden ist,

13 schematisch das Register FCDP_NFIECCPTR gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 7 zu finden ist,

14 schematisch das Register FCDP_NFMECCST gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 8 zu finden ist,

15 schematisch das Register FCDP_NFSECCST gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 9 zu finden ist,

16 einen Programmablaufplan eines Ausführungsbeispiels eines Schutzmechanismus',

17 schematisch das Register FCDP_NFPASSWD gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 10 zu finden ist,

18 schematisch das Register FCDP_NFPROTCMD gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung der zugehörigen Registerfelder in Tabelle 11 zu finden ist,

19 schematisch das Register FCDP_NFADDRWIN1L gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung des zugehörigen Registerfelds in Tabelle 12 zu finden ist,

20 schematisch das Register FCDP_NFADDRWIN1H gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung des zugehörigen Registerfelds in Tabelle 13 zu finden ist,

21 schematisch das Register FCDP_NFADDRWIN2L gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung des zugehörigen Registerfelds in Tabelle 14 zu finden ist, und

22 schematisch das Register FCDP_NFADDRWIN2H gemäß dem FCDP-Ausführungsbeispiel von 5, wobei eine Beschreibung des zugehörigen Registerfelds in Tabelle 15 zu finden ist.

Wird ein Speicherprotokoll-Controller (MPC – memory protocol controller) zusammen mit einem DMAC eingesetzt, dann können komplexe Speicherübertragungsprotokolle beherrscht werden. Die Befehlssequenz für den MPC ist Teil der Befehlsliste im VM (siehe 1). Diese Liste beinhaltet Befehle für den MPC und zusätzlich Befehle für den NVM. Daten, die zum NVM übertragen werden sollen, können entweder in einer separaten Liste im VM abgelegt werden oder Teil der Befehlsliste sein.

Befehle aus der Befehlsliste werden durch den DMAC zum NVM übertragen. Nur die MPC-Befehle werden durch den MPC interpretiert. Die Befehle für den NVM werden an den NVM gegeben. Zu diesen Zweck muß ein „Ausgeben an den NVM"-Befehl dem NVM-Befehl als solchem vorangehen. Da NVM-Befehle nicht hardwaremäßig implementiert sind, können neue oder modifizierte NVM-Befehle durch Anpassung der Befehlsliste leicht beherrscht werden.

Nachdem der MPC einen Befehl ausgeführt hat, gibt er gewöhnlich auf der Befehlsanforderungsleitung des DMAC eine Anforderung für den nächsten Befehl. Der DMAC überträgt dann den nächsten Befehl vom VM zum MPC. Diese Abfolge setzt sich so lange fort, bis der DMAC am Ende der Befehlsliste ankommt. Der DMAC gibt dann ein Interrupt-Signal an den Mikroprozessor, um die vollständige Erfüllung der Aufgabe zu signalisieren. Um den MPC in einen Leerlaufzustand zu versetzen, sollte als letzter Befehl ein Stop-Befehl an den MPC ausgegeben werden. Der Start der Übertragung wird in der Regel durch den Mikroprozessor ausgelöst, indem dieser ein „Lauf"-Bit im MPC setzt, nachdem das Einrichten der Befehlsliste im VM abgeschlossen wurde. Danach läuft der Prozeß ohne jede weitere Mikroprozessorsteuerung, es sei denn, es treten Fehlerbedingungen auf.

MPC-Befehle können Befehle zur Übertragung einer vorbestimmten Anzahl von Datenwörtern zwischen VM und NVM sein. In diesem Fall signalisiert der MPC mehrere Anforderungen für Datenübertragungen auf einer Datenanforderungsleitung des DMAC. Der DMAC wird dann die Datenübertragung zwischen MPC und VM ausführen. In der Regel werden die Daten innerhalb des MPC gepuffert, um die Datenbus-Charakteristiken auf beiden Seiten optimal nutzen zu können. Minimierung der DMAC-Belastung kann ein wichtiges Ziel sein. Datenübertragung in Paketen („Bursts") kann die optimale Lösung sein. Falls die Bandbreite des Busses zum NVM kleiner ist als die Bandbreite des Busses zum DMAC, sammelt der MPC für eine Leseoperation vom NVM ein geeignetes Datenpaket vom NVM, ehe die Übertragung gestartet wird. Für eine Schreiboperation zum NVM wird der MPC die vollständige Beendigung einer Schreiboperation zum NVM abwarten, ehe er das nächste Datenpaket vom DMAC anfordert.

Der MPC kann NVM-spezifische Steuerleitungen handhaben, wie z.B. die BUSY/READY#-Leitung (BESCHÄFTIGT/FERTIG#-Leitung) einer NAND-Flash-Einrichtung. MPC-Befehle können Anweisungen dahingehend enthalten, wie mit diesen Steuerleitungen umzugehen ist, z.B. auf eine Pegeländerung auf einer Steuerleitung zu warten, ehe eine Anforderung für den nächsten Befehl ausgegeben wird.

Für den Fall der NAND-Flash-Einrichtungen mit ihrer internen Seitenstruktur können Datenübertragungen in großen Blöcken, welche mehrere Seiten überspannen, in einem Befehlsskript gehandhabt werden. Aufgrund der Besonderheiten der NAND-Flash-Einrichtungen kann eine Datei über mehrere Seiten ausgedehnt sein, welche willkürlich im Adreßraum der Einrichtung verteilt sind. Eine vollständige Dateiladeoperation kann mittels eines Befehlsskripts bewerkstelligt werden. Das Befehlsskript muß durch die NAND-Flash-Dateisystem-Software, die auf dem Mikroprozessor läuft, kompiliert werden.

Fehlerbedingungen werden dem Mikroprozessor durch den MPC signalisiert. Die Fehlerursache und die Adresse des letzten auszuführenden Befehls werden durch den Mikroprozessor aus einem Statusregister gelesen. Alle weiteren Anforderungen werden an den DMAC ausgegeben. Der Mikroprozessor wird sich mit der Fehlerbedingung befassen und die Datenübertragung neu starten. Für NVMs, welche Fehlererfassung und Fehlerkorrektur erfordern, wird der Fehlererfassungscode und ggf. auch der Fehlerkorrekturcode durch den MPC erzeugt. Für Leseoperationen vergleicht der MPC bevorzugterweise den während der Lese-Operation erzeugten Fehlererfassungscode mit dem in der nichtflüchtigen Speichereinrichtung (NVM) gespeicherten Fehlererfassungscode. Im Falle eines Lesefehlers führt der MPC entweder die Korrektur selber aus oder triggert einen Interrupt an den Mikroprozessor. Für Schreiboperationen erzeugt der MPC den Fehlerkorrekturcode und schreibt diesen Code an eine vorbestimmte Stelle in die nichtflüchtige Speichereinrichtung (NVM). Weiter unten wird dies alles noch detaillierter beschrieben.

Der MPC kann auch Datenkompression und Datendekompression für Schreib- bzw. Leseoperationen durchführen.

Der MPC kann auch zusammen mit einem konventionellen Speichercontroller verwendet werden, falls andere Speichereinrichtungen ohne Protokoll-Overhead auf demselben Speicherbus gesteuert werden müssen, so wie es in 2 gezeigt ist. Die externen Komponenten können sich Datenleitungen, Adreßleitungen und Steuersignale teilen. Dedizierte NVM-Steuerleitungen können direkt an den MPC angeschlossen sein, so wie es in 2 gezeigt ist.

Ein besonderes Ausführungsbeispiel der Vorrichtung gemäß 2 wird nachfolgend unter Bezugnahme auf die 3 bis 22 näher erläutert. 3 zeigt schematisch den Datenfluß bei einer NAND-Flash-Schreiboperation, und 4 zeigt schematisch den Datenfluß bei einer NAND-Flash-Leseoperation. Der Speicherprotokoll-Controller (MPC) aus 2 ist in den 3 und 4 als „Flash Control DMA Port" (FCDP – „Flash-Steuerungs-Direktspeicherzugriffs-Port") bezeichnet. Der FCDP ermöglicht autonome Datenblockübertragungen zwischen Flash-Einrichtungen (NAND-Flash bzw. NOR-Flash) und einem RAM, wobei die CPU-Belastung und der On-Chip-Bus-Verkehr minimal gehalten werden. Der Flash-Controller aus den 3 und 4 entspricht dem konventionellen Speichercontroller aus 2.

Zur Entlastung der CPU ist der FCDP in Verbindung mit dem DMAC nach einer Initialkonfiguration in der Lage, eine beliebige Datenmenge (d.h. beim NAND-Flash: Seiten) ohne weitere Unterstützung zu übertragen.

Außerdem erzeugt der FCDP einen Fehlerkorrekturcode (Error Correction Code – FCC) für das Schreiben auf NAND-Flash-Einrichtungen und eine Fehlerkorrekturcodeprüfung für das Lesen von NAND-Flash-Einrichtungen. Der Lesezugriff auf NOR-Flash-Einrichtungen wird durch das Bereitstellen eines konfigurierbaren Adreßgenerators beschleunigt.

Um den Bus-Datenverkehr zu reduzieren, unterstützt der FCDP Bursts von 4 Übertragungen (32 Bits), wobei er einen internen FIFO verwendet.

Der FCDP erfordert einen externen Speichercontroller bzw. Flash Controller, um an den Flash angeschlossen werden zu können und um die einrichtungsspezifische Zeitabstimmung erzeugen zu können. 5 ist ein schematisches Blockdiagramm des FCDP, wobei der FCDP hier auf einer sehr hohen Ebene, d.h. in sehr grobe Blöcke unterteilt, dargestellt ist.

Der in 5 gezeigte FCDP

  • – arbeitet synchron,
  • – hat eine einzige Uhr (AHG-Uhr/AHB = Advanced High Performance Bus = Moderner Hochleistungsbus),
  • – entspricht der AMBA AHG-Spezifikation 2.0 ("AMBA" ist eine Marke der Advanced RISC Machines Limited /ARM Ltd./ und bezeichnet faktisch einen Standard für Busse auf Chips),
  • – hat einen AHG-Master mit einem AHB-Lite-Interface,
  • – hat ein Interface (eine Schnittstelle) für ARM Prime-Cell-DMAC,
  • – unterstützt NAND-Flash-Lesen/Schreiben mit Hardware-ECC,
  • – unterstützt NOR-Flash-Leseübertragungen und
  • – unterstützt Burst-Modus-Lese-/Schreib-Übertragungen.

Um vom FCDP unterstützt zu werden, muß eine NAND-Flash-Einrichtung folgende Anforderungen erfüllen:

  • – Unterstützung des "CE-don't-care"-Betriebs,
  • – eine „Fertig/Beschäftigt"(„Ready/Busy")-Ausgabe wird erst nach einem Adreß- oder Befehlszyklus getätigt,
  • – eine Spaltenadresse besteht aus bis zu zwei Adreßbytes,
  • – eine Zeilenadresse besteht aus bis zu vier Adreßbytes,

    – ECC-Erzeugung/-Erfassung:

    – Hauptbereich: bis zu 2048 Bytes
  • – Reservebereich: bis zu 32 Bytes
  • – Seitengröße (falls nicht durch die Blockgröße für den ECC beschränkt): bis zu 4096 Bytes.

Das AHB Slave Interface (die AHB-Slave-Schnittstelle) erfüllt die folgenden Aufgaben:

  • – Datentransfer vom RAM zum FCDP (Flash-Schreibzugriff),
  • – Datentransfer vom FCDP zum RAM (Flash-Lesezugriff),
  • – FCDP-Konfigurationsinterface,
  • – FCDP-Befehlsinterface.

In den meisten Fällen wird der Datentransfer unter Benutzung des DMA (Direkter Speicherzugriff – Direct Memory Access) abgewickelt werden, er kann jedoch auch, falls gewünscht, d.h., falls nicht genug DMA-Kanäle verfügbar sind, interruptgetrieben durch die CPU erfolgen.

Das Konfigurations-Interface erlaubt Zugriff auf FCDP-Steuer/Status-Register. Das Register-Interface gestattet es, allgemeine Betriebsmodi zu konfigurieren, die bei einer größeren Anzahl von Transaktionen Anwendung finden, d.h., die für die vorliegende Flash-Einrichtung, die Busstruktur, die DMA-Gestaltung, die Speicherabbildung usw. spezifisch sind.

Das Befehlsinterface ist dafür vorgesehen, die Ausführung von Übertragungen durch den FCDP zu steuern. Viele Befehle erfordern auch bestimmte Parameter. Auf das Befehlsinterface kann über DMA zugegriffen werden, d.h. das Kopieren der nächsten Seite wird getriggert, wenn die vorhergehende Seite vollständig fertiggestellt ist.

Das AHB-Master-Interface handhabt Übertragungen zum/vom externen Speicherinterface. In Abhängigkeit von der Einrichtung des Gesamtsystems kann es so eingerichtet sein, daß es entweder Burst-Übertragungen benutzt, um die Bandbreite optimal auszunutzen, oder Einzelübertragungen, um die Entscheidungsverzögerung auf dem AHB zu reduzieren. Um Burst-Übertragungen effizient nutzen zu können, sollte das externe Speicherinterface in der Lage sein, eine gewisse Datenmenge zu Puffern.

Der FCDP weist ferner einen FIFO auf, um Übertragungen auf einer Seite aufrechterhalten zu können, während die andere Seite mit etwas Anderem beschäftigt ist, z.B. wenn die Bus-Zugriffserlaubnis nicht erteilt wird oder der DMA-Kanal nicht bereit ist. Der FIFO gestattet es auch, Burst-Übertragungen auf einem AHG-Interface und Einzelübertragungen auf dem anderen AHG-Interface zu verwenden, wenn dies erforderlich ist.

Der FCDP benutzt im Wesentlichen einen kombinierten Sende/Empfangs-FIFO (TX/RX FIFO) des „Drehkreisel Peripher-Architektur-Konzepts" („Topspin Peripheral Architecture Concept"). Aufgrund der speziellen FCDP-Anforderungen gibt es jedoch ein paar kleine Unterschiede und Besonderheiten:

  • – Es gibt kein „Maximale Empfangspaketgröße"-Feld in dem Register FCDP_FIFO_CFG, weil der FCDP keine unaufgeforderten Übertragungen handhaben muß, d.h. die Paketgröße wird nur durch das Befehlswort definiert.
  • – Es gibt weder ein „Empfangspaketgröße"-Register (RPS_STAT), noch ein „Sendepaketgröße"-Register (TPS_CTRL), weil die Paketgröße sowohl für Lese- als auch für Schreibtransaktionen durch das in das Register FCDP_COMMAND geschriebene Befehlswort definiert ist.
  • – Der FIFO arbeitet immer unter Benutzung von Wortausrichtung.
  • – Das Umschalten zwischen dem „Empfangszustand" und dem „Sendezustand" wird durch das in das Register FCDP_COMMAND geschriebene Befehlswort gesteuert.
  • – Der FCDP ist immer der Fluß-Controller, d.h. die Ablaufsteuerung, für DMA-Übertragungen.

Die Größe des FIFO im vorliegend beschriebenen Ausführungsbeispiel beträgt 8 × 32 Bits.

Um Bitfehler auf NAND-Flash-Einrichtungen zu erfassen und – wenn möglich – zu korrigieren, wird durch den FCDP ein Fehlerkorrekturcode(ECC)-Erzeugungs- und Erfassungsmechanismus bereitgestellt. Der ECC-Algorithmus ist ein Hamming-Code, der die Korrektur eines Einzelbitfehlers und die Erfassung von bis zu 2 Bitfehlern innerhalb einer Seite erlaubt.

Der ECC für den Hauptbereich einer Flash-Seite wird in dem Reservebereich derselben Seite gespeichert. In ähnlicher Weise wird der Reservebereich durch einen zweiten ECC fehlergeschützt, welcher ebenfalls in dem Reservebereich gespeichert ist.

Falls eine entsprechende Freigabe erfolgte, wird der ECC durch den FCDP erzeugt und, ohne daß dazu CPU-Hilfe erforderlich ist, auf einen Schreibzugriff in den Flash geschrieben. Auf Lesezugriffe wird der ECC durch die aus dem Flash geholten Daten erzeugt und mit dem im Flash gespeicherten ECC verglichen. Falls ein Nicht-Zusammenpassen festgestellt wird, so wird ein Fehler-Interrupt an die CPU gegeben, und weitere Transaktionen werden gestoppt. Dies ermöglicht es der CPU, zu prüfen, ob der Fehler korrigierbar ist, und diesen Fehler dann ggf. zu korrigieren.

Sowohl Hauptbereichs- als auch Reservebereichs-ECC-Erzeugung und -Erfassung können unabhängig voneinander aktiviert oder deaktiviert werden. Um einem Flash-Dateisystem das häufige Wechseln einiger Informationen zu gestatten, werden ein paar Bits in dem Reservebereich von der ECC-Erzeugung ausgeschlossen.

Die Speicherorte des Hauptbereichs- und Reservebereichs-ECC sowie des ungeschützten Abschnitts innerhalb einer Seite sind konfigurierbar.

Als ECC wird eine zweidimensionale Gleichheitsprüfung verwendet. Dies erlaubt eine effiziente Hardwareimplementation in Bezug auf Geschwindigkeit und Fläche.

Um die Unversehrtheit der Daten auf einer NAND-Flash-Seite zu überprüfen, werden der auf dem Flash gespeicherte ECC und der beim Lesen der Daten erzeugte ECC einer Exklusiv-ODER-Verknüpfung unterzogen. Als Ergebnis erhält man einen der folgenden Fälle:

  • – alle Bits sind 0: kein Fehler
  • – jedes Paritätsbit P<x> und sein Komplement P<x>' sind voneinander verschieden (P<x> <> P<x>'): korrigierbarer Fehler
  • – nur ein Bit ist nicht 0: Fehler im ECC
  • – andernfalls (zufällige Daten): nicht korrigierbarer Fehler

Falls ein Fehler auftritt, erzeugt der FCDP einen Fehler-Interrupt bei der CPU. Die Fehlerbehandlungs-Software hat dann den Fehler in geeigneter Weise zu bearbeiten.

Im Falle eines korrigierbaren Fehlers zeigt der ECC direkt den Ort des fehlerhaften Bits innerhalb der Seite: P8192, P4096, P2048, ..., P16: 16 Bit-Wort-Adresse eines Bitfehlers

P8, P4, P2, P1: Bitposition des Fehlers

Um die Flash-Einrichtungen zu verbinden, wird ein externes Speicher-Interface verwendet.

Um mit der NAND-Flash-Einrichtung zusammenzuwirken, wird der externe Speichercontroller in asynchronem Modus betrieben. Zwei Adreß-Ausgabeleitungen auf den internen Byte-Adressen A(17) und A(18), entsprechend den externen 16-Bit-Wort-Adressen A(16) und A(17), werden benutzt, um die NAND-Flash-Eingangssignale ALE (Address Latch Enable – Adreßklinkenfreigabe) und CLE (Command Latch Enable – Befehlsklinkenfreigabe) zu steuern, wie dies in 6 gezeigt ist.

Das NAND-Flash-Ausgabesignal R/ B wird nur durch den FCDP gehandhabt. Es wird durch die Flash-Einrichtung nur dann auf Low gesetzt, während ein Befehl mit einer relativ langen Ausführungszeit (Seite lesen, Seite schreiben, Seite löschen) in Arbeit ist.

Für Lesezugriffe auf Einrichtungen mit einer synchronen oder asynchronen NOR-Flash-Schnittstelle (Interface) ist ein geeigneter Speichercontroller mit einem AHB-Slave-Port erforderlich. Ein an einen Synchron-Burst-NOR-Flash angeschlossener Synchron-Burst-Mode-Controller erreicht eine signifikant bessere Übertragungsgeschwindigkeit, da INCR4-Anforderungen auf dem AHG-Bus durch Burst-Übertragungen von der Flash-Einrichtung bedient werden können (INCR4 ist die allgemein akzeptierte Kurzbezeichnung für eine bestimmte Burstanforderung gemäß der AHB-Spezifikation, bei welcher die Burstbreite inkrementiert /INCR/, d.h. erhöht, wird).

Sowohl NAND-Flash-Einrichtungen als auch NOR-Flash-Einrichtungen haben meist einen Schreibschutz( WP – Write Protect)-Eingang. Dieser Eingang wird nicht durch den FCDP gesteuert, sondern muß entsprechend der Einrichtungsspezifikation behandelt werden, z.B. indem man ihn mit einem GPIO (General Purpose Input Output – Allgemeinzweckeingang/-ausgang) oder mit dem Einschalt-Rücksetz-Signal verbindet.

Jede FCDP-Transaktion wird durch das Schreiben eines Befehls in das FCDP-Befehlsregister eingeleitet. Dies geschieht normalerweise, indem im RAM eine Befehlssequenz erzeugt wird und der DMA-Controller bereitgemacht wird, auf Anforderung einen Befehl zum FCDP zu schreiben. Die erste Befehlsanforderung wird softwaremäßig getriggert, indem das DMA-Befehlsanforderungsbit gesetzt wird. Jeder nachfolgende Befehl wird durch den FCDP angefordert, nachdem die Ausführung des vorhergehenden Befehls vollständig abgeschlossen wurde. Um das Anfordern weiterer Befehle durch den FCDP zu stoppen, kann der STOP-Befehl verwendet werden.

Tabelle 1 gibt einen Überblick über die FCDP-Befehle. Wie zu sehen ist, erfordern einige Befehle zusätzliche Parameter. Während die meisten Befehle aus einem einzigen 32-Bit-Wort bestehen, gibt es einige Befehle, die ein zweites 32-Bit-Wort erfordern, um die Verschlüsselung eines 32-Bit-Adreßparameters zu ermöglichen.

Tabelle 1: FCDP-Befehlsübersicht

Die nachfolgende Tabelle 2 zeigt eine Übersicht über die FCDP-Register-Schnittstelle.

Tabelle 2: Registerprogrammierinterface (Registerprogrammierschnittstelle)

Der FCDP erzeugt zwei Typen von DMA-Anforderungen, nämlich Datenanforderungen und Befehlsanforderungen. Das vereinfacht das Erstellen von verknüpften Listen für die Einrichtung des DMAC außerordentlich.

Eine DMA-Befehls-Anforderung wird immer dann erzeugt, wenn die Ausführung eines FCDP-Befehls vollständig abgeschlossen wurde und ein neuer Befehl in das FCDP-Befehls-Register geschrieben werden muß. Die DMA-Befehls-Anforderung ist immer eine DMA-Einzel-Anforderung.

Eine DMA-Daten-Anforderung wird immer dann erzeugt, wenn während einer Flash-Lese-Operation genügend Daten im FIFO sind oder wenn während einer Flash-Schreib-Operation genügend Platz im FIFO ist. Alle Übertragungen außer der letzten, die als solche durch das Übertragungs-Zähl-Argument eines FCDP-Befehls spezifiziert wird, enden in einer DMA-Burst-Anforderung. Die letzte Übertragung endet in einer DMA-"Letzter Burst"-Anforderung, die dem DMAC signalisiert, daß er zum nächsten Posten der verknüpften Liste übergehen muß.

Falls nicht genug DMA-Kanäle verfügbar sind, ist es auch möglich, statt dessen den Datenanforderungs-Interrupt, den „Letzte Datenanforderung"-Interrupt und den Befehlsanforderungs-Interrupt zu verwenden.

Im Folgenden werden verschiedene Interrupt-Anforderungen näher beschrieben.

– Befehlsanforderungs-Interrupt (Command Request Interrupt – CMD)

Durch das Aufrufen des Befehlsanforderungs-Interrupts zeigt der FCDP an, daß der nächste Befehl in das Befehlsregister (FCDP_COMMAND) geschrieben werden kann und daß die Ausführung des vorausgegangenen Befehls vollständig abgeschlossen ist. Der Befehlsanforderungs-Interrupt kann anstelle der DMA-Befehls-Anforderung verwendet werden.

– Datenburstanforderungs-Interrupt (Data Burst Request Interrupt – DAT)

Durch das Ausgeben des Datenburstanforderungs-Interrupts zeigt der FCDP an, daß Daten in das Schreibpuffer-Register (FCDP_WRBUF) geschrieben werden müssen bzw. daß Daten vom Lesepuffer-Register (FCDP_RDBUF) gelesen werden müssen, je nachdem, welcher Befehl gerade ausgeführt wird. Die Burst-Größe kann entweder auf ein oder auf vier Wörter programmiert werden. Die Datenburstanforderung wird für jeden Datenburst innerhalb einer Sequenz, wie sie durch den Befehl definiert ist, ausgegeben, mit Ausnahme des letzten Bursts. Anstelle der DMA-Daten-Burst-Anforderung kann der Datenburstanforderungs-Interrupt verwendet werden.

– „Letzter Datenburst"-Anforderungs-Interrupt (Data Last Burst Request Interrupt – LDAT)

Der „Letzte Datenburst"-Anforderungs-Interrupt hat fast die gleiche Bedeutung wie der Datenburstanforderungs-Interrupt. Der einzige Unterschied besteht darin, daß der LDAT nur für den letzten Burst innerhalb einer Sequenz, wie sie durch den Befehl definiert ist, ausgegeben wird. Der LDAT kann anstelle der DMA-„Letztes Burst"-Anforderung verwendet werden.

– Hauptbereichs-ECC-Fehler-Interrupt (Main Area ECC Error Interrupt – MECC)

Ein Hauptbereichs-ECC-Fehler-Interrupt erfolgt, wenn eine Nichtübereinstimmung zwischen dem von einer NAND-Flash-Seite gelesenen ECC und dem von den von dem Hauptbereich dieser Seite gelesenen Daten erzeugten ECC festgestellt wurde und die Hauptbereichs-ECC-Prüfung in dem Register FCDP_NFECCCONFIG aktiviert ist. Der Hauptbereichs-ECC-Fehler-Interrupt wird intern solange zurückgestellt, bis alle Übertragungen vollständig abgeschlossen sind und alle Daten aus dem Register FCDP_RDBUF gelesen wurden. Der FCDP erwartet dann den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interrupt-Verzögerung erkannt wurde. Nach dem Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls seinen normalen Betrieb wieder auf.

– Reservebereichs-ECC-Fehler-Interrupt (Spare Area ECC Error Interrupt – SECC)

Ein Reservebereichs-ECC-Fehler-Interrupt erfolgt, wenn eine Nichtübereinstimmung zwischen dem von einer NAND-Flash-Seite gelesenen ECC und dem von den von dem Reservebereich dieser Seite gelesenen Daten erzeugten ECC festgestellt wurde und die Reservebereichs-ECC-Prüfung im Register FCDP_NFECCCONFIG aktiviert ist. Der Reservebereichs-ECC-Fehler-Interrupt wird intern solange aufgeschoben, bis alle Übertragungen vollständig abgeschlossen sind und alle Daten vom Register FCDP_RDBUF gelesen wurden. Der FCDP erwartet dann den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interrupt-Verzögerung erkannt wurde. Nach dem Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls seinen normalen Betrieb wieder auf.

– Flash-Status-Fehler-Interrupt (Flash Status Error Interrupt – ST)

Ein Flash-Status-Fehler-Interrupt erfolgt nach Ausführung des NF_CHECK-Befehls, wenn eine Nichtübereinstimmung zwischen dem von der NAND-Flash-Einrichtung gelesenen Status-Byte und dem erwarteten, im NAND-Flash-Status-Vergleichs-Register (FCDP_NFCOMP) definierten Wert festgestellt wird. Der Vergleich erfolgt entsprechend dem NAND-Flash-Status-Masken-Register (FCDP_NFMASK). Die Interrupt-Dienst-Routine kann das tatsächliche Status-Byte vom NAND-Flash-Status-Register (FCDP_NFSTATUS) lesen. Nach dem Flash-Status-Fehler-Interrupt erwartet der FCDP den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interrupt-Verzögerung erkannt wurde. Nach Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls seinen normalen Betrieb wieder auf.

– FIFO-Überlauf/Unterlauf-Fehler-Interrupt (FIFO Overflow/Underrun Error Interrupt – FIFO)

Ein FIFO-Überlauf/Unterlauf-Fehler-Interrupt erfolgt, wenn ein Lesezugriff auf das Lesepuffer-Register (FCDP_RDBUF) erfolgt, während der FIFO leer ist, oder wenn ein Schreibzugriff auf das Schreibpuffer-Register (FCDP_WRBUF) erfolgt, während der FIFO voll ist.

– Schutz-Fehler-Interrupt (Protection Error Interrupt – PE)

Ein Schutz-Fehler-Interrupt erfolgt in folgenden Fällen:

  • – Ein Befehl, der als geschützt in dem NAND-Flash-„Geschützter Befehl"-Register (FCDP_NFPROTCMD) spezifiziert ist, wird in einer geschützten NAND-Flash-Adreßregion (Seite), wie sie in den NAND-Flash-Adreß-Fenster-Registern (FCDP_NFADDRWIN1L, FCDP_NFADDRWIN2L) spezifiziert ist, ausgegeben. Nach einem Schutz-Fehler-Interrupt während NAND-Flash-Transaktionen (d.h. nicht während der Konfiguration der Schutzregister FCDP_NFPASSW, FCDP_NFPROTCMD, FCDP_NFADDRWIN1L und FCDP_NFADDRWIN1H bei FCDP_MODE.RUN = '0'), erwartet der FCDP den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interruptverzögerung erkannt wurde. Nach dem Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls den normalen Betrieb wieder auf.
  • – Das NAND-Flash-„Geschützter Befehl"-Register (FCDP_NFPROTCMD) wird beschrieben, ohne es zunächst durch Schreiben des korrekten Paßwortes in das NAND-Flash-Passwort-Register (FCDP_NFPASSWD) zu öffnen.
  • – Das NAND-Flash-Adress-Fenster-1-Register (FCDP_NFADDRWIN1L) wird beschrieben, ohne es zunächst durch Schreiben des korrekten Paßworts in das NAND-Flash-Passwort-Register (FCDP_NFPASSWD) zu öffnen.
  • – Ein falsches Paßwort wurde in das NAND-Flash-Passwort-Register (FCDP_NFPASSWD) geschrieben.

– Befehls-Fehler-Interrupt (Command Error Interrupt – CE)

Ein Befehls-Fehler-Interrupt wird erzeugt, wenn ein nichtdefinierter Befehl in das Befehlsregister FCDP_COMMAND geschrieben wird. Nach dem Befehls-Fehler-Interrupt erwartet der FCDP den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interruptverzögerung erkannt wurde. Nach dem Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls den normalen Betrieb wieder auf.

– Befehls-Überlauf-Fehler-Interrupt (Command Overflow Error Interrupt – CO)

Ein Befehls-Überlauf-Fehler-Interrupt wird erzeugt, wenn ein Befehl in das Befehlsregister FCDP_COMMAND geschrieben wird, während der vorhergehende Befehl noch nicht vollständig abgearbeitet worden ist, d.h. der nächste Befehl noch nicht angefordert worden war.

– AHB-Fehler-Interrupt (AHB Error Interrupt – AE)

Ein AHB-Fehler-Interrupt erfolgt, wenn eine AHB-Fehlerantwort durch die AHB-Master-Schnittstelle (AHB Master Interface) des FCDP erfaßt wurde. Die Ursache des AHB Fehlers muß diesem Interface vom AHB-Slave-Modul angezeigt werden. Nachdem ein AHB-Fehler-Interrupt erzeugt wurde, wird die Befehlsausführung sofort abgebrochen, und der FCDP erwartet den FLUSH-Befehl, um sicherzustellen, daß der Fehler unabhängig von der Interruptverzögerung erkannt wurde. Nach dem Erhalt des FLUSH-Befehls nimmt der FCDP durch Anfordern des nächsten Befehls den normalen Betrieb wieder auf.

Die Basisadresse der NAND-Flash-Einrichtung ist in einem FCDP-Konfigurations-Register spezifiziert. Für NAND-Flash-Einrichtungen muß das AHB-Master-Interface nur drei vom Zugriffstyp abhängige verschiedene Adressen erzeugen:

  • – <BASE>: Daten
  • – <BASE> + 0x20000: Adresse
  • – <BASE> + 0x40000: Befehl

Wenn durch den NF_WR-Befehl oder den NF_RD-Befehl INCR4-Burst-Übertragungen ausgewählt werden, so werden die Adressen entsprechend der AHB-Spezifikation erzeugt.

Die NAND-Flash-Seiten-Adresse und die NAND-Flash-Zeilen-Adresse sind Teil der FCDP-Befehls-Sequenz und von der AHB-Adreß-Erzeugung unabhängig.

Für NOR-Flash-Einrichtungen erzeugt der FCDP die Adresse und den AHB-Übertragungstyp (SEQUENTIAL oder NONSEQUENTIAL – SEQUENTIELL oder NICHTSEQUENTIELL) für jeden Lesezugriff: <START>, <START> + 0x04, <START> + 0x08, <START> + 0x0C, ... <START> bezeichnet die Anfangsstartadresse einer Sequenz von Übertragungen. Es muß beachtet werden, daß <START> an einer Wortadreßgrenze ausgerichtet sein muß und daß ein Burst nicht eine 1KB-Grenze kreuzen darf, so wie es in der AHB-Spezifikation definiert ist.

Die Anfangsstartadresse und die Anzahl der auszuführenden Bursts sind Teil der FCDP-Befehlssequenz.

Der Burst-Modus-Schreib-Befehl arbeitet in gleicher Weise wie der Burst-Modus-Lese-Befehl.

Ein Hardware-Schutzmechanismus verhindert ungewollte oder nicht autorisierte NAND-Flash-Lösch- und Schreib-Operationen.

Der FCDP vergleicht die Adressen von Schreib- und Lese-Befehlen mit den zum Schreiben freigegebenen Adreßbereichen. Der FCDP unterdrückt die Ausgabe dieser Befehle an die Flash-Einrichtung und erzeugt einen Fehler-Interrupt, falls die Adresse nicht innerhalb des erlaubten Adreßbereiches liegt.

Der Schutz ist auf einer Seitenbasis implementiert. Die Inhalte der Schutz-Aufschließ-Register spezifizieren einen Seitenadreßbereich. Ein Satz von durch die Schreib- und Lösch-Schutz-Funktion abgedeckten NAND-Flash-Befehlen muß durch Software, z.B. Blocklöschung (D0h) und Seitenprogramm (10h), definiert werden. Falls die spezifizierte Seitenadresse sich nicht innerhalb des erlaubten Adreßbereiches (Adreßfensters) befindet und der nachfolgende Befehl als ein Schutzbefehl spezifiziert ist, wird ein Schutz-Befehl-Interrupt erzeugt, und der kritische Befehl wird nicht an den NAND-Flash gesendet werden.

Wie in 7 dargestellt ist, sind zwei Niveaus N1, N2 des Schreibschutzes implementiert. Nur solche Adreßbereiche, die in beiden Niveaus N1, N2 geöffnet werden, können für Schreib- und Lösch-Operationen verwendet werden. Nach einer Rücksetzung (reset) decken beide Verschließungen den gesamten Adreßbereich ab.

Durch Setzen eines Ersten-Niveau-Adreß-Fenster-Registers wird ein Teil des Adreßraumes für Schreib- und Lösch-Operationen verwendbar. Dieses erste Schutzniveau N1 schützt den Code und wesentliche Funktionen, z.B. eines Mobiltelefons, vor Überschreiben.

Das zweite Schutzniveau N2 wird in einem ähnlichen Register spezifiziert. Es kann für individuelle Treiber, z.B. für das Flash-Datei-System, verwendet werden.

Das Schutz-Befehls-Satz-Register und das Erste-Niveau-Adreß-Fenster-Register sind durch einen Paßwortmechanismus geschützt.

Um den dynamischen Leistungsverbrauch zu reduzieren, stellt der FCDP vier verschiedene Betriebsmodi bereit, nämlich:

  • – Schlafen: Die periphere Uhr wurde im Register FCDP_CLC ausgeschaltet. In diesem Modus ist nur ein Lesezugriff auf Register möglich.
  • – Konfiguration: Die periphere Uhr wurde im Register FCDP_CLC angeschaltet, und der Laufmodus (Run Mode) ist deaktiviert (FCDP_MODE.RUN = '0'). In diesem Modus ist ein Schreibzugriff auf alle Register mit Ausnahme des FCDP_CONMAND-Registers möglich. Die Uhr für die meisten Teile des peripheren Kerns ist deaktiviert.
  • – Nur-NOR-Flash-Modus-Betrieb: Die periphere Uhr wurde im Register FCDP_CLC angeschaltet, der Lauf-Modus (RUN Mode) ist freigegeben (FCDP_MODE.RUN = '1'), und NAND-Flash-Betrieb ist abgeschaltet (FCDP_MODE.NFEN = '0'). In diesem Modus ist ein Schreibzugriff auf Konfigurationsregister nicht möglich. FCDP-Befehle mit Ausnahme von NAND-Flash-Befehlen können in das Register FCDP_COMMAND geschrieben werden. Die Uhr für NAND-Flash-spezifische Teile des Kerns ist abgeschaltet.
  • – Voller Betrieb: Die periphere Uhr ist im Register FCDP_CLC eingeschaltet, der Lauf-Modus (Run Mode) ist aktiviert (FCDP_MODE RUN = '1'), und NAND-Flash-Betrieb ist aktiviert (FCDP_MODE.NFEN = '1'). In dieser Betriebsart ist ein Schreibzugriff auf Konfigurationsregister nicht möglich. Alle FCDP-Befehle einschließlich der NAND-Flash-Befehle können in das Register FCDP_COMMAND geschrieben werden.

Schließlich werden nachfolgend die in dem beschriebenen Ausführungsbeispiel vorhandenen Schnittstellen (Interfaces) näher erläutert.

AHB-Slave-Interface

  • – unterstützte Übertragungsgröße: 32 Bits
  • – unterstützte Burstgrößen: EINZEL (SINGLE), INCR4 (FIFO nur lesen/schreiben)
  • – unterstütze Übertragungsantworten: IN ORDNUNG (OKAY), FEHLER (ERROR)

AHB-Master-Interface

  • – unterstützte Übertragungsgröße: 32 Bits (+ 16 Bits für gewisse NAND-Flash-Zugriffe)
  • – unterstützte Burstgrößen: EINZEL (SINGLE), INCR4
  • – AHB-Lite-Interface

DMAC-Interface

  • – unterstützt Burst-Anforderungen und „Letzter Burst"-Anforderungen für Daten
  • – Einzelübertragungen können wie Bursts einer Übertragung durch den DMAC gehandhabt werden
  • – unterstützt Einzelanforderung für Befehle
  • – erfordert zwei unabhängige DMA-Kanäle für Daten und Befehle
  • – alle DMA-Anforderungen können wahlweise als Interrupts gehandhabt werden

NAND-Flash-Interface

nand_flash_busy_n_i: verbunden mit dem Ready/Busy_N(Fertig/Beschäftigt_N)-Ausgang der Flash-Einrichtung. Dieses Signal wird als vollständig asynchron behandelt.

Defektbehebungs-Schnittstelle (Debug Interface)

Das Debug Interface gestattet es, gewisse interne Signale des FCDP zu überwachen. Die Signale, die auf den Überwachungspins der Einrichtung zum Zugriff zur Verfügung stehen, sind in Tabelle 3 aufgelistet.

Tabelle 3: Überwachungssignale

Im Folgenden wenden wir uns einer etwas ausführlicheren Beschreibung der NAND-Flash-ECC-Register zu.

Das Register FCDP_NFECCCONFIG erlaubt es zu spezifizieren, ob der Hauptbereichs-ECC und der Reservebereichs-ECC durch den NF_WR-Befehl in den NAND-Flash geschrieben und durch den NF_RD-Befehl geprüft werden sollen. Das Feld MAINSIZE definiert die Größe des Hauptbereichs einer Seite, die eine Potenz von 2 sein muß (32-Bit-Wörter).

Die Register FCDP_NFMECCPTR bzw. FCDP_NFSECCPTR bezeichnen den Speicherort des Hauptbereichs-ECC bzw. des Reservebereichs-ECC innerhalb einer Seite.

Der Reservebereich für die ECC-Erzeugung/Prüfung beginnt unmittelbar im Anschluß an den Hauptbereich (definiert durch FCDP_NFECCCONFIG.MAINSIZE) und endet an einer durch FCDP_NFSECCPTR definierten Position. Softwaremäßig muß sichergestellt werden, daß dieser Bereich 32 Bytes nicht überschreitet (siehe 9).

Das Register FCDP_NFIECCPTR definiert ein 16-Bit-Wort innerhalb des Reservebereichs einer Seite, das von der ECC-Erzeugung ausgenommen wird. In Ausführungsbeispielen, bei denen dieses Merkmal nicht erforderlich ist, kann FCDP_NFIECCPTR auf einen Wert außerhalb der gültigen Seitengröße gesetzt werden.

FCDP_NFMECCPTR muß an einer 32-Bit-Adreß-Grenze ausgerichtet werden, während FCDP_NFSECCPTR und FCDP_NFIECCPTR an einer 16-Bit-Adreß-Grenze ausgerichtet werden müssen.

Es muß beachtet werden, daß der Reservebereichs-ECC dem Teil des Reservebereichs folgen muß, den er schützt.

8 zeigt ein Beispiel einer Seitenkonfiguration. Die gestrichelte Fläche ist von der Reservebereichs-ECC-Berechnung ausgenommen.

Die Register FCDP_NFMECCST bzw. FCDP_NFSECCST zeigen den Hauptbereichs-ECC bzw. den Reservebereichs-ECC. Nach vollständiger Ausführung eines Schreibbefehls (NF_WR) zeigen beide Register den aus den geschriebenen Seitendaten berechneten ECC. Nach vollständiger Ausführung eines Lesebefehls(NF_RD) zeigen beide Register das Ergebnis des ECC, der durch Exklusiv-ODER-Verknüpfung der gelesenen Daten mit dem gelesenen ECC berechnet wurde.

Falls die Prüfung aktiviert und das Ergebnis nicht gleich Null ist, wird der zugehörige ECC-Fehler-Interrupt erzeugt. Software kann nun die ECC-Status-Register lesen, um den Fehlertyp zu bestimmen und weitere Maßnahmen einzuleiten. Die Auslegung der ECC-Status-Register erlaubt es, zu prüfen, ob es sich um korrigierbare Fehler handelt (P<8192..P1> XOR P<8192..P1>'), und den Ort des Bitfehlers effizient zu lesen.

Nach Beendigung des ECC-Fehler-Interrupts muß der Fehler durch Schreiben des FLUSH-Befehls in das Befehlsregister bestätigt werden.

Die nachfolgenden Tabellen 4 bis 9 sind im Zusammenhang mit den 10 bis 15 zu lesen (Tabelle 4 – 10, Tabelle 5 – 11, Tabelle 6 – 12, usw.). Die letztgenannten Tabellen und Figuren liefern eine visuelle Verdeutlichung der NAND-Flash-ECC-Register.

Tabelle 4

Tabelle 5

Tabelle 6

Tabelle 7

Tabelle 8

Tabelle 9

Im Folgenden werden unter Bezugnahme auf die 16 bis 22 die Schutzregister näher erläutert.

16 zeigt schematisch den Schutzmechanismus. Wenn eine spezifizierte NAND-Flash-Zeilen-Adresse (Seiten/Block-Adresse) nicht innerhalb des durch die NAND-Flash-Adreß-Fenster-Register (FCDP_NFADDRWIN1L, FCDP_NFADDRWIN1H, FCDP_NFADDRWIN2L, und FCDP_NFADDRWIN2H) spezifizierten Adreßbereiches liegt, dann wird der folgende NAND-Flash-Befehl mit der Liste geschützter Befehle CMD0..3, die im Register FCDP_NFPROTCMD niedergelegt ist, verglichen. Falls eine Übereinstimmung auftritt, wird ein Schutz-Fehler-Interrupt ausgegeben und der FCDP angehalten. Andernfalls ist der NAND-Flash-Befehl gültig und wird an die Flash-Einrichtung gegeben (siehe auch 7).

Die NAND-Flash-Zeilen-Adresse wird intern während der Ausführung des Befehls NF_ADDR aufgenommen. Diese Adresse wird vom Schutzmechanismus während aller nachfolgender NF_CMD-Befehle verwendet, bis eine neue Zeilen-Adresse durch einen anderen NF_ADDR-Befehl spezifiziert wird. Daher soll nur das zweite NAND-Flash-Befehlsbyte (eines Zwei-Byte-Befehls-Zyklus) im Register FCDP_NFPROTCMD spezifiziert werden, um einen korrekten Betrieb des Schutzmechanismus sicherzustellen.

Um den Schutzmechanismus abzuschalten, sind zwei Möglichkeiten verfügbar:

  • 1. Es werden nur Blindbefehle (d.h. ungültige Befehlsbytes für die verwendete NAND-Flash-Einrichtung) im Register FCDP_NFPROTCMD spezifiziert.
  • 2. Die Adreß-Fenster-Register werden so konfiguriert, daß sie den gesamten NAND-Flash-Zeilen-Adreß-Bereich einschließen.

Das „Geschützter Befehl"-Register FCDP_NFPROTCMD und die Adreß_Fenster-Register für das erste Schutzniveau N1 (FCDP_NFADDRWIN1L und FCDP_NFADDRWIN1H) werden durch das Paßwort-Register FCDP_NFPASSWD geschützt. Das Paßwort muß durch den ersten Schreibzugriff auf dieses Register nach dem Rücksetzen definiert werden. Jeder nachfolgende Schreibzugriff mit dem gleichen Paßwort öffnet die geschützten Register für genau einen Schreibzugriff. Der Inhalt des Paßwort-Registers kann nicht gelesen werden.

Die nachfolgenden Tabellen 10 bis 15, die jeweils im Zusammenhang mit den 17 bis 22 zu lesen sind (Tab. 10 – 17, Tab. 11 – 18, Tab. 12 – 19, usw.) geben einen näheren Überblick über die einzelnen Schutzregister.

Tabelle 10

Tabelle 11

Man beachte, daß das Register FCDP_NFPROTCMD nur dann modifiziert werden kann, wenn es unter Benutzung des Paßwort-Registers FCDP_NFPASSWD geöffnet wurde. Nach einem Schreibzugriff ist das Register wieder verschlossen.

Tabelle 12

Man beachte, daß das Register FCDP_NFADDRWIN1L nur dann modifiziert werden kann, wenn es unter Benutzung des Paßwort-Registers FCDP_NFPASSWD geöffnet wurde. Nach einem Schreibzugriff ist das Register wieder verschlossen.

Tabelle 13

Man beachte, daß das Register FCDP_NFADDRWIN1H nur dann modifiziert werden kann, wenn es unter Benutzung des Paßwort-Registers FCDP_NFPASSWD geöffnet wurde. Nach einem Schreibzugriff ist das Register wieder verschlossen.

Tabelle 14

Man beachte, daß das Register FCDP_NFADDRWIN2L nicht paßwortgeschützt ist.

Tabelle 15

Man beachte, daß das Register FCDP_NFADDRWIN2H nicht paßwortgeschützt ist.


Anspruch[de]
Vorrichtung zur Datenübertragung zwischen Speichern (VM, NVM), wobei die Vorrichtung mindestens einen Speichercontroller (DMAC) aufweist,

dadurch gekennzeichnet,

– daß die Vorrichtung ferner einen Speicherprotokoll-Controller (MPC, FCDP) aufweist,

– daß einer der Speicher ein flüchtiger Speicher (VM) ist, und

– daß eine Befehlssequenz für den Speicherprotokoll-Controller (MPC) Teil einer Befehlsliste im flüchtigen Speicher (VM) ist.
Vorrichtung nach Anspruch 1, dadurch gekennzeichnet, daß der Speichercontroller oder einer der Speichercontroller ein Direktspeicherzugriffscontroller (DMAC) ist. Vorrichtung nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, daß der oder die Speichercontroller und der Speicherprotokoll-Controller (MPC) in Reihe geschaltet sind. Vorrichtung nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, daß ein anderer Speicher ein nichtflüchtiger Speicher (NVM) ist und die Befehlsliste im flüchtigen Speicher (VM) Befehle für den Speicherprotokoll-Controller (MPC) und zusätzlich Befehle für den nichtflüchtigen Speicher (NVM) beinhaltet. Vorrichtung nach Anspruch 4, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß Daten, die vom flüchtigen Speicher (VM) zum nichtflüchtigen Speicher (NVM) übertragen werden sollen, in einer separaten Liste im flüchtigen Speicher (VM) abgelegt werden und/oder Teil der genannten Befehlsliste im flüchtigen Speicher (VM) sind. Vorrichtung nach Anspruch 4 oder nach Anspruch 5, dadurch gekennzeichnet, daß sie als Speichercontroller einen Direktspeicherzugriffscontroller (DMAC) aufweist und daß sie so eingerichtet ist, daß

– Befehle aus der genannten Befehlsliste durch den Direktspeicherzugriffscontroller (DMAC) zum nichtflüchtigen Speicher (NVM) übertragen werden,

– nur Speicherprotokoll-Controller-Befehle (MPC-Befehle) durch den Speicherprotokoll-Controller (MPC) interpretiert werden, und

– jedem Befehl für den nichtflüchtigen Speicher (NVM-Befehl) ein „Ausgeben an den nichtflüchtigen Speicher (NVM)"-Befehl vorangeht, so daß die Befehle für den nichtflüchtigen Speicher (NVM) an den nichtflüchtigen Speicher (NVM) gegeben werden.
Vorrichtung nach Anspruch 6, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß der Speicherprotokoll-Controller (MPC), nachdem er einen Befehl ausgeführt hat, auf einer Befehlsanforderungsleitung des Direktspeicherzugriffscontrollers (DMAC) eine Anforderung für den nächsten Befehl gibt, der Direktspeicherzugriffscontroller (DMAC) dann den nächsten Befehl vom flüchtigen Speicher (VM) zum Speicherprotokoll-Controller (MPC) überträgt und sich diese Abfolge so lange fortsetzt, bis der Direktspeicherzugriffscontroller (DMAC) am Ende der Befehlsliste ankommt. Vorrichtung nach Anspruch 7, dadurch gekennzeichnet, daß sie einen Mikroprozessor aufweist und so eingerichtet ist, daß der Direktspeicherzugriffscontroller (DMAC), sobald er am Ende der genannten Befehlsliste angekommen ist, ein Interrupt-Signal an den Mikroprozessor gibt, um die vollständige Erfüllung der Aufgabe zu signalisieren. Vorrichtung nach Anspruch 8, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß ein Start der Datenübertragung durch den Mikroprozessor ausgelöst wird, indem dieser ein „Lauf"-Bit im Speicherprotokoll-Controller (MPC) setzt, nachdem das Einrichten der genannten Befehlsliste im flüchtigen Speicher (VM) abgeschlossen wurde, und daß danach der Datenübertragungsvorgang ohne jede weitere Mikroprozessorsteuerung abläuft, es sei denn, es treten Fehlerbedingungen auf. Vorrichtung nach Anspruch 9, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß das Auftreten von Fehlerbedingungen dem Mikroprozessor durch den Speicherprotokoll-Controller (MPC) signalisiert wird, daraufhin die Fehlerursache und die Adresse des letzten auszuführenden Befehls durch den Mikroprozessor aus einem Statusregister gelesen und alle weiteren Anforderungen an den Direktspeicherzugriffscontroller (DMAC) ausgegeben werden. Vorrichtung nach Anspruch 10, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß ein Fehlererfassungscode oder ein Fehlererfassungscode und ein Fehlerkorrekturcode (ECC) durch den Speicherprotokoll-Controller (MPC) erzeugt wird bzw. werden. Vorrichtung nach Anspruch 11, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß für Leseoperationen der Speicherprotokoll-Controller (MPC) den während der Leseoperation erzeugten Fehlererfassungscode mit einem in dem nichtflüchtigen Speicher (NVM) gespeicherten Fehlererfassungscode vergleicht und im Falle eines Lesefehlers der Speicherprotokoll-Controller (MPC) die Korrektur selber ausführt oder einen Interrupt an den Mikroprozessor triggert. Vorrichtung nach Anspruch 11 oder nach Anspruch 12, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß für Schreiboperationen der Speicherprotokoll-Controller (MPC) den Fehlerkorrekturcode (ECC) erzeugt und diesen Fehlerkorrekturcode (ECC) an eine vorbestimmte Stelle in den nichtflüchtige Speicher (NVM) schreibt. Vorrichtung nach einem der Ansprüche 4 bis 13, gekennzeichnet durch mindestens eine Steuerleitung, die den Speicherprotokoll-Controller (MPC) unmittelbar mit dem nichtflüchtigen Speicher (NVM) verbindet. Vorrichtung nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, daß sie so eingerichtet ist, daß die Daten in Form von Datenpaketen übertragen werden. Vorrichtung nach einem der vorhergehenden Ansprüche, gekennzeichnet durch einen Datenpuffer innerhalb des Speicherprotokoll-Controllers (MPC). Vorrichtung nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, daß der Speicherprotokoll-Controller (MPC) so eingerichtet ist, daß er Datenkompression und Datendekompression für Schreib- und/oder Leseoperationen durchführen kann. Vorrichtung nach einem der vorhergehenden Ansprüche, gekennzeichnet durch zwei Speichercontroller, die mit dem Speicherprotokoll-Controller (MPC) derart in Reihe geschaltet sind, daß der Speicherprotokoll-Controller (MPC) zwischen den beiden Speichercontrollern angeordnet ist, wobei der eine Speichercontroller ein Direktspeicherzugriffscontroller (DMAC) und der andere Speichercontroller ein konventioneller Speichercontroller ist.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com