www.mikrocontroller.net

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


Autor: Jürgen H. (juergen75)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: avr tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jürgen H. (juergen75)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vielen Dank !

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

Autor: 0fh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß...

Autor: 0fh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so... hier noch eine gute Seite dazu:

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

Autor: Jürgen H. (juergen75)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: 0fh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen H. (juergen75)
Datum:

Bewertung
0 lesenswert
nicht 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-...

Bildung der Prüfsumme
Zur Bildung der Prüfsumme werden die uncodierten Bytes herangezogen. 
Alle Bytes werden addiert, dann wird diese Summe von 0 abgezogen, 
was bei mehren Bytes typischerweise eine grosse negative Zahl ergibt, 
die ihrerseits mehrere Bytes füllt. Von dieser Zahl, bzw. ihren 
Ablagebytes ist nur der Teil interessant, welcher sich in dem niedrigsten
 Byte der Ablage befindet. Dieser Teil entspricht der gesuchten Prüfsumme.

Beispiel: die 6 zu übertragenden Bytes mögen 8A | 4C | 39 | 56 | 9B | C3 
lauten. Dann ergibt sich die Prüfsumme aus der Rechnung ...
0-( 8A+ 4C + 39 + 56 + 9B + C3) = 0- 8A - 4C - 39 - 56 - 9B - C2 = FD3C

Ohne weitere Rechnung lässt sich die Prüfsumme als 3C ermitteln, denn FD3C
 benötigt zwei Bytes in der Ablage und in dem niederwertigen Byte soll sich
 die Prüfsumme befinden. Dies wäre dann 3C.
Die Moduloberechnung ergäbe das gleiche Ergebnis, denn die Restwertrechnung ..
FD3Ch mod 100h fragt nach dem Rest der Division von FD3Ch : 100h was 
ebenfalls 3Ch ergibt. In FD3Ch ist 100h genau FDh mal enthalten, als Rest 
bleibt 3Ch. 

was ist das dann ?

Autor: Konstantin R. (kribel)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: bascom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.