![]() |
• Technologie • | |
|---|---|---|
> Intro > Polynom • Berechnung |
— 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
Sender
Empfänger
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. In der eher unüblichen Darstellung oben den Nummern entweder der Sendeseite (TX) oder der Empfangsseite (Rx) folgen. |
|
© 2004 - 2018 by Horo Wernli. |
||