Technologie   • Technologie •

< Technologie


> Intro

> Polynom

• Berechnung

> Beispiele


 

— FCS (CRC): Berechnung —

Berechnungsschleife

Im HDLC Rahmen des PPP werden alle Datenbytes dem FCB zugeführt, ausgenommen Rahmen Start- und Endbyte (FE hex). Das berechnete FCS Byte wird vom Sender unmittelbar vor dem Rahmen Endbyte eingefügt und zwar zuerst das niedrigwertige Byte gefolgt vom höherwertigen. Der Empfänger berücksichtigt diese beiden Bytes bei der Berechnung. Das Endresultat muss der «good value» (guter Wert) F0B8 (ef-Null-Be-Acht) entsprechen.

Am Anfang ist der Tabellenwert unbestimmt. Die Berechnung beginnt immer mit der «initial value» (Startwert) von FFFF. Der Sender berücksichtigt die Bytes für die Berechnung des FCS bevor diese eingekapselt (encapsulated) werden. Daraus folgt, dass der Empfänger das Escape-Byte (FD hex) überspringen und den Wert von 20 hex vom eingekapselten Byte subtrahieren muss, bevor es für die Berechnung an die FCS Routine weiter geleitet werden darf.

Die Berechnungsschleife Schritt für Schritt

  1. Startwert «initial table value» auf FFFF hex setzen.
     
  2. Ein Datenbyte «data byte» holen.
     
  3. Exclusive-OR Datenbyte «data byte» mit dem niererwertigen Byte des Starttabellenwertes «initial table value». Damit erhält man den Zeiger in die Tabelle «pointer».
     
  4. Lese den Zwei-Byte Wert «table value» aus der Tabelle, auf welchen der Zeiger «pointer» in Schritt 3 zeigt.
     
  5. Das niederwertige Byte des Tabellenwertes «table value» mit dem höherwertigen Byte des Tabellenstartwertes «initial table value» exklusiv odern (XOR).
     
  6. Speichern des Wertes, welcher aus dem höherwertigen Bytes aus dem Tabellenwert «table value» und dem niedrigwertigen Byte des Resultats aus dem XORen in Scritt 5 entstand als neuer Starttabellenwert «initial table value».
     
  7. Gehe zu Schritt 2 und wiederhole den Prozess für alle Datenbytes.
     

Sender

  1. Bestimmen des Einer-Komplements des letzten Starttabellenwertes «initial table value».
     
  2. Speichern des niedrigwertigen Bytes des komplementierten Starttabellenwertes «initial table value» am Ende aller Datenbytes «data bytes», dann das höherwertige Byte speichern.
     

Empfänger

  1. Durchlaufe die Schleife zweimal mehr um beide FCS Bytes mit einzubeziehen.
     
  2. Vergleiche das Schlussresultat mit dem guten Wert «good value» von F0B8.
     

Die Berechnungsschleife in 80x86 Assembler

Persönlich finde ich jeweils ein Assembler Fragment den einleuchtendste Teil einer Dokumentation.

fcs:  mov  ds:si,DataBuf     ;start of data buffer
      mov  cx,BufLen         ;length of buffer
      mov  dx,0ffffh         ;initial table value
;
fcs1: xor  ax,ax             ;clear register
      mov  al,[si]           ;get data byte
      xor  al,dl             ;xor data byte with low byte of
                             ;initial table value
      shl  ax,1              ;pointer x 2 since table entries
                             ;are 2 bytes (16 bits)
      mov  bx,ax             ;save pointer into table
      mov  ax,[DataBuf + bx] ;read table value (word)
      xor  al,dh             ;xor low byte of table entry with
                             ;high byte of initial table value
      mov  dx,ax             ;store result as new initial table
                             ;value
      inc  si                ;point to next byte in DataBuf
      dec  cx                ;decrement length counter
      jnz  fcs1              ;repeat until all bytes done (cx=0)
;
;
xmtr: xor  dx,0ffffh         ;one's complement
      mov  [si],dl           ;store low byte of result after last
                             ;data byte
      inc  si                ;point to next byte in DataBuf
      mov [si],dh            ;store high byte of result
;
;
rcvr: mov  ax,0f0b8h         ;load good value into register
      cmp  ax,dx             ;compare against FCS
      jnz  error             ;if no match, error handling
;
      

Die Berechnungschleife grafisch

Hier ist eine ungewöhnliche Darstellung des FCS oder jedes CRC Berechnungsablaufs. Die Zahlen folgen nicht jenen der «Die Berechnungsschleife Schritt für Schritt» weiter oben. Die eliptischen Kästen stellen die Prozessor Register des 80x86 dar, der rechteckige Kasten die Tabelle.

grafische Darstellung

In der eher unüblichen Darstellung oben den Nummern entweder der Sendeseite (TX) oder der Empfangsseite (Rx) folgen.

 
  © 2004 - 2018 by Horo Wernli.