DE69926511T2 - Schaltung und verfahren zum schnellen prüfen von fehlerkorrekturkoden mit hilfe einer zyklischen redundanzprüfung - Google Patents

Schaltung und verfahren zum schnellen prüfen von fehlerkorrekturkoden mit hilfe einer zyklischen redundanzprüfung Download PDF

Info

Publication number
DE69926511T2
DE69926511T2 DE69926511T DE69926511T DE69926511T2 DE 69926511 T2 DE69926511 T2 DE 69926511T2 DE 69926511 T DE69926511 T DE 69926511T DE 69926511 T DE69926511 T DE 69926511T DE 69926511 T2 DE69926511 T2 DE 69926511T2
Authority
DE
Germany
Prior art keywords
crc
error
unit
ecc
byte
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69926511T
Other languages
English (en)
Other versions
DE69926511D1 (de
Inventor
Y. Hung SZE
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Marvell World Trade Ltd
Original Assignee
QLogic LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by QLogic LLC filed Critical QLogic LLC
Publication of DE69926511D1 publication Critical patent/DE69926511D1/de
Application granted granted Critical
Publication of DE69926511T2 publication Critical patent/DE69926511T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • G11B20/1833Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11BINFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
    • G11B20/00Signal processing not specific to the method of recording or reproducing; Circuits therefor
    • G11B20/10Digital recording or reproducing
    • G11B20/18Error detection or correction; Testing, e.g. of drop-outs
    • G11B20/1833Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
    • G11B2020/1843Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information using a cyclic redundancy check [CRC]

Description

  • Bereich der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf Computer. Speziell bezieht sich die vorliegende Erfindung auf einen Schaltkreis und ein Verfahren zum Verbessern der Genauigkeit und Geschwindigkeit von Fehlererkennung und -korrektur in Plattenlaufwerken.
  • Hintergrund der Erfindung
  • Ein herkömmliches Plattenlaufwerk speichert Datenbytes auf Plattenlaufwerkscheiben in Sätzen einer vorab festgelegten Länge. Eine Plattenlaufwerksteuerung oder der Host- bzw. Hostcomputer kann Fehlerkorrekturcode-(Error Correction Code, ECC)-Bytes und zyklische Redundanzprüf-(Cyclic Redundancy Check, CRC)-Bytes für jeden Satz von Datenbytes erzeugen. Manchmal erzeugt der Hostcomputer CRC-Bytes, und die Plattensteuerung erzeugt ihren eigenen Satz von CRC-Bytes. Die CRC- und ECC-Bytes werden an das Ende des Satzes von Datenbytes angehängt. Die Datenbytes, CRC-Bytes und ECC-Bytes zusammen machen einen 'Sektor' aus, und dieser Sektor wird auf der Plattenscheibe gespeichert. Wenn die Plattenlaufwerksteuerung einen Sektor von der Platte liest, werden die Datenbytes und CRC-Bytes in einer Puffereinheit in dem Plattenlaufwerk gespeichert. Eine ECC-Einheit erkennt und korrigiert Fehler in dem von der Scheibe gelesenen Sektor. Diese Korrekturen werden an den in der Puffereinheit gespeicherten Datenbytes und CRC-Bytes vorgenommen.
  • Die ECC-Einheit kann jedoch einen Fehler irrtümlich nicht erkennen, wenn es tatsächlich einen Fehler in den von der CRC-Einheit erkannten Daten und in den von der Platte gelesenen CRC-Bytes gibt. Wenn die ECC-Einheit einen Fehler übersieht, wird sie auch die Daten- und CRC-Bytes nicht auf ihre Originalwerte korrigieren. Eine andere Fehlkorrektursituation ist, wenn die ECC-Einheit einen echten Fehler erkennt, aber dabei scheitert, die fehlerhaften Bytes) richtig zu korrigieren: Diese beiden Situationen sind Fehlkorrekturen. Plattenlaufwerke mit ECC-Einheiten, die höhere Fehlererkennungs- und -korrekturfähigkeiten haben, haben eine höhere Wahrscheinlichkeit von Fehlkorrekturen.
  • Nachdem die ECC-Einheit Korrekturen (oder Fehlkorrekturen) an den in der Puffereinheit gespeicherten Daten- und CRC-Bytes vorgenommen hat, liest die Plattenlaufwerksteuerung den Inhalt des Puffers und überträgt diesen Inhalt über einen Bus an den Hostcomputer. Zum Beispiel kann der Bus ein Kleincomputer-Systemschnittstellen-(Small Computer Systems Interface, SCSI)-Bus sein. Während die Daten übertragen werden, sammelte eine CRC- Prüfeinheit die 'korrigierten' Datenbytes ein, wie sie zu dem Host übertragen werden, erzeugt einen) CRC-Rest bzw. -Residuum und prüft auf etwaige Fehlkorrekturen durch das ECC. Aber die CRC-Prüfeinheit führt ihre Prüfungen nicht zu Ende, ob die übertragenen Daten irgendwelche Fehlkorrekturen haben, bevor die Datenübertragung zum Hostcomputer abgeschlossen ist. Nachdem eine Übertragung inkorrekter Daten zu dem Host abgeschlossen ist, sendet die CRC-Prüfeinheit eine Nachricht an den Hostcomputer, daß die von dem Hostcomputer empfangenen Daten Fehlkorrekturen enthalten. Der Hostcomputer muß die fehlerhaften Datenbytes verwerfen und eine Anforderung an das Plattenlaufwerk senden, die Datenbytes erneut von der Plattenscheibe zu lesen und die Datenbytes erneut zu übertragen.
  • Dies ist ineffizient, weil der Hostcomputer während der Zeit, in der er die fehlerhaften Daten empfängt, eine Nachricht von der CRC-Prüfeinheit empfängt, die Plattenlaufwerksteuerung auffordert, die Daten erneut zu übertragen, und auf das Lesen und erneute Übertragen neuer Daten wartet, eine andere Aufgabe erledigen könnte. Dies ist auch ineffizient, weil die Übertragungen, erneuten Übertragungen und CRC-Prüfnachrichten Bandbreite auf dem SCSI-Bus verbrauchen.
  • Darüber hinaus gibt es einen nachteiligen Einfluß auf die Leistungsfähigkeit auf Seiten des Host. Einige Hostcomputer, Schnittstellen und/oder Softwareanwendungen können die inkorrekten Daten nicht verarbeiten. Dies führt zu Ausfällen in den Anwendungen, die der Hostcomputer gerade ablaufen läßt. Einige Hostcomputer können inkorrekte Daten verarbeiten, aber sie können sich nicht schnell wieder erholen und dies verursacht unerwünschte Verzögerungen.
  • Die Patentanmeldung US-A-5600662 offenbart ein Fehlerkorrektursystem zum Korrigieren von Häufungen von Fehlern in Daten, die von einem sich drehenden magnetischen Speichermedium abgerufen werden. Das Fehlerkorrektursystem weist eine Mehrzahl von Subsystemen auf, die ein Vielzweck-CRC-Erzeugungs- und Prüf-Subsystem und ein ECC-Syndromerzeugungs-Subsystem beinhalten. Während einer Leseoperation erzeugt das CRC-Prüf-Subsystem erneut einen CRC-Wert aus einem Sektor von Daten und vergleicht den CRC-Wert mit einem Wert, der erzeugt wurde, als der Sektor auf das Medium geschrieben wurde.
  • Das ECC-Subsystem führt Fehlerkorrektur-Dekodierung auf einem Sektor von Bytes basierend auf einem Fehlersyndrom durch, das aus dem Fehlerkorrekturcode-Polynom und durch ein Codewort von Symbolen, das aus dem Datensektor zurückgeholt wird, berechnet wird. Das Syndrom wird verwendet, um Koeffizienten eines Fehlerlokalisier-Polynoms festzulegen, aus denen ein Fehlerauswertungs-Polynom gebildet wird. Ferner wird das CRC-Prüf-Subsystem verwendet, um die von dem ECC-Korrektur-Subsystem implementierte Korrektur zu überprüfen. Das liegt daran, weil das ECC-Subsystem auf zurückgeholte Daten angewandt wird, bevor das CRC-Subsystem angewandt wird. Das CRC-Subsystem stellt fest, ob die Fehlermuster als Null identifiziert werden, und anderenfalls, wird das Fehlermuster als durch das ECC-Subsystem nicht korrigierbar festgestellt.
  • Zusammenfassung der Erfindung
  • Verschiedene Aspekte und Eigenschaften der vorliegenden Erfindung sind in den beigefügten Ansprüchen definiert.
  • Die vorliegende Erfindung sieht einen Schaltkreis und ein Verfahren zum Verbessern der Genauigkeit und Geschwindigkeit der Fehlererkennung und -korrektur beim Lesen von Daten von einer Platte in einem Plattenlaufwerk vor. Die vorliegende Erfindung verwendet eine CRC-Einheit, um sowohl die von der Plattenscheibe gelesenen Sektorbytes als auch die von der ECC-Einheit an den Daten- und CRC-Bytes vorgenommenen Korrekturen zu überwachen. Die CRC-Einheit verwendet diese Information, um festzustellen, ob die in der Puffereinheit gespeicherten, ECC-korrigierten Datenbytes korrekt sind.
  • Im Gegensatz zu dem herkömmlichen Ansatz liest die CRC-Einheit in der vorliegenden Erfindung Datenbytes und CRC-Bytes gleichzeitg mit der ECC-Einheit von der Platte. Daher beginnt die CRC-Einheit mit dem Erzeugen eines Residuums zum Erkennen von Fehlern in den Daten ungefähr zur selben Zeit, zu der die ECC-Einheit mit dem Erzeugen eines Residuums zum Erkennen von Fehlern in dem Sektor beginnt. Dies spart Zeit, weil die CRC-Einheit in der vorliegenden Erfindung nicht darauf wartet, daß die ECC-Einheit die ECC-Fehlerkorrekturen beendet und in einen Puffer überträgt. Dies eliminiert die Zeit, die von einer CRC-Einheit beim Lesen des Inhalts eines Puffers verbraucht wird, nachdem eine ECC-Einheit ihre versuchten Korrekturen beendet hat.
  • Ein weiterer Vorteil der vorliegenden Erfindung liegt darin, daß der Schaltkreis und das Verfahren eine CRC-Fehlerprüfung abschließen, bevor irgendwelche Daten an den Hostcomputer übertragen werden. Mit anderen Worten muß die CRC-Einheit die Daten bestätigen, bevor die Plattenlaufwerksteuerung die Daten an den Host sendet.
  • Es gibt mindestens fünf Situationen, in denen die Plattenlaufwerksteuerung die aktuelle Leseoperation abbrechen und eine weitere Leseoperation desselben Sektors versuchen sollte. In einer Situation erkennt die ECC-Einheit einen nicht korrigierbaren Fehler in den von der Platte gelesenen Daten. In einer anderen Situation 'erkennt' die ECC-Einheit einen oder mehrere korrigierbare Fehler, und die CRC-Einheit erkennt keine Fehler. Dies ist eine fehlerhafte Erkennung. Wenn die ECC-Einheit diese Daten zu korrigieren versucht, dann erfolgt eine Fehlkorrektur. In einer anderen Situation erkennt die ECC-Einheit keine Fehler, und die CRC-Einheit erkennt Fehler. In einer anderen Situation erkennen sowohl die ECC-Einheit als auch die CRC-Einheit denselben bzw. dieselben Fehler, aber die ECC-Einheit scheitert, den Fehler richtig zu korrigieren. In einer weiteren Situation erkennen sowohl die CRC-Einheit als auch die ECC-Einheit mindestens einen Fehler, aber die erkannten Fehler sind nicht dieselben. In all diesen Situationen informiert die CRC-Einheit der vorliegenden Erfindung die Plattenlaufwerksteuerung. Die Plattenlaufwerksteuerung bricht die Leseoperation ab, verwirft den gesamten gelese nen Sektor und verhindert, daß die fehlerhaften Daten an den Host übertragen werden. Die Plattenlaufwerksteuerung versucht eine weitere Leseoperation desselben Datensektors von der Platte.
  • Somit reduzieren die CRC-Einheit und die Plattenlaufwerksteuerung der vorliegenden Erfindung die Menge von fehlerhaften Daten, die an den Host- bzw. Hostcomputer übertragen werden. Dies vermindert das Problem, daß der Host versucht, fehlerhaft korrigierte Daten zu verarbeiten, was zu Ausfällen, Fehlern der Softwareanwendungen und unerwünschten Verzögerungen führen könnte.
  • Die vorliegende Erfindung vermeidet auch die Zeit, die der Host zum Verwerfen der fehlerhaften Daten, Anfordern einer erneuten Übertragung aus dem Plattenlaufwerk und Warten, daß neue Daten von dem Plattenlaufwerk gelesen und übertragen werden, braucht. Der Hostcomputer spart Zeit und kann während dieser gesparten Zeit andere Aufgaben durchführen.
  • Die vorliegende Erfindung verringert auch die Bandbreite, die von den Übertragungen, erneuten Übertragungen und CRC-Prüfnachrichten auf dem SCSI-Bus verbraucht wird.
  • Eine Ausführungsform der vorliegenden Erfindung beinhaltet ein System zum Überprüfen einer oder mehrerer Korrekturen, die von einer Fehlerkorrekturcode-(Error Correction Code, ECC)-Einheit an einem Sektor von einer Platte in einem Plattenlaufwerk gelesener Bytes vorgenommen werden. Dieses System weist mindestens eine Platte, von der ein oder mehrere Sektoren von Bytes gelesen werden, eine ECC-Einheit, eine CRC-Einheit, eine Puffereinheit und eine Plattenlaufwerksteuerung auf. Die ECC-Einheit erkennt und korrigiert erkannte Fehler in dem Sektor von Bytes. Die CRC-Einheit überprüft die von der Fehlerkorrektureinheit vorgenommenen Korrekturen, bevor die Daten in dem Sektor zu einem Hostcomputer übertragen werden. Die CRC-Einheit empfängt den Sektor von Bytes zur selben Zeit, zu der die ECC-Einheit den Sektor von Bytes empfängt. Die Puffereinheit speichert mindestens einen Teil des von der Platte gelesenen Sektors von Bytes temporär und implementiert die Korrekturen von der ECC-Einheit an dem Sektor von Bytes. Die Plattenlaufwerksteuerung steuert die Übertragung des Sektors von Bytes von der Puffereinheit an den Hostcomputer. Die Plattenlaufwerksteuerung bricht den aktuellen Sektor von Bytes innerhalb der Puffereinheit ab und versucht eine weitere Leseoperation, wenn die von der CRC-Einheit gefundenen Fehler nicht mit den von der ECC-Einheit gefundenen Fehlern übereinstimmen.
  • Ausführungsformen der vorliegenden Erfindung können auch ein Verfahren zum Prüfen einer oder mehrerer Korrekturen vorsehen, die von einer ECC-Einheit an einem von einer Platte in einem Plattenlaufwerk gelesenen Sektor von Bytes vorgenommen wurden. Dieses Verfahren umfaßt das Lesen des Sektors von Bytes in eine CRC-Einheit und in eine ECC-Einheit, das Erzeugen eines CRC-Residuums aus den Datenbytes innerhalb des Sektors und das Erzeugen eines ECC-Residuums aus dem Sektor. Die CRC-Einheit vergleicht die von der CRC-Einheit gefundenen Fehlerorte und Fehlerwerte mit den von der ECC-Einheit gefundenen Fehlerorten und Fehlerwerten. Das Verfahren umfaßt ferner das Verwerfen des aktuellen von dem Plattenlaufwerk gelesenen Sektors, ohne ihn an einen Hostcomputer zu senden, und das Versuchen einer weiteren Leseoperation desselben Sektors, wenn die von der CRC-Einheit entdeckten Fehlerorte oder Fehlerwerte nicht mit den von der ECC-Einheit entdeckten Fehlerorten oder Fehlerwerten übereinstimmen.
  • Kurzbeschreibung der Zeichnungen
  • 1 stellt einen Sektor von Bytes gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung dar.
  • 2 ist ein Blockdiagramm eines Hostcomputers in Kommunikation mit einem Plattenlaufwerk gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung.
  • 3 ist ein Blockdiagramm verschiedener interner Einheiten des in 2 abgebildeten Plattenlaufwerks.
  • 4 ist ein Flußdiagramm von den Aktionen, die von einem CRC-Abgleichsmodul durchgeführt werden, das in dem in 2 abgebildeten Plattenlaufwerk enthalten ist.
  • 5 stellt den Inhalt von einem Fehlerort- und -wertspeichermodul innerhalb des in 2 abgebildeten Plattenlaufwerks dar.
  • 6 stellt die Ereignisse dar, die das in 2 abgebildete Plattenlaufwerk dazu veranlassen, eine Datenleseoperation abzubrechen.
  • Detaillierte Beschreibung von bevorzugten Ausführungsformen
  • Die vorliegende Erfindung bezieht sich auf einen Schaltkreis und ein Verfahren zum Durchführen einer CRC-Prüfung, bevor eine Plattenlaufwerksteuerung den Inhalt einer Puffereinheit liest und ihn an einen Hostcomputer überträgt. 1 stellt einen Sektor 100 von Bytes gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung dar. Jedes Byte beinhaltet 8 Bits. In einer bevorzugten Ausführungsform beinhaltet der Datenteil 102 des Sektors 516 Bytes, die vier Bytes der logischen Blockadresse (LBA) und 512 Datenbytes umfassen. Der CRC-Teil 104 beinhaltet zwei bis vier Bytes und wird aus dem Datenteil 102 mittels herkömmlicher Verfahren erzeugt. Der ECC-Teil 106 beinhaltet 24 bis 40 Bytes und wird aus dem Datenteil 102 und dem CRC-Teil 104 mittels herkömmlicher Verfahren erzeugt. Der Schaltkreis und das Verfahren sind auf Sektoren verschiedener Größen konfigurierbar. Die spezifischen Bytelängen des Datenteils 102, des CRC-Teils 104 und des ECC-Teils 106 beeinflussen nicht die Funktionalität des vorliegenden Schaltkreises und Verfahrens. Der Schaltkreis und das Verfahren können angepaßt werden, um Sektoren unterschiedlicher Daten-, CRC- und ECC-Bytelängen zu verwenden.
  • In einer bevorzugten Ausführungsform werden die ECC-Bytes durch eine Vier-Wege-Verschachtelung der Daten- 102 und CRC-Bytes 104 erzeugt. Der Zweck der Verschachtelung ist, bei Häufung von Fehlern zu korrigieren. In einer Vier-Weg-Verschachtelung werden die Da ten- und CRC-Bytes in Gruppen zu vier abgezählt. In einer bevorzugten Ausführungsform werden die Bytes von rechts (d.h. von Ende) des Sektors nach links (d.h. dem Anfang) des Sektors abgezählt. Das erste Byte rechts im Sektor 100 und jedes vierte Byte danach (d.h. das erste Byte, das fünfte Byte, das neunte Byte, etc. von rechts nach links) werden zusammengruppiert, um eine erste Verschachtelung zu bilden, die von der Plattenlaufwerksteuerung zum Erzeugen eines ersten ECC-Blocks verwendet wird. Das zweite Byte von rechts bzw. vom rechten (Ende) des Sektors 100 und jedes vierte Byte danach (d.h. das zweite Byte, das sechste Byte, das zehnte Byte, etc.) werden zusammengruppiert, um eine zweite Verschachtelung zu bilden, die zum Erzeugen eines zweiten ECC-Blocks verwendet wird. Das dritte Byte vom rechten (Ende) des Sektors 100 und jedes vierte Byte danach (d.h. das dritte Byte, das siebte Byte, das elfte Byte, etc.) des Sektors 100 werden zusammengruppiert, um eine dritte Verschachtelung zu bilden, die zum Erzeugen eines dritten ECC-Blocks verwendet wird. Das vierte Byte vom rechten (Ende) des Sektors 100 und jedes vierte Byte danach (d.h. das vierte Byte, das achte Byte, das zwölfte Byte, etc.) des Sektors 100 werden zusammengruppiert, um eine vierte Verschachtelung zu bilden, die zum Erzeugen eines vierten ECC-Blocks verwendet wird. Das Abzählen muß nicht notwendigerweise von rechts nach links in dem Sektor 100 beginnen. In anderen Ausführungsformen kann die Verschachtelungsreihenfolge von links beginnen oder in irgendeiner anderen geordneten Reihenfolge.
  • Aus diesen vier Verschachtelungen erzeugt die Plattenlaufwerksteuerung 126 vier entsprechende ECC-Blöcke. In einer Ausführungsform mit 40 ECC-Bytes ist jeder ECC-Block 10 Bytes lange. Jeder ECC-Block wird verwendet, um die Fehler in der Verschachtelung zu entdecken und zu korrigieren, die dem betreffenden ECC-Block zugeordnet sind. In einer anderen Ausführungsform verwendet das Plattenlaufwerk 110 drei Verschachtelungen. Ein aus drei oder vier Verschachtelungen erzeugter ECC kann bis zu 20 Bytes korrigieren.
  • 2 ist ein Blockdiagramm eines Hostcomputers 112 in Kommunikation mit einem Plattenlaufwerk 110 gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung. Das Plattenlaufwerk 110 kommuniziert mit dem Host 112 über einen Bus. In einer Ausführungsform ist der Bus ein Kleincomputer-Systemschnittstellen-(Small Computer Systems Interface, SCSI)-Bus. Das Plattenlaufwerk 110 weist mindestens eine Plattenscheibe 114, eine CRC-Einheit 118, eine ECC-Einheit 120, eine Puffereinheit 112, eine Plattenlaufwerksteuerung 126 und eine zweite CRC-Prüfeinheit 124 auf. Die CRC-Einheit 118, die ECC-Einheit 120 und die zweite CRC-Prüfeinheit 124 sind vorzugsweise unabhängige Schaltkreise. Die CRC-Einheit 118 weist einen CRC-Residuum-Generator 128 und ein CRC-Abgleichsmodul 130 auf. Wie hier verwendet ist 'Residuum' synonym mit 'Syndrom'. In einer bevorzugten Ausführungsform ist die CRC-Einheit 118 mittels eines Automaten und eines oder mehrerer Schieberegister implementiert. Die ECC-Einheit 120 weist einen ECC-Residuum-Generator 132, eine Mehrzahl von Verschachtelungs-Fehlerzählregistern 146, einen Fehlerort- und -wert-Prozessor 134, einen Feh lerort- und -wert-Speicher 136 und eine Pufferschnittstelle 138 auf. Die Puffereinheit 122 weist einen Puffermanager 140 und ein Pufferregister 142 auf. Die Plattenlaufwerksteuerung 126 beinhaltet mindestens ein Flag 'nicht-korrigierbarer Fehler' 144.
  • Die Verwendung und der Betrieb des Plattenlaufwerks 110 wird nun unter Bezug auf 2 beschrieben. Die Plattenlaufwerksteuerung 126 leitet eine Leseoperation ein, und die Daten- 102, CRC- 104 und ECC-Teile 106 eines Sektors 100 werden unabhängig sowohl in die CRC-Einheit 118 als auch in die ECC-Einheit 120 gelesen. Der Datenteil 102 und der CRC-Teil 104 des Sektors 100 werden auch in die Puffereinheit 122 gelesen. Die Lese-Reihenfolge der Bytes eines Sektors 100 beginnt mit den Datenbytes 102, dann den CRC-Bytes 104 und schließlich den ECC-Bytes 106. In 2 wird das am weitesten links stehende Byte des Daten teils 102 zuerst gelesen.
  • Nachdem die Daten- 102, CRC- 104 und ECC- 106 Bytes in die ECC-Einheit 120 eingelesen sind, verwendet der ECC-Residuum-Generator 132 die Daten- 102, CRC- 104 und ECC- 106 Bytes, um vier ECC-Residuen zu erzeugen, eines für jede Verschachtelung. In einer anderen Ausführungsform werden drei Verschachtelungen verwendet, und der ECC-Residuum-Generator 132 erzeugt drei ECC-Residuen. Die Gesamtzahl von Bytes von erzeugten ECC-Residuen ist dieselbe wie die des ursprünglichen ECC-Teils 106, der in dem Sektor 100 gespeichert ist. Wenn zum Beispiel der ECC-Teil 106 40 Bytes lang ist, ist die Gesamtzahl von ECC-Residuen-Bytes auch 40 Bytes lang. Wenn ein ECC-Residuum lauter Nullen enthält, dann wurden von der ECC-Einheit 120 in der diesem speziellen ECC-Block zugeordneten Verschachtelung keine Fehler erkannt.
  • Wenn das ECC-Residuum nicht lauter Nullen enthält, informiert die ECC-Einheit 120 die Puffereinheit 122 darüber, welche Fehler vorliegen und wo die Fehler gelegen sind. Speziell der Fehlerort- und -wert-Prozessor 134 verwendet die ECC-Residuen, um die Lage und den 'Masken'-Wert irgendeines gefundenen Fehlers zu bestimmen. Der Fehlerort ist ein Byte lang und repräsentiert einen Offset bzw. Abstand vom Ende eines Sektors 100. Der Maskenwert ist ein Byte lang und wird verwendet, um ein fehlerhaftes Daten- oder CRC-Byte zu korrigieren. Der Fehlerort- und -wert-Prozessor 134 verarbeitet die Fehler einer Verschachtelung gleichzeitig, weil jeder ECC-Block einer Verschachtelung zugeordnet ist. Der Fehlerort- und -wert-Prozessor 134 schließt die Verarbeitung von Fehlern in einer Verschachtelung ab, bevor er die Verarbeitung der Fehler für eine andere Verschachtelung beginnt.
  • Der Fehlerort- und -wert-Prozessor 134 gibt eine Liste von Fehlerorten und Maskenwerten jeweils für eine Verschachtelung nacheinander an den Fehlerort- und -wert-Speicher 136 aus. Der Fehlerort- und -wert-Speicher 136 speichert diese Informationen. In einer bevorzugten Ausführungsform ist dieser Fehlerort- und -wert-Speicher 136 ein Doppelportal- bzw. Dual-Port-Speicher mit einem Eingang, zwei Adreßleitungen und zwei Datenleitungen. Die Doppelportale erlauben es, daß die Pufferschnittstelle 138 und das CRC-Abgleichsmodul 130 den Fehlerort- und -wert-Speicher 136 unabhängig mit ihren jeweiligen Geschwindigkeiten lesen. Daher können sowohl die Pufferschnittstelle 138 als auch das CRC-Abgleichsmodul 130 zur selben Zeit ohne gegenseitige Beeinflussung aus dem Speicher 136 lesen.
  • 5 veranschaulicht den Inhalt des Fehlerort- und -wert-Speichers 136. Der Fehlerort- und -wert-Speicher 136 beinhaltet vier Fehlereintragblöcke 250, 252, 254, 256, einen Block für jede der vier Verschachtelungen. Der erste Block 250 entspricht zum Beispiel allen Fehlern, die in der ersten Verschachtelung gefunden wurden. In der bevorzugten Ausführungsform repräsentiert der letzte Fehlereintrag unten in jedem der vier Blöcke 250, 252, 254, 256 das früheste in dieser Verschachtelung gefundene, fehlerhafte Byte. Der Lage- und Fehlerwert des ersten von der ECC-Einheit 120 gefundenen fehlerhaften Byte in der ersten Verschachtelung wird am Anfang in dem ersten Fehlereintragsplatz 292 des ersten Verschachtelungsfehlerblocks 250 gespeichert. Wenn die ECC-Einheit 120 drei weitere fehlerhafte Bytes in der ersten Verschachtelung findet, wird der erste Eintrag eines fehlerhaften Byte nach unten gedrückt, bis er den vierten Fehlereintragsplatz 258 erreicht. Dieses "Nach-unten-Drücken"- bzw. "Push-Down"-Prinzip gilt für alle vier Verschachtelungs-Fehlereintragblöcke 250, 252, 254, 256.
  • Jeder Fehlereintrag in einem Block 250, 252, 254, 256 ist zwei Bytes lang – das erste Byte beinhaltet den Fehlerort und das zweite Byte beinhaltet den Maskenwert. In dem letzten Fehlereintrag 258 des ersten Verschachtelungs-Fehlereintragblocks 250 repräsentieren zum Beispiel die ersten acht Bits 272 einen Fehlerort und die zweiten acht Bits 274 einen Maskenwert, der zum Korrigieren des fehlerhaften Byte verwendet wird.
  • In der bevorzugten Ausführungsform beträgt die Größe des Fehlerort- und -wert-Speichers 136 vorzugsweise 40 Bytes, weil ein aus vier Verschachtelungen erzeugtes 40-Byte-ECC bis zu 20 Daten- (und CRC)-Bytes in einem 512-Byte-Datenblock korrigieren kann. Da jedes fehlerhafte Byte durch zwei Bytes repräsentiert wird (eins für die Lage und eins für den Maskenwert), werden 40 Bytes benötigt. Somit ist die maximale Größe des Fehlerort- und -wert-Speichers 136, der für einen 40-Byte-ECC mit 4 Verschachtelungen benötigt wird, 40 Bytes. Dies ist in 5 dargestellt. Weiterer Speicherplatz wird nicht benötigt und ist ineffizient. In einer anderen Ausführungsform, bei der ein ECC kürzer als 40 Bytes verwendet wird, kann die Speichergröße weniger als 40 Bytes betragen, weil ein kürzerer ECC weniger fehlerhafte Bytes erkennt.
  • In den 2 und 3 verfolgt ein Satz von Fehlerzählregistern 146 in der ECC-Einheit 120, wie viele Fehlereinträge in dem Fehlerort- und -wert-Speicher 136 für jede Verschachtelung gespeichert sind. In einer bevorzugten Ausführungsform gibt es vier Verschachtelungen und somit vier entsprechende Verschachtelungs-Fehlerzählregister 146. Das erste Verschachtelungs-Fehlerzählregister speichert zum Beispiel die Anzahl von fehlerhaften Bytes in der ersten Verschachtelung. Die Verschachtelungs-Fehlerzählregister 146 werden sowohl von der Pufferschnittstelle 138 als auch von dem CRC-Abgleichsmodul 130 gelesen, wie durch 3 dargestellt wird. In einer anderen Ausführungsform können die Verschachtelungs-Fehlerzählregister 146 innerhalb der CRC-Einheit 118 anstatt in der ECC-Einheit 120 liegen.
  • Ähnlich zu dem Fehlerort- und -wert-Prozessor 134 verarbeitet die Pufferschnittstelle 138 die Fehler für eine Verschachtelung gleichzeitig, weil jeder ECC-Block einer Verschachtelung zugeordnet ist. Die Pufferschnittstelle 138 beendet die Verarbeitung der Fehler in einer Verschachtelung, bevor sie mit der Verarbeitung der Fehler einer anderen Verschachtelung beginnt. Die Pufferschnittstelle 138 liest den Fehlerort- und -wert-Speicher 136 und übersetzt die Fehlerorte in tatsächliche Speicherstellen. Der Puffermanager 140 verwendet die Speicherstellen, um das bzw. die fehlerhafte(n) Byte(s) zu korrigieren.
  • Um das fehlerhafte Byte zu korrigieren, führt der Puffermanager 140 eine Ausschließlich-ODER-Operation zwischen dem fehlerhaften Byte und dem Maskenwert durch, der diesem fehlerhaften Byte zugeordnet ist. Wenn zum Beispiel ein Original-Datenbyte, das auf der Plattenscheibe 114 gespeichert ist, 00000000 ist und das Plattenlaufwerk 110 das Datenbyte als 00010000 liest, dann gibt es einen Fehler in dem vierten Bit von links. Der entsprechende Maskenwert für dieses spezielle Byte würde 00010000 sein. Um dieses Byte zu korrigieren, sendet die Pufferschnittstelle 138 in der ECC-Einheit 120 eine Nachricht an den Puffermanager 140, um den Maskenwert 00010000 mit dem fehlerhaften Byte 00010000 durch Ausschließlich-ODER zu verknüpfen. Das Ergebnis nach der Ausschließlich-ODER-Operation wäre 00000000, was dasselbe wie das ursprüngliche Datenbyte ist. Der Puffermanager 140 ersetzt das fehlerhafte Byte durch diesen Wert.
  • Zur selben Zeit, zu der der Sektor 100 in die ECC-Einheit 120 eingelesen wird, werden die Daten- 102 und CRC- 104 Bytes in die CRC-Einheit 118 eingelesen. Es gibt einen Bytezähler 156 innerhalb der CRC-Einheit 118, der den CRC-Residuum-Generator 128 informiert, wenn das letzte CRC-Byte in die CRC-Einheit 118 eingelesen wird. Nachdem die Daten- 102 und CRC- 104 Bytes in die CRC-Einheit eingelesen sind, verwendet der CRC-Residuum-Generator 128 die Daten- 102 und CRC- 104 Bytes, um ein CRC-Residuum (oder -Syndrom) mittels herkömmlicher Verfahren zu erzeugen. Das erzeugte CRC-Residuum hat dieselbe Bytelänge wie der ursprüngliche, in dem Sektor 100 gespeicherte CRC-Teil 104. Wenn der CRC-Teil 104 zum Beispiel zwei Bytes lang ist, ist das CRC-Residuum auch zwei Bytes lang. Die CRC-Einheit 118 verwendet das Residuum unter Einsatz von Standardtechniken, um Fehler in dem Datenteil 102 zu erkennen.
  • In einer bevorzugten Ausführungsform führt die zweite CRC-Prüfeinheit 124 eine weitere CRC-Prüfung auf den Datenbytes 102 durch, während die Datenbytes zu dem Host 112 gesendet werden. Diese zweite CRC-Prüfeinheit 124 prüft, um zu sehen, ob die Puffereinheit 122 richtig funktioniert. Wenn die Puffereinheit 122 nicht richtig funktioniert oder beschädigt ist, wird die zweite CRC-Prüfeinheit von der Puffereinheit 122 verursachte Fehler erkennen.
  • Im allgemeinen muß die CRC-Einheit 118 die gelesenen Daten bestätigen, bevor die gelesenen Daten an den Host 112 gesandt werden. Wenn sowohl die ECC-Einheit 120 als auch die CRC-Einheit 118 keine Fehler in den Daten 102 erkennen, dann überträgt die Plattenlaufwerksteuerung 126 den Sektor 100 an den Hostcomputer 112. Wenn die CRC-Einheit 118 und die ECC-Einheit 120 nicht darin übereinstimmen, ob ein Fehler in dem Sektor 100 erkannt wurde oder was die spezifischen erkannten Fehler sind, verwirft die Plattenlaufwerksteuerung 126 den gelesenen Sektor 100. Keine fehlerhaften Daten werden an den Host 112 gesandt, und der Host 112 versucht nicht, die fehlerhaften Daten zu verarbeiten. Die Plattenlaufwerksteuerung 126 wird eine weitere Leseoperation desselben Datensektors 100 von der Platte 116 versuchen. Dies beseitigt die Notwendigkeit, daß der Host 112 die fehlerhaften Daten verwirft und eine Neuübertragung anfordert.
  • 6 stellt einige der Ereignisse dar, die das Plattenlaufwerk 110 veranlassen, den aktuellen Sektor abzubrechen und zu versuchen, denselben Sektor erneut von der Plattenscheibe 114 zu lesen. In einem Ereignis 284 erkennt die ECC-Einheit 120 einen nicht korrigierbaren Fehler in den Daten 102. Ein Flag 144 "nicht-korrigierbarer Fehler" wird dann in der Plattenlaufwerksteuerung 126 gesetzt, um einen Abbruch 278 zu veranlassen. Die Plattenlaufwerksteuerung 126 verwirft den Sektor 100 in einer Funktion 280 und versucht eine weitere Leseoperation desselben Sektors von der Platte 116 in einer Funktion 282. Ein Beispiel eines nicht korrigierbaren Fehlers ist, wenn der ECC mehr als 20 Bytefehler in dem Sektor erkennt. Weil ein aus 4 Verschachtelungen erzeugter 40-Byte-ECC nur bis zu 20 fehlerhafte Bytes korrigieren kann, ist ein Sektor mit mehr als 20 fehlerhaften Bytes nicht korrigierbar.
  • Wenn, wie durch ein Ereignis 286 dargestellt, die CRC-Einheit 118 mindestens einen Fehler in den Daten 102 erkennt, die ECC-Einheit 120 jedoch nicht, dann wird das Flag 144 "nicht-korrigierbarer Fehler" in der Plattenlaufwerksteuerung 126 gesetzt, um einen Abbruch 278 zu veranlassen. Die Plattenlaufwerksteuerung 126 verwirft den Sektor 100 in der Funktion 280 und versucht eine weitere Leseoperation desselben Sektors von der Platte 116 in der Funktion 282.
  • Wenn, wie durch ein Ereignis 296 dargestellt, die ECC-Einheit 120 mindestens einen Fehler in den Daten 102 erkennt und korrigiert, und die CRC-Einheit 118 keinen Fehler erkennt, ist eine Fehlkorrektur aufgetreten, und ein Abbruch 278 wird eingeleitet. Die Plattenlaufwerksteuerung 126 verwirft den Sektor 100 in der Funktion 280 und versucht eine weitere Leseoperation desselben Sektors von der Platte 116 in der Funktion 282.
  • Wenn, wie durch ein Ereignis 290 dargestellt, sowohl die CRC-Einheit 118 als auch die ECC-Einheit 120 mindestens einen Fehler erkennen, aber die erkannten Fehler nicht dieselben sind, dann wird das Flag 144 "nicht-korrigierbarer Fehler" in der Plattenlaufwerksteuerung 126 gesetzt, um einen Abbruch 278 zu veranlassen. Die Plattenlaufwerksteuerung 126 verwirft den Sektor 100 in der Funktion 280 und versucht eine weitere Leseoperation desselben Sektors von der Platte 116 in der Funktion 282. Wenn zum Beispiel die CRC-Einheit 118 einen Fehler in dem ersten Datenbyte erkennt und die ECC-Einheit 120 einen Fehler in dem vierhundersten Byte erkennt, dann sind die erkannten Fehler nicht dieselben.
  • Eine bevorzugte Ausführungsform der vorliegenden Erfindung wird angepaßt, um alle vier Situation zu verarbeiten. Diese bevorzugte Ausführungsform ist idealerweise in der Lage, die beiden Situationen, die durch die Ereignisse 286, 290 dargestellt sind, zu verarbeiten.
  • Die Verwendung und der Betrieb des CRC-Abgleichsmoduls 130 in 2 wird nun unter Bezugnahme auf die 3, 4 und 5 beschrieben. 3 ist ein Blockdiagramm der CRC-Einheit 118 und anderer Komponenten des Plattenlaufwerks 110. Das CRC-Abgleichsmodul 130 weist ein CRC-Schieberegister 150 mit einer Rückkopplung 294, einen MUX 148, einen Vergleichsschaltkreis 276, vier Verschachtelungs-Fehlerzählzeiger 154 (jeder 1 Byte lang), einen Bytezähler 156, einen Verschachtelungszeiger 158 und ein CRC-Fehler-Flag 160 auf. Wie in 3 abgebildet, liest das CRC-Abgleichsmodul 130 Informationen aus dem CRC-Residuum-Generator 128, den Verschachtelungs-Fehlerzählregistern 146 und dem Fehlerort- und -wert-Speicher 136.
  • 4 ist ein Flußdiagramm der Aktionen, die von dem CRC-Abgleichsmodul 130 durchgeführt werden. Das CRC-Abgleichsmodul 130 kann durch einen Automaten implementiert werden, um die Aktionen in dem Flußdiagramm von 4 durchzuführen. Im allgemeinen prüft das CRC-Abgleichsmodul 130, um zu sehen, ob die von der ECC-Einheit 120 gefundenen Fehlerorte und Maskenwerte korrekt sind. Das CRC-Abgleichsmodul 130 liest den Fehlerort- und -wert-Speicher 136 und vergleicht diese Fehlereinträge mit dem von dem CRC-Residuum-Generator 128 erzeugten CRC-Residuum. Das CRC-Abgleichsmodul 130 erkennt jede von der ECC-Einheit 120 vorgenommene Fehlkorrektur. Dies vermindert wesentlich die Wahrscheinlichkeit von Fehlkorrekturen, die der Hostcomputer 112 sieht.
  • Insbesondere sendet die ECC-Einheit 120 am Ende des von der ECC-Einheit 120 durchgeführten Fehlerkorrekturvorgangs eine Nachricht an die CRC-Einheit 118, daß die ECC-Einheit 120 fertig ist. Das CRC-Abgleichsmodul 130 beginnt seinen Abgleichsvorgang. Dies wird durch das 'Start'-Oval 200 in 4 dargestellt. In einem Block 202 liest das CRC-Abgleichsmodul 130 die Verschachtelungs-Fehlerzählregister 146, um die Anzahl der von der ECC-Einheit 120 gefundenen Fehler festzustellen. Die Verschachtelungs-Fehlerzählregister 146 informieren das CRC-Abgleichsmodul 130 darüber, wie viele Fehlereinträge aus dem Fehlerort- und -wert-Speicher 136 gelesen werden müssen. Das CRC-Abgleichsmodul 130 speichert diese Information in seinen vier Verschachtelungs-Fehlerzählzeigern 154. Anders als die Verschachtelungs-Fehlerzählregister, die statisch sind, sind die Verschachtelungs-Fehlerzählzeiger 154 dynamisch und können von dem CRC-Abgleichsmodul 130 dekrementiert werden.
  • Als nächstes setzt das CRC-Abgleichsmodul 130 den Bytezähler 156 gleich der Sektorlänge minus der Anzahl von ECC-Bytes 106. Dies ist in einem Block 204 dargestellt. Daher ist das Plattenlaufwerk 110 konfigurierbar, um Sektoren unterschiedlicher Längen zu verarbeiten. Der Bytezähler 156 verfolgt, welches Byte in dem Sektor 100 das CRC-Abgleichsmodul 130 gerade verarbeitet. In einer bevorzugten Ausführungsform liegt die Gesamtsektorlänge zwischen 542 und 560 Bytes. Das CRC-Abgleichsmodul 130 betrachtet nur die Datenbytes 102 und die CRC-Bytes 104. Wenn die kombinierten Datenbytes 102 und die CRC-Bytes 104 zum Beispiel 520 Byte lang sind, dann wird der Bytezähler 156 auf '520' gesetzt. Dieser Wert '520' wird in den Beispielen unten verwendet.
  • In einem Block 206 initialisiert das CRC-Abgleichsmodul 130 den Verschachtelungszeiger 158 mit der Verschachtelungsnummer des ersten Datenbyte. Das erste Datenbyte kann in einer beliebigen der vier Verschachtelungen liegen, abhängig von der Reihenfolge, in der die Plattensteuerung 126 die Verschachtelungen organisiert hat. Wenn das erste Datenbyte zum Beispiel in der ersten Verschachtelung liegt, dann wird der Verschachtelungszeiger 158 zuerst auf '1' gesetzt. Wenn das erste Datenbyte in der dritten Verschachtelung liegt, dann wird der Verschachtelungszeiger 158 zuerst auf '3' gesetzt.
  • In einem Block 208 wird das CRC-Schieberegister 150 mit Null initialisiert. Die Struktur des CRC-Schieberegisters 150 ist im Wesentlichen einem herkömmlichen CRC-Schieberegister ähnlich, wie in dem CRC-Residuum-Generator 128 verwendet. Ein herkömmliches CRC-Schieberegister wird verwendet, um ein CRC-Residuum zu erzeugen und um Fehler in einem Sektor zu erkennen. Das CRC-Schieberegister 150 in dem CRC-Abgleichsmodul 130 wird zum Prüfen der von der ECC-Einheit 120 gefundenen Fehlermaskenwerte verwendet. Das CRC-Schieberegister 150 hat dieselbe Länge wie der ursprüngliche CRC-Teil 104, der zwei bis vier Bytes lang ist. Die Struktur der Rückkopplung 294 wird durch ein standardmäßiges CRC-Generatorpolynom definiert.
  • In einem Block 210 holt das CRC-Abgleichsmodul 130 einen bestimmten Fehlerort und -wert, wie durch den Verschachtelungszeiger 158 und den Verschachtelungs-Fehlerzählzeiger 154 angegeben, aus dem Fehlerort- und -wert-Speicher 136. Der Verschachtelungszeiger 158 in 3 gibt an, auf welche Spalte in 5 von dem CRC-Abgleichsmodul 130 zugegriffen wird. Der Verschachtelungs-Fehlerzählzeiger 154 gibt an, auf welche Zeile zugegriffen wird. Wenn zum Beispiel das erste Datenbyte der ersten Verschachtelung zugeordnet ist und es vier Einträge in dem ersten Verschachtelungs-Fehlereintragsblock 250 gibt, ist der Verschachtelungszeiger 158 gleich '1', und der Verschachtelungs-Fehlerzählzeiger 154 ist gleich '4'. Wenn es 520 Bytes von Daten und CRC gibt und die vier Verschachtelungen von rechts nach links wie oben beschrieben organisiert sind, wird das erste Datenbyte am linken Ende in der vierten Verschachtelung liegen. Aber für die Zwecke dieses Beispiels und die nachstehende Beschreibung wird das erste Datenbyte als der ersten Verschachtelung zugeordnet betrachtet. Das CRC-Abgleichsmodul 130 holt den vierten Fehlereintrag 258 in der ersten Spalte 250 in 5. Wie oben beschrieben sind die ersten Fehlereinträge (am nächsten am linken Ende des Sektors 100) aufgrund des 'Push-Down'-Speicherprinzips dem Boden jeder Spalte am nächsten.
  • Sobald das CRC-Abgleichsmodul 130 einen Fehlereintrag aus dem Fehlerort- und -wert-Speicher 136 geholt hat, prüft das Modul 130 zuerst den Fehlerort-Teil des Fehlereintrages (jeder Fehlereintrag in dem Speicher 136 hat einen Fehlerort und einen Fehlerwert). In einem Block 212 prüft das CRC-Abgleichsmodul 130, um zu sehen, ob der Fehlerort des speziellen Fehlereintrages wie durch den Verschachtelungszeiger 158 und den Verschachtelungs-Fehlerzählzeiger 154 angegeben, gleich dem aktuellen Lagewert ist, der in dem Bytezähler 156 angegeben ist. In dem Beispiel oben wird der Bytezähler 156 für das CRC-Abgleichsmodul 130 gesetzt, um das erste Datenbyte anzusehen, welches '520' ist. Das erste Datenbyte liegt in der ersten Verschachtelung, und der Verschachtelungszeiger 158 wird auf '1' gesetzt. Der Verschachtelungs-Fehlerzählzeiger 154 für die erste Verschachtelung zeigt an, daß es vier Fehlereinträge gibt. Das CRC-Abgleichsmodul 130 holt den vierten Fehlereintrag 258 in dem ersten Verschachtelungs-Fehlereintragblock 250 in 5. Das CRC-Abgleichsmodul 130 prüft den Fehlerort 272 in diesem Fehlereintrag 258. Wenn dieser Fehlerort 272 nicht mit dem aktuellen Wert in dem Bytezähler 156 übereinstimmt, dann weiß das CRC-Abgleichsmodul, daß die ECC-Einheit 120 keinen Fehler in dem ersten Datenbyte gefunden hat. Daher geht das CRC-Abgleichsmodul 130 zu einem Block 214 weiter.
  • In dem Block 214 gibt das CRC-Abgleichsmodul 130 eine '0' in den MUX 148 ein (3). Das CRC-Abgleichsmodul 130 reicht eine '0' durch ein Ausschließlich-ODER-(XOR)-Gatter 152, das ebenfalls die Ausgabe des CRC-Schieberegisters 150 entgegennimmt. Die Ausgabe 294 des Ausschließlich-ODER-Gatters 152 wird über die Rückkopplung 294 in das CRC-Schieberegister 150 zurückgekoppelt. In einem Block 216 dekrementiert das CRC-Abgleichsmodul 130 den Verschachtelungszeiger 158 und den Bytezähler 156 um eins. Der Bytezähler 156 wird um '1' auf '519' dekrementiert, weil das CRC-Abgleichsmodul 130 das zweite Datenbyte von links in dem Sektor 100 prüft. Nach dem Dekrementieren ist der Verschachtelungszeiger 158 nun gleich '4', weil die Bytes in Sektor 100 von rechts nach links abgezählt werden, wenn sie in die vier Verschachtelungen eingestellt werden. Das nächste Mal, wenn der Verschachtelungszeiger 158 dekrementiert wird, wechselt er von '4' nach '3' nach '2' nach '1' und zurück nach '4' nach '3' und wiederholt dies. Dieses Dekrementieren wiederholt sich, bis der Bytezähler in Block 230 gleich '0' ist.
  • Anders als in der Pufferschnittstelle 138 in der ECC-Einheit 120 verarbeiten der CRC-Residuum-Generator 128 und das CRC-Abgleichsmodul 130 die Fehler nicht jeweils für eine Verschachtelung gleichzeitig, weil die CRC-Bytes 104 und das CRC-Residuum nicht aus Verschachtelungen erzeugt werden. Das CRC-Residuum wird aus dem gesamten Datenteil 102 erzeugt. Der CRC-Residuum-Generator 128 und das CRC-Abgleichsmodul 130 verarbeiten Fehler seriell von links nach rechts, beginnend mit dem ersten Datenbyte von links.
  • In einem Block 218 schiebt das CRC-Abgleichsmodul 130 das CRC-Schieberegister 150 einmal zyklisch gemäß den Standard-CRC-Techniken. Nachdem das CRC-Abgleichsmodul 130 aufgehört hat, irgendwelche von der ECC-Einheit 120 und der CRC-Einheit 118 in dem ersten Datenbyte gefunden Fehler zu vergleichen, geht das Modul 130 zu dem zweiten Datenbyte in dem Datenteil 102 weiter. Um das zweite Datenbyte in dem Datenteil 102 zu überprüfen, muß das CRC-Abgleichsmodul 130 nach Fehlern schauen, die von der ECC-Einheit 120 in der nächsten Verschachtelung gefunden wurden. Daher geht das CRC-Abgleichsmodul 130 durch jeden Verschachtelungs-Fehlereintragblock 250, 252, 254, 256 in dem Fehlerort- und -wert-Speicher 136.
  • Das CRC-Abgleichsmodul 130 kehrt zu Block 210 zurück, wo das CRC-Abgleichsmodul 130 den nächsten Fehlerort und -wert holt. Insbesondere ist der Verschachtelungszeiger 158 dem Beispiel von oben folgend jetzt gleich '4'. Der Verschachtelungs-Fehlerzählzeiger 154 für die vierte Verschachtelung ist nun gleich '2', weil es zwei Einträge 270, 264 in dem vierten Verschachtelungs-Fehlereintragblock 256 der beispielhaften Darstellung des Fehlerort- und -wert-Speichers gemäß 5 gibt. Das CRC-Abgleichsmodul 130 holt den zweiten Fehlereintrag 264 in dem vierten, in 5 abgebildeten Verschachtelungs-Fehlereintragblock 256. In dem Block 212 vergleicht das CRC-Abgleichsmodul 130 den aktuellen Wert in dem Bytezähler 156, der '519' ist, mit dem Fehlerort-Teil (ersten Byte) des Fehlereintrages 264. Wenn der aktuelle Wert in dem Bytezähler 156 gleich dem Fehlerort-Teil des Fehlereintrages 264 ist, d.h. beide gleich '519' sind, bedeutet das, daß die ECC-Einheit 120 einen Fehler in diesem zweiten Datenbyte gefunden hat. Das CRC-Abgleichsmodul 130 geht zu einem Block 220 weiter, wo das CRC-Abgleichsmodul 130 den Fehlermasken-Wert (zweites Byte) des Fehlereintrages 264 (5) durch den MUX 148 und das Ausschließlich-ODER-Gatter 152 mit der Ausgabe des CRC-Schieberegisters 150 reicht. Wie oben diskutiert, wird diese Ausgabe über die Rückkopplung 294 mittels herkömmlicher CRC-Techniken in das CRC-Schieberegister 150 zurückgekoppelt.
  • Die Rückkopplung des Fehlermaskenwertes und der Ausgabe des CRC-Schieberegisters 150 zurück in das CRC-Schieberegister 150 erzeugt ein 'CRC-Residuum' in dem CRC-Schieberegister 150. Dieses CRC-Residuum, das in dem CRC-Schieberegister 150 in dem CRC-Abgleichsmodul 130 erzeugt und gespeichert ist, berücksichtigt nun einen in dem zweiten Datenbyte von der ECC-Einheit 120 gefundenen Fehler. Wenn das CRC-Abgleichsmodul 130 durch die Datenbytes fortschreitet, übergibt das CRC-Abgleichsmodul 130 weiterhin Fehlermaskenwerte aus dem Fehlerort- und -wert-Speicher 136 der ECC-Einheit durch das Ausschließlich-ODER-Gatter 152 mit der Ausgabe des CRC-Schieberegisters 150. Der Ausgangswert des Ausschließlich-ODER-Gatter 152 wird weiterhin in das CRC-Schieberegister 150 zurückgekoppelt. Daher berücksichtigt das von dem CRC-Schieberegister 150 erzeugte CRC-Residuum gegebenenfalls alle von der ECC-Einheit 120 gefundene Datenbytefehler. Dieser Prozeß wird fortgesetzt, bis der Bytezähler 156 das Ende des Datenbyteteils 102 und den Beginn des CRC-Teils 104 erreicht.
  • Anders als das von dem CRC-Residuum-Generator 128 erzeugte CRC-Residuum, wird das CRC-Residuum in dem CRC-Schieberegister 150 nicht aus den Datenbytes 102 mittels eines herkömmlichen zyklischen Generator-Polynoms zur Redundanzprüfung erzeugt. Das CRC-Residuum in dem CRC-Schieberegister 150 wird aus den von der ECC-Einheit 120 mittels eines ECC-Residuums gefundenen Fehlermaskenwerten erzeugt. Das CRC-Residuum in dem CRC-Schieberegister 150 wird ohne die ursprünglichen Datenbytes 102 erzeugt. Dies ermöglicht einen späteren Vergleich zwischen dem von dem CRC-Residuum-Generator 128 erzeugten CRC-Residuum und dem von dem CRC-Abgleichsmodul 130 aus den von der ECC-Einheit 120 gefundenen Fehlermaskenwerten erzeugten 'CRC-Residuum'.
  • In einem Block 222 wird der aktuelle Wert des Verschachtelungs-Fehlerzählzeigers 154 für die vierte Verschachtelung um eins dekrementiert und wechselt von '2' auf '1'. Das bedeutet, daß nur ein weiterer Fehlereintrag 270 in dem vierten Verschachtelungs-Fehlereintragblock 256 zur Verarbeitung durch das CRC-Abgleichsmodul 130 übrig ist. Das CRC-Abgleichsmodul 130 dekrementiert den aktuellen Verschachtelungs-Fehlerzählzeiger 154 jedes Mal, wenn das CRC-Abgleichsmodul 130 den Block 212 erreicht, und fährt mit den Blöcken 220 und 222 fort, weil der Ort eines Fehlereintrags mit dem vorliegenden Wert, der in dem Bytezähler 156 gespeichert ist, übereinstimmt. Der Verschachtelungs-Fehlerzählzeiger 154 wird jedes Mal dekrementiert, wenn das CRC-Abgleichsmodul 130 den Block 222 erreicht, bis eines von zwei Ereignissen passiert. In der einen Situation gibt es keine weiteren Fehlereinträge in den Verschachtelungs-Fehlereintragblöcken 250, 252, 254, 256 des Fehlerort- und -wert-Speichers 136 für das CRC-Abgleichsmodul 130 zu bearbeiten, d.h., wenn der Verschachtelungs-Fehlerzählzeiger 154 für diese spezielle Verschachtelung '0' erreicht. In der anderen Situation erreicht der Bytezähler 156 das Ende der CRC-Bytes, d.h., wenn der Bytezähler 156 gleich '0' ist. In dieser letzteren Situation kann es weitere Fehlereinträge in dem Fehlerort- und -wert-Speicher 136 geben, aber diese Fehlereinträge beziehen sich auf Fehler, die in den ECC-Bytes 106 gefunden wurden. Das CRC-Abgleichsmodul 130 prüft nicht auf Fehlkorrekturen in den ECC-Bytes 106.
  • In einem Block 224 vergleicht das CRC-Abgleichsmodul 130 den aktuellen Wert in dem Bytezähler 156, der '519' ist, mit dem Ort des ersten CRC-Byte. Der Ort des ersten CRC-Byte in dem Beispiel von oben ist '4', weil von den 520 kombinierten Daten- und CRC-Bytes die ersten vier Bytes CRC-Bytes und die nächsten 516 Datenbytes sind, wenn von rechts nach links gezählt wird. Weil der Bytezähler 156 gleich '519' ist und dies nicht gleich '4' ist, fährt das CRC-Abgleichsmodul 130 fort, den Verschachtelungszeiger 158 auf '3' zu dekrementieren, und de krementiert den Bytezähler 156 in Block 216 auf '518'. Das CRC-Schieberegister 150 macht eine zyklische Verschiebung in Block 218 für das nächste Byte.
  • In dem Block 210 ist der Verschachtelungs-Fehlerzählzeiger 154 für die dritte Verschachtelung gleich '1', weil es nur einen Fehlereintrag in der beispielhaften Fehlerort- und -wert-Speicher-Abbildung in 5 gibt. Das CRC-Abgleichsmodul 130 holt den Fehlerort- und -wert aus dem ersten (und einzigen) Fehlereintrag 262 in dem dritten Verschachtelungs-Fehlereintragblock 254. In dem Block 212 vergleicht das CRC-Abgleichsmodul 130 den aktuellen Wert des Bytezählers 156 mit dem Fehlerort (erste 8 Bits) des Fehlereintrags 262. Wenn der Wert des Bytezählers 156 mit dem Fehlerort des Fehlereintrags 262 übereinstimmt, dann hat die ECC-Einheit 120 einen Fehler in dem dritten Datenbyte erkannt. Wenn der Bytezähler 156 nicht mit dem Fehlerort des Fehlereintrags 262 übereinstimmt, dann hat die ECC-Einheit 120 keinen Fehler in dem dritten Datenbyte erkannt.
  • Dieser durch die Blöcke 210 bis 224 beschriebene Prozeß wiederholt sich, bis der Bytezähler 156 in dem CRC-Abgleichsmodul 130 das erste CRC-Byte erreicht. Mit anderen Worten, der Bytezähler 156 ist gleich '4'. Zu diesem Zeitpunkt berücksichtigt der Rückkopplungswert des CRC-Schieberegisters 150 alle Maskenwerte der von der ECC-Einheit 120 gefundenen Datenbytefehler. In einem Block 226 verwendet das CRC-Abgleichsmodul 130 den Vergleichsschaltkreis 276 von 3, um den Rückkopplungswert des CRC-Schieberegisters 150 mit einer CRC-Residuum-Eingabe aus dem CRC-Residuum-Generator 128 zu vergleichen. Die CRC-Residuum-Eingabe aus dem CRC-Residuum-Generator 128 berücksichtigt alle von dem CRC-Residuum-Generator 128 mittels Standard-CRC-Verfahren gefundenen Datenbytefehler. In einem Block 226 vergleicht das CRC-Abgleichsmodul 130 jedweden von dem CRC-Residuum-Generator 128 gefundenen Fehler in den Datenbytes mit allen von der ECC-Einheit gefundenen Fehlern 120.
  • Wenn die beiden CRC-Residuen gleich sind, dann prüft das CRC-Abgleichsmodul 130 in einem Block 230, um zu sehen, ob der Bytezähler 156 gleich '0' ist. Der Bytezähler 156 ist gleich '0', wenn der Bytezähler 156 das Ende der Daten- und CRC-Bytes des Sektors 100 erreicht hat. Wenn der Bytezähler 156 nicht gleich '0' ist, dann fährt das CRC-Abgleichsmodul 130 fort, die CRC-Bytes wie in den Blöcken 210 bis 226 beschrieben zu verarbeiten.
  • Wenn die beiden CRC-Residuen, die verglichen werden, nicht gleich sind wie in einem Block 226, dann setzt das CRC-Abgleichsmodul 130 ein CRC-Fehler-Flag 160 in Block 228. Dieses CRC-Fehler-Flag 160 verständigt (oder unterbricht) sofort die Plattenlaufwerksteuerung 126 darüber, daß die von der CRC-Einheit 118 gefundenen Fehler inkonsistent mit den von der ECC-Einheit 120 gefundenen Fehlern sind. In einer bevorzugten Ausführungsform ist dieses CRC-Fehler-Flag 160 innerhalb des CRC-Abgleichsmoduls 130 gelegen und wird von der Plattenlaufwerksteuerung 126 gelesen. In einer anderen Ausführungsform ist das CRC-Fehler-Flag 160 innerhalb der Plattenlaufwerksteuerung 126 gelegen.
  • Wenn das CRC-Fehler-Flag 160 gesetzt ist, bricht die Plattenlaufwerksteuerung 126 die Lese-Operation ab, verwirft den aktuellen Sektor 100 und versucht eine weitere Lese-Operation desselben Sektors 100 von der Platte 116.
  • In einer bevorzugten Ausführungsform gibt es vier CRC-Bytes. Mit vier Bytes des CRC erzeugt der CRC-Residuum-Generator 128 vier Residuen von der Länge eines Byte. Somit gibt es vier Residuen, ein Residuum für jedes der vier Bytes des CRC. Der Vergleichsschaltkreis 276 vergleicht die vier von dem CRC-Residuum-Generator 128 erzeugten CRC-Residuen, jeweils einzeln nacheinander, mit den vier von dem CRC-Schieberegister 150 erzeugten Residuen. Dieser Vorgang ist in den Blöcken 224, 226 und 230 dargestellt. Es kann in den CRC-Bytes selbst erkannte Fehler geben.
  • In dem Block 230 prüft das CRC-Abgleichsmodul 130, um zu sehen, ob der Bytezähler 156 gleich '0' ist. Wenn der Bytezähler 156 nicht gleich '0' ist, dann fährt das CRC-Abgleichsmodul fort, die CRC-Bytes, wie in den Blöcken 210 bis 226 beschrieben, zu verarbeiten. Wenn der Bytezähler 156 gleich '0' ist, dann endet der CRC-Abgleichsvorgang in Block 232.
  • Während der Zeit, in der das CRC-Abgleichsmodul 130 erkannte Fehler vergleicht, kann die Plattenlaufwerksteuerung 126 ein oder mehrere Signale an den Hostcomputer 112 senden, die besagen, daß das Plattenlaufwerk 110 noch nicht bereit ist, Daten zu übertragen. Alternativ könnte der Hostcomputer 112 beim Plattenlaufwerk 110 nach einem Signal "Bereit-Daten-zu-Übertragen" bzw. "ready-to-transmit-data" nachfragen.
  • Wenn sich der oben beschriebene Fehlerkorrektur- und -prüfvorgang wiederholt, wird ein anderer Sektor in die ECC-Einheit 120 gelesen. Der ECC-Residuum-Generator 132 erzeugt ein ECC-Residuum für diesen Sektor, und der Fehlerort- und -wert-Prozessor 134 schreibt die Fehlerorte und -werte, falls es welche gibt, in den Fehlerort- und Fehlerwert-Speicher 136. Der Inhalt des Speichers 136 wird jedes Mal überschrieben, wenn ein neuer Sektor von der ECC-Einheit 120 verarbeitet wird.
  • Die vorliegende Erfindung reduziert die Menge an fehlerhaften Daten, die an den Hostcomputer 112 gesendet werden. Der Hostcomputer 112 braucht keine fehlerhaften Datenbytes zu verwerfen, keine Anforderung an das Plattenlaufwerk zu senden, die Datenbytes nicht erneut von der Plattenscheibe zu lesen und die Datenbytes nicht erneut zu übertragen, und nicht auf neue zu lesende und zu übertragende Daten zu warten. Der Hostcomputer 112 spart Zeit und kann andere Aufgaben während dieser gesparten Zeit durchführen.
  • Die vorliegende Erfindung reduziert auch die Bandbreite, die von den Übertragungen, erneuten Übertragungen und CRC-Prüfnachrichten auf dem SCSI-Bus belegt wird. Ferner verhindert die vorliegende Erfindung Störungen in aktuell auf Hostcomputern ablaufenden Software-Anwendungen, die die inkorrekten Daten nicht verarbeiten können.
  • Während Ausführungsformen und Anwendungen dieser Erfindung dargestellt und beschrieben wurden, ist es Fachleuten auf dem Gebiet klar, daß zahlreiche Abwandlungen mög lich sind, ohne von dem Anwendungs- bzw. Geltungsbereich der Erfindung abzuweichen. Es versteht sich demnach, daß diese Erfindung innerhalb des Schutzbereichs der beigefügten Ansprüche auch anders als speziell beschrieben praktiziert bzw. angewandt werden kann.

Claims (15)

  1. System zum Bestimmen, ob eine Fehlerkorrektureinheit (ECC-Einheit) in einen Bytesektor, der von einer Platte in einem Plattenlaufwerk gelesen wurde, Fehler korrigiert hat, wobei das System aufweist: zumindest eine Platte bzw. Festplatte, von welcher der Bytesektor durch das Plattenlaufwerk gelesen wird, eine ECC-Einheit für den Empfang des Bytesektors, welche in dem Bytesektor wahrgenommene Fehler erfaßt und korrigiert und welche Daten erzeugt, die Fehlerpositionen und Fehlerwerte der korrigierten, wahrgenommenen Fehler in dem Bytesektor wiedergeben, eine Einheit zur zyklischen Redundanzüberprüfung (CRC) für die Aufnahme des Bytesektors, wobei die CRC-Einheit einen ersten CRC-Restgenerator zum Erzeugen eines ersten CRC-Restwertes aufweist, der einen Wert hat, welcher auf Fehler in dem Bytesektor anspricht, wobei die CRC-Einheit den Bytesektor parallel zum Empfang des Bytesektors durch die ECC-Einheit empfängt, ein CRC-Abgleichsmodul, welches feststellt, ob die ECC-Einheit wahrgenommene Fehler in dem Bytesektor korrekt erfaßt und korrigiert hat, wobei das CRC-Abgleichsmodul aufweist: einen zweiten CRC-Restgenerator, welcher die Daten von der ECC-Einheit empfängt, welche die Fehlerpositionen und Fehlerwerte der korrigierten, wahrgenommenen Fehler in dem Bytesektor wiedergibt, wobei der zweite CRC-Restwertgenerator einen zweiten CRC-Restwert erzeugt, der einen Wert hat, welcher den korrigierten, wahrgenommenen Fehlern entspricht, und einen Vergleicher, welcher den ersten CRC-Restwert mit dem zweiten CRC-Restwert vergleicht und eine Fehleranzeige erzeugt, falls der erste CRC-Restwert und der zweite CRC-Restwert voneinander verschieden sind, eine Puffereinheit, welche zeitweise zumindest einen Teil des von der Festplatte gelesenen Bytesektors speichert, wobei die Speichereinheit die Korrekturen durch die ECC-Einheit in dem Bytesektor implementiert, und eine Plattenlaufwerkssteuerung, welche die Übertragung des Bytesektors von der Puffereinheit an den Hostcomputer steuert, wobei die Plattenlaufwerkssteuerung den aktuellen Bytesektor innerhalb der Puffereinheit verwirft und einen weiteren Lesevorgang versucht, falls die durch den Vergleicher erzeuge Fehleranzeige anzeigt, daß der erste CRC-Restwert und der zweite CRC-Restwert verschieden sind.
  2. System nach Anspruch 1, wobei der Bytesektor aufweist: datenbytes CRC-Bytes, und ECC-Bytes.
  3. System nach Anspruch 1, welches weiterhin eine zweite CRC-Prüfeinheit aufweist, die eine weitere CRC-Prüfung mit den Datenbytes in dem Sektor vornimmt, während die Datenbytes an den Host gesendet werden, wobei die zweite CRC-Prüfeinheit eine Überprüfung vornimmt, um festzustellen, ob die Puffereinheit ordnungsgemäß funktioniert.
  4. System nach Anspruch 1, wobei der Bytesektor in einer Mehrzahl von Verschachtelungen organisiert ist, um eine Mehrzahl von ECC-Restwerten zu erzeugen, wobei jeder der ECC-Restwerte nur jeweils einer Verschachtelung bzw. Überlappung entspricht.
  5. System nach Anspruch 4, wobei der Bytesektor in vier Verschachtelungen organisiert ist, wobei jede Verschachtelung verwendet wird, um ihren eigenen ECC-Restwert zu erzeugen.
  6. System nach Anspruch 4, wobei die ECC-Einheit aufweist: einen ECC-Restwertgenerator, um für jede Verschachtelung. von Bytes einen Restwert zu erzeugen, einen Fehlerpositions- und Werteprozessor, um die Position und den Maskenwert für jeden erfaßten Fehler aus dem durch den ECC-Restwertgenerator erzeugten Restwert abzuleiten, einen Speicher für die Fehlerposition und den Maskenwert, um die Position und den Maskenwert für jeden erfaßten Fehler in jeder Verschachtelung zu speichern, welcher durch den Fehlerpositions- und Werteprozessor abgeleitet wurde, eine Mehrzahl von Verschachtelungsfehlerzählregistern, um die Anzahl der Fehler, die durch die ECC-Einheit in jeder Verschachtelung erfaßt wurden, zu verfolgen und eine Pufferschnittstelle, um die erfaßten fehlerhaften Bytes in der Puffereinrichtung unter Verwendung der Fehlereinträge in dem Fehlerpositions- und Wertespeicher zu korrigieren.
  7. System nach Anspruch 6, wobei der Fehlerpositions- und Maskenwertspeicher Einträge von zwei Bytes aufweist, wobei ein erstes Byte jedes Fehlereintrags die Fehlerposition und ein zweites Byte jedes Fehlereintrags den Fehlermaskenwert wiedergibt.
  8. System nach Anspruch 6, wobei die Pufferschnittstelle ein fehlerhaftes Byte in dem Sektor korrigiert, indem sie das fehlerhafte Byte und seinen Fehlermaskenwert durch ein Aus schließlich-ODER-Gatter leitet und das fehlerhafte Byte durch den Ausgangswert des Ausschließlich-ODER-Gatters ersetzt.
  9. System nach Anspruch 6, wobei der Fehlerpositions- und Maskenwertspeicher ein Speicher mit zwei Anschlüssen ist (dual port), der in der Lage ist, gleichzeitig von zwei verschiedenen Einheiten gelesen zu werden.
  10. System nach Anspruch 1, wobei der zweite CRC-Restwertgenerator aufweist: ein CRC-Schieberegister, welches einen CRC-Restwert erzeugt, der alle Fehlerwerte, die durch die ECC-Einheit gefunden wurden, berücksichtigt, einen Multiplexer, welcher zwischen einem Fehlermaskenwert von der ECC-Einheit und einem Null-Wert auswählt, zumindest ein Ausschließlich-ODER-Gatter, welches einen Eingang des CRC-Schieberegisters mit dem über Ausschließlich-ODER mit dem gewonnenen Fehlermaskenwert von der ECC-Einheit verknüpften CRC-Schieberegisterwert versorgt, wobei der Komparator vergleicht: den durch den CRC-Restwertgenerator erzeugten CRC-Restwert und den CRC-Restwert, der durch das CRC-Schiebeabgleichsmodul erzeugt wurde, wobei das CRC-Abgleichsmodul aufweist: eine Mehrzahl von Zeigern auf Verschachtelungsfehlerzahlen, welche eine Anzahl von Fehlereinträgen verfolgen, die für die Verarbeitung durch das CRC-Abgleichsmodul in jeder Verschachtelung verbleiben, einen Bytezähler, welcher verfolgt, welches Byte das CRC-Abgleichsmodul gerade verarbeitet, einen Verschachtelungszeiger, welcher verfolgt, auf welchen Verschachtelungsfehlerblock das CRC-Abgleichsmodul gerade von der ECC-Einheit zugreift, und ein CRC-Fehlerflag, welches anzeigt, daß der CRC-Restwert, der durch den CRC-Restwertgenerator erzeugt wurde, und der CRC-Restwert, der durch das CRC-Schieberegister erzeugt wurde, sich innerhalb des Abgleichmoduls unterscheiden.
  11. System nach Anspruch 10, wobei das CRC-Abgleichsmodul dafür ausgelegt ist, Sektoren unterschiedlicher Länge mit variablen Daten, CRC- und ECC-Bytelängen zu verarbeiten.
  12. Verfahren zum Überprüfen einer oder mehrerer Korrekturen, welche durch eine Fehlerkorrektureinheit an einem Bytesektor vorgenommen wurden, der von einer Platte in einem Plattenlaufwerk gelesen wurde, mit: Lesen des Bytesektors in die ECC-Einheiten und in eine Einheit zur zyklischen Redundanzüberprüfung (CRC-Einheit), Erzeugen eines ersten CRC-Fehlerrestwerts aus dem Bytesektor von dem Plattenlaufwerk, wobei der erste CRC-Fehlerrestwert einen Wert hat, welcher von den Fehlern in dem Bytesektor abhängt, Erfassen und Korrigieren wahrgenommener Fehler in dem Bytesektor in der ECC-Einheit und Erzeugen von Fehlerdaten aus der ECC-Einheit, welche Positionen und Werte der korrigierten, wahrgenommenen Fehler wiedergeben, Erzeugen eines zweiten CRC-Restwerts unter Verwendung der Fehlerdaten aus der ECC-Einheit und Vergleichen des ersten CRC-Restwerts mit dem zweiten CRC-Restwert, und Verwerfen des aktuellen Sektors, der von dem Festplattenlaufwerk gelesen wurde, ohne ihn an einen Hostcomputer zu senden, und Versuchen eines weiteren Lesevorgangs desselben Sektors, falls der erste CRC-Restwert und der zweite CRC-Restwert verschieden sind.
  13. Verfahren nach Anspruch 12, welches weiterhin aufweist: gleichzeitiges Lesen des Bytesektors in die CRC-Einheit und die ECC.
  14. Verfahren nach Anspruch 12, welches weiterhin aufweist: Verwerfen des von dem Plattenlaufwerk aktuell gelesenen Sektors, ohne ihn an einen Hostcomputer zu senden, und Versuchen eines weiteren Lesevorgangs desselben Sektors, wenn die durch die ECC-Einheit erfaßten Fehler nicht korrigierbar sind.
  15. System nach Anspruch 1, wobei die CRC-Einheit den Bytesektor von der Festplatte näherungsweise zur gleichen Zeit empfängt wie die ECC-Einheit diesen Sektor empfängt.
DE69926511T 1998-05-27 1999-05-27 Schaltung und verfahren zum schnellen prüfen von fehlerkorrekturkoden mit hilfe einer zyklischen redundanzprüfung Expired - Lifetime DE69926511T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US8576598A 1998-05-27 1998-05-27
US85765 1998-05-27
PCT/US1999/011819 WO1999062182A1 (en) 1998-05-27 1999-05-27 Circuit and method for rapid checking of error correction codes using cyclic redundancy check

Publications (2)

Publication Number Publication Date
DE69926511D1 DE69926511D1 (de) 2005-09-08
DE69926511T2 true DE69926511T2 (de) 2006-06-01

Family

ID=22193796

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69926511T Expired - Lifetime DE69926511T2 (de) 1998-05-27 1999-05-27 Schaltung und verfahren zum schnellen prüfen von fehlerkorrekturkoden mit hilfe einer zyklischen redundanzprüfung

Country Status (7)

Country Link
EP (1) EP1090462B1 (de)
JP (1) JP2002517060A (de)
AT (1) ATE301345T1 (de)
AU (1) AU4214299A (de)
CA (1) CA2333386A1 (de)
DE (1) DE69926511T2 (de)
WO (1) WO1999062182A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007136026A1 (ja) * 2006-05-19 2007-11-29 Bml, Inc. 抗原タンパク質の定量方法及び定量用キット
US7500170B2 (en) * 2006-08-14 2009-03-03 Motorola, Inc. Method and apparatus for error detection in a data block
US11940872B2 (en) 2022-04-21 2024-03-26 Analog Devices International Unlimited Company Error correction code validation

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1992013344A1 (en) * 1991-01-22 1992-08-06 Fujitsu Limited Error correction processing device and error correction method
US5602857A (en) * 1993-09-21 1997-02-11 Cirrus Logic, Inc. Error correction method and apparatus
US5491701A (en) * 1993-11-04 1996-02-13 Cirrus Logic, Inc. Burst error corrector
US5691994A (en) * 1995-05-08 1997-11-25 Western Digital Corporation Disk drive with fast error correction validation

Also Published As

Publication number Publication date
DE69926511D1 (de) 2005-09-08
EP1090462A4 (de) 2002-01-02
EP1090462B1 (de) 2005-08-03
CA2333386A1 (en) 1999-12-02
ATE301345T1 (de) 2005-08-15
AU4214299A (en) 1999-12-13
WO1999062182A1 (en) 1999-12-02
JP2002517060A (ja) 2002-06-11
EP1090462A1 (de) 2001-04-11

Similar Documents

Publication Publication Date Title
DE69910320T2 (de) Technik für Einzelfehlerkorrektur im Cachespeicher mit Subblock-Paritätenbits
DE60117066T2 (de) Verfahren und Vorrichtung zum Überprüfen von fehlerkorrigierenden Codes
DE10133595B4 (de) Pufferschaltung, Speicherzugriffsverfahren und Reed-Solomon-Decoder
DE102013017179B4 (de) DMA-Integritätsprüfungseinheit
DE19882853B3 (de) Verfahren und Steuereinrichtung zum automatischen Korrigieren von in einem Speichersubsystem erfassten Fehlern und Computersystem, das eine solche Steuereinrichtung aufweist
DE102012214324B4 (de) Verfahren und Vorrichtung zur Erleichterung der Datenüberprüfung mithilfe einer Prüfsumme in Verbindung mit einem Sidefile
DE2806024C2 (de)
DE4423949A1 (de) E/A-Hilfssystem und Exklusiv-Steuerverfahren, Datenspeicherverfahren und Speicherinitialisierungsverfahren in einem E/A-Hilfssystem
DE3128740A1 (de) Dynamisches halbleiter-speichersystem
DE112014002403B4 (de) Hochleistungs-Lese-Modifizier-Schreib-System mit Zeilenratenzusammenführung von Datenrahmensegmenten in Hardware
DE2225841B2 (de) Verfahren und Anordnung zur systematischen Fehlerprüfung eines monolithischen Halbleiterspeichers
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
EP0282877B1 (de) Verfahren und Einrichtung zur Steuerung der Fehlerkorrektur innerhalb einer Datenübertragungssteuerung bei von bewegten peripheren Speichern, insbesondere Plattenspeichern, eines Datenverarbeitungssystems gelesenen Daten
DE102007007546A1 (de) Fehlerkorrekturcode-Striping
EP1924916A2 (de) Speicheranordnung und betriebsverfahren dafür
DE60215687T2 (de) Fehlerkorrektion von multibit-baueinheiten mit unbeschränkter erkennung von doppelfehlern
DE69926511T2 (de) Schaltung und verfahren zum schnellen prüfen von fehlerkorrekturkoden mit hilfe einer zyklischen redundanzprüfung
DE112006000349T5 (de) Kombinierter Befehls- und Datencode
DE69729598T2 (de) Verfahren und Vorrichtung zur Adressenparitätsprüfung für mehrfache überlappende Addressbereiche auf einem gemeinsamen Bus
EP1915686A2 (de) Verfahren und vorrichtung zur festlegung eines startzustandes bei einem rechnersystem mit wenigstens zwei ausführungseinheiten durch markieren von registern
DE69630326T2 (de) Informationsspeicherungssteuerungsgerät
DE10340236B4 (de) Anordnung mit einer Datenverarbeitungseinrichtung und einem Speicher
DE2742881C2 (de)
DE3937389C2 (de)
DE102018122482A1 (de) Halbleiter-Speichermodul, Halbleiter-Speichersystem und Verfahren zum Zugreifen auf ein Halbleiter-Speichermodul

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: MARVELL WORLD TRADE LTD., ST. MICHAEL, BB

8328 Change in the person/name/address of the agent

Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER,