Forum: Mikrocontroller und Digitale Elektronik HEX XOR CRC Checksumme suche Infos


von Jürgen H. (juergen75)


Lesenswert?

Hallo,

gibt es eine Infoseite wo man HEX Formate usw. auch als Anfänger kapiert 
?

Ich kenn mich null aus damit.

Welches Format oder Darstellung ist das zb.: 80 04 bf 11 01 2b  und wie 
errechnet man dazu die checksumme ?

Wie würde z.B. "Hallo" in diesem Format aussehen ? Gibt es dafür einen 
Umwandler ?

Klar, für den einen oder anderen ist das logisch aber ich finde keinen 
Weg da mal was zu lernen.

Vielen Dank schon mal !

M.f.G.
Jürgen

von avr tester (Gast)


Lesenswert?


von Falk (Gast)


Lesenswert?


von Jürgen H. (juergen75)


Lesenswert?

ok, vielen Dank !

Die Tabelle ist optimal, aber wie man die checksumme errechnet hab ich 
noch nicht geschnallt ;-(

von 0fh (Gast)


Lesenswert?

Hallo Jürgen,

ich habe selbst auch ein bisschen Zeit gebraucht um mich mit dem 
berechnen der CRC anzufreunden. Also: Für jede CRC gibt es ein 
Generator-Polynom.

Das von Ethernet ist sehr lang, es beginnt mit x^32 und hat viele 
weitere x hoch irgendwas. Das vom ISDN D-Kanal kann man noch 
hinschreiben:

x^16 + x^12 + x^5 + 1

Nun wird jedes vorhandene "x hoch irgendwas" eine 1, bzw. für nicht 
vorhandene ein Null notiert. Daraus folgt bei dem ISDN Polynom vom Grad 
16 (Grad = höchste Potenz):

10001000000100001.

Nun werden an das Ausgangsdatenwort so viele Nullen angehängt, wie der 
Grad des Polynoms beträgt (sprich hier 16 Nullen anhängen, bei Ethernet 
32).

Als nächstes erfolgt die Berechnung. Dabei rechnet man im sogenannten 
Galois Körper. Was das ist, ist eigentlich egal... Fakt ist, man muss 
das Datenwort, mit den angehängten Nullen durch das Generatorpolynom 
teilen.
Dabei wird beim subtrahieren ein XOR benutzt.

Also mal eine komplette Bsp.-Rechnung mit einem kürzeren Polynom:

Generatorpolynom: x^2+1 => 101 (Grad 2)
Nutzdaten: 10101101 => wegen Grad 2, zwei Nullen dran: 1010110100

Nun wie in der Schule:

1010110100 : 101 = 10001110
101
---
 000
 000
 ---
  001
  000
  ---
   011
   000
   ---
    110
    101
    ---
     111
     101
     ---
      100
      101
      ---
       010
       000
       ---
        10

Evtl. ist aufgefallen, das ich 100 - 101 (also biteise XOR) genommen 
habe. Das darf man aber tatsächlich machen. Wichtig ist hier, dass das 
erste Bit eine 1 ist. Als Rest bleibt schließlich eine 10!

Diese 10 wird nun an die zu übertragenden Nutzdaten angehängt =>
10101101 | 10

So... zur Übung kannst du jetzt 10101101 | 10 mal durch ds Generator 
Polynom teilen. Wenn du alles richtig machst kommt als Rest 00. Das 
heißt dann, das kein(e) Bit(s) unterwegs gekippt sind. Viel Spaß...

von 0fh (Gast)


Lesenswert?

Ach so... hier noch eine gute Seite dazu:

http://www.flechtmann.net/crc/index.php

von Jürgen H. (juergen75)


Lesenswert?

uiuiui da wird wird mein Kopf noch öfters rauchen :-)

naja, werd ich schon noch checken...

Gibt es für Bascom einen script wie man sowas auch ausrechnen lassen 
kann ?
Wichtig ist für mich dieses 2-stellen HEX Format wie ich es oben schon 
erwähnt habe.

M.f.G.
Jürgen

von 0fh (Gast)


Lesenswert?

Auf der Wikipedia Seite stehen einige Codebeispiele, evtl. helfen die 
weiter.
Zum "zweitstelligen Hexformat": Normal denken und arbeiten alle 
Rechnersysteme binär, also nur mit 1 oder 0.

Um Buchstaben binär zu codieren wird wie oben erwähnt meistens die ASCII 
Tabelle verwendet.

Dein H,a,l,l,o wäre also ein:
01001000, 01100001, 01101100, 01101100, 01101111.

Da binär nicht so kompakt zu schreiben ist, greift man auf die 
hexadezimale Schreibweise zurück. Hier gibt es 0-F (also 
0,1,2,3,4,5,6,7,8,9, 10 (A), 11(B), 12 (C), 13 (D), 14 (E) und 15 (F)) 
als Symbol .

Von binär nach hex (und umgekehrt) kann man einen einfachen Trick 
anwenden:
Vier Binärstellen bilden immer eine Hexstelle. Also für das Hallo:

   0100 1000, 0110 0001, 0110 1100, 0110 1100, 0110 1111
=>  4     8     6    1     6    C     6    C     6    F
=> 48 61 6C 6C 6F

Um deine Eingangsfrage voll zu beantworten: Man kann selbstverständlich 
für das ASCII/binärkodierte "Hallo" auch die CRC Prüfsumme berechnen. 
Ich habe den Rechner im vorherigen Post mit dem binären Hallo als 
Nutzdaten und dem Generatorpolynom vom Grad 16 aus dem vorherigen Post 
gefüttert.

Das Nutzdatenwort war:

01001000, 01100001, 01101100, 01101100, 01101111

Nach der Division bleibt ein Rest von:
1010010001101001

Also: CRC Prüfsumme anhängen und nochmal in Hex hinschreiben:

0100,1000,0110,0001,0110,1100,0110,1100,0110,1111 | 1010,0100,0110,1001
48 61 6C 6C 6F | A4 69

von Jürgen H. (juergen75)


Lesenswert?

hey super, jetzt bin ich um einiges schlauer. Vielen vielen dank für die 
ausführlich Erklärung (so das ich es auch verstehe).

Jetzt muß ich nur doch die Sache mit der Prüfsumme "üben"

Ich hab zu dem Thema noch was gefunden:
http://www.goblack.de/desy/mc8051chip/ide8051/dos-ide/d51Tx_5.htm

1
Bildung der Prüfsumme
2
Zur Bildung der Prüfsumme werden die uncodierten Bytes herangezogen. 
3
Alle Bytes werden addiert, dann wird diese Summe von 0 abgezogen, 
4
was bei mehren Bytes typischerweise eine grosse negative Zahl ergibt, 
5
die ihrerseits mehrere Bytes füllt. Von dieser Zahl, bzw. ihren 
6
Ablagebytes ist nur der Teil interessant, welcher sich in dem niedrigsten
7
 Byte der Ablage befindet. Dieser Teil entspricht der gesuchten Prüfsumme.
8
9
Beispiel: die 6 zu übertragenden Bytes mögen 8A | 4C | 39 | 56 | 9B | C3 
10
lauten. Dann ergibt sich die Prüfsumme aus der Rechnung ...
11
0-( 8A+ 4C + 39 + 56 + 9B + C3) = 0- 8A - 4C - 39 - 56 - 9B - C2 = FD3C
12
13
Ohne weitere Rechnung lässt sich die Prüfsumme als 3C ermitteln, denn FD3C
14
 benötigt zwei Bytes in der Ablage und in dem niederwertigen Byte soll sich
15
 die Prüfsumme befinden. Dies wäre dann 3C.
16
Die Moduloberechnung ergäbe das gleiche Ergebnis, denn die Restwertrechnung ..
17
FD3Ch mod 100h fragt nach dem Rest der Division von FD3Ch : 100h was 
18
ebenfalls 3Ch ergibt. In FD3Ch ist 100h genau FDh mal enthalten, als Rest 
19
bleibt 3Ch.

was ist das dann ?

von Konstantin R. (kribel)


Lesenswert?

0fh wrote:
> So... zur Übung kannst du jetzt 10101101 | 10 mal durch ds Generator
> Polynom teilen. Wenn du alles richtig machst kommt als Rest 00. Das
> heißt dann, das kein(e) Bit(s) unterwegs gekippt sind. Viel Spaß...

Kannst du bitte die Formel zu Überprüfung der Daten genauer erklären?

Ist es etwa 10101101 / (10 * Generatorpolynom)?

von bascom (Gast)


Lesenswert?

@Jürgen H.

Ar(1) = 1
Ar(2) = 2
Ar(3) = 3


J = Crc8(ar(1) , 3)                                         'calculate 
value which is 216
W = Crc16(ar(1) , 3)                                        '24881
L = Crc32(ar(1) , 3)                                        '494976085

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.