-
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.