Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
cpm:crc [2011/09/01 17:30] – volkerp | cpm:crc [2013/12/16 16:10] – volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== CRC-Berechnung ====== | ====== CRC-Berechnung ====== | ||
- | In diversen U880-Programmen, | + | In diversen U880-Programmen, |
CRC-CCITT (CRC-16) x^16 + x^12 + x^5 + 1 | CRC-CCITT (CRC-16) x^16 + x^12 + x^5 + 1 | ||
Zeile 49: | Zeile 49: | ||
Normalerweise werden CRC-Polynome mit reverser Bit-Reihenfolge berechnet; auch die einzelnen Bytes werden in umgekehrter Reihenfolge abgearbeitet. Und richtig optimal wird es erst mit vorbrechneten Tabellen... | Normalerweise werden CRC-Polynome mit reverser Bit-Reihenfolge berechnet; auch die einzelnen Bytes werden in umgekehrter Reihenfolge abgearbeitet. Und richtig optimal wird es erst mit vorbrechneten Tabellen... | ||
- | In Assembler sieht die CRC-Routine wie folgt aus. Die Berechnung ist optimiert und erfolgt tetradenweise. | + | In Assembler sieht die CRC-Routine wie folgt aus. Die Berechnung ist optimiert und erfolgt tetradenweise. |
in: DE = Startadr., BC = Länge\\ | in: DE = Startadr., BC = Länge\\ | ||
Zeile 92: | Zeile 92: | ||
</ | </ | ||
- | s.a. http:// | + | s.a. |
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ===== Hardware ===== | ||
+ | |||
+ | aus mc 1984/07 | ||
+ | |||
+ | CRC ist die Abkürzung für Cyclic Redundancy | ||
+ | Check und so etwas ähnliches | ||
+ | wie eine Prüfsumme, darf aber damit | ||
+ | nicht verwechselt werden, da die Erzeugung | ||
+ | des CRC aufwendiger ist. Dabei | ||
+ | werden nicht einfach die einzelnen Bytes | ||
+ | aufaddiert, sondern verschiedene | ||
+ | Bits gemäß einem sogenannten Generator- | ||
+ | Polynom. Es gibt dabei sehr unterschiedliche | ||
+ | Vorschriften, | ||
+ | man bei den gängigen Controllern | ||
+ | das vom CCITT definierte Polynom. | ||
+ | Es lautet G(x) = 1 + x^5 + x^12 + x^16. | ||
+ | Daraus kann man eine Schaltung konstruieren, | ||
+ | die etwa wie in Bild 16 aussieht. | ||
+ | Ein Reset-Eingang sorgt dafür, daß | ||
+ | das Schieberegister auf einen definierten | ||
+ | Wert gesetzt werden kann. Dann werden | ||
+ | der Eingang FREI auf 1 gelegt und zusammen | ||
+ | mit einem Takt die Daten an E | ||
+ | angelegt. Nach dem Ende des Datenstroms | ||
+ | wird FREI auf 0 gelegt, und die | ||
+ | CRC-Bytes können aus dem Register geschoben | ||
+ | werden. Um nun einen Datenstrom | ||
+ | zu testen, wird genauso wie vorher | ||
+ | verfahren, nur daß nun auch die | ||
+ | CRC-Bytes mitverrechnet werden. Das | ||
+ | Ergebnis im Schieberegister muß anschließend | ||
+ | 0 sein. | ||
+ | |||
+ | {{: | ||
+ |