AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CRC-Prüfsumme erzeugen

Ein Thema von Elko · begonnen am 11. Sep 2008 · letzter Beitrag vom 12. Sep 2008
Antwort Antwort
Elko

Registriert seit: 2. Feb 2008
52 Beiträge
 
Delphi 7 Personal
 
#1

CRC-Prüfsumme erzeugen

  Alt 11. Sep 2008, 22:28
Hallo Leute!
Ich habe wieder einmal ein mehr oder weniger großes Problem: Ich lese Daten mit meinem Mikroprozessor ein und bekomme als letztes Byte eine CRC-Prüfsumme geschickt. In dem Datenblatt des Sendern (ist ein Temperatursensor; DS1822) steht als CRC-Polynom X^8+x^5+x^4+1.
Ich habe das als binäre Folge von 100110001 interpretiert, jedoch komme ich irgenwie gar nicht weiter und komme auf keine Lösung, wenn ich versuche, die Daten mit der CRC-PRüfsumme zu vergleichen.
Hier die Daten, die ich geschickt bekomme:

(MSB) DF00 0000 1FF8 E322 (LSB)

Dabei stellt das Byte "DF" die Prüfsumme dar, die aus den vorigen 56 Bit generiert wurde.
Kann mir jemand weiterhelfen? Wäre echt cool, denn ich finde auch per Google nix, was mir das plausibel erklären kann...

Viele Grüße,
Elko
Keyboard not found. Press any key to continue.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: CRC-Prüfsumme erzeugen

  Alt 11. Sep 2008, 22:30
CRC
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Elko

Registriert seit: 2. Feb 2008
52 Beiträge
 
Delphi 7 Personal
 
#3

Re: CRC-Prüfsumme erzeugen

  Alt 11. Sep 2008, 22:35
Hm, wie gesagt, ich hab schon gegollgelt, aber auch der Artikel bei Wikipedia hilft mir nicht so wirklich weiter: Bei mir wird ja z.B. die CRC-Summe an den Anfang angehängt, müsste ich also von Anfang an die einzelnen Bits mit der Bitkombination 1 0011 0001 bitweise mit xor verknüpfen?

Gruß,
Elko
Keyboard not found. Press any key to continue.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: CRC-Prüfsumme erzeugen

  Alt 11. Sep 2008, 22:41
Nee, die Berechnung mußt du beim 2ten Byte beginnen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

Re: CRC-Prüfsumme erzeugen

  Alt 12. Sep 2008, 23:14
Das ist ein bekannter CRC-Algorithmus CRC-8/Dallas-1-Wire. Du mußt die Bytes mit den LSB zuerst eingegen. Also bei Dir werden die Bytes $22,$E3,$F8,$1F,$00,$00,$00 in dieser Reihenfolge verarbeiten. Hier ist das vollständige Beispiel mit meinen CRC-Model-Units:
Delphi-Quellcode:
{$ifdef win32}
{$apptype console}
{$endif}
uses
  mem_util,crcmodel,crcm_cat;
const
  test: array[0..6] of byte = ($22,$E3,$F8,$1F,$00,$00,$00);
var
  ctx: TCRC_ctx;
  crc: longint;
begin
  cm_Create(CRC8_DALLAS1W,nil,ctx);
  cm_Full(ctx, CRC, @test, sizeof(test));
  writeln(ctx.name,'(',HexStr(@test, sizeof(test)),')=$',HexByte(CRC));
end.
Ausgabe: CRC-8/Dallas-1-Wire(22e3f81f000000)=$df

Die Units gibts als Opensource-Freeware via http://home.netsurf.de/wolfgang.ehrh....html#crcmodel


Gruß Gammatester
  Mit Zitat antworten Zitat
Elko

Registriert seit: 2. Feb 2008
52 Beiträge
 
Delphi 7 Personal
 
#6

Re: CRC-Prüfsumme erzeugen

  Alt 12. Sep 2008, 23:22
Hallo,
ich habe versucht, das per Hand mal durchzurechnen, aber da kommt bei mir nur Müll raus... leider... aber egal, ich habe das Problem -nach längerem Nachvollziehen der Hardware-Lösung- jetzt so gelöst:

Prinzip siehe hier.

Code:
unsigned char i, j, input, bit, crc, polynom, sernum[7];
crc=0;
polynom=0x131;

sernum[0]=0x22;
sernum[1]=0xE3;
sernum[2]=0xF8;
sernum[3]=0x1F;
sernum[4]=0x00;
sernum[5]=0x00;
sernum[6]=0x00;



for(i=0;i<7;i++){
    for(j=0;j<8;j++){
        input = (sernum[i]>>j) & (0x01);
        bit = (crc & 0x01)^input;
        crc ^= (bit<<4) | (bit<<3);
        crc >>= 1;
        crc |= bit<<7;
    }
}

printf("Die CRC-Pruefsumme lautet: %x", crc);
Da kommt dann auch anständig DF (nicht "Das Delphi-Forum") raus Yippiiiie!

Oh, danke für den Beitrag eben, gammatester! Dann kann ich jetzt also auch mit den entsprechenden Units das ganze mit Delphi machen (habe es momentan in C für nen USB-Chip geschrieben)


Viele Grüße,
Elko
Keyboard not found. Press any key to continue.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz