- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: CRC-16 Prüfsumme für serielle Übertragung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.11.2004
    Ort
    Wernigerode
    Alter
    44
    Beiträge
    51

    CRC-16 Prüfsumme für serielle Übertragung

    Anzeige

    Powerstation Test
    Hallo,

    ich Suche nach ner bereits implementierten Lösung für WinAVR C, die eine 16bit CRC Prüfsumme berechnet.
    Ich muss ganz ehrlich sagen, so richtig hab ich das Verfahren mit der Polynomdivision nicht verstanden. Ist eigendlich auch nicht Teil meiner Aufgabe.
    Hat jemand von euch schon mal mit CRC-Prüfsummen bei der Seriellen kommunikation gearbeitet?
    Ich habe auch von einem Algorithmus gelesen, bei dem nicht dividiert wird wo nur Verschiebeoperationen eingesetzt weren. (in meinen Augen besser für den AVR geeignet)

    Danke schon im Voraus
    MFG

    Bomb

  2. #2

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.11.2004
    Ort
    Wernigerode
    Alter
    44
    Beiträge
    51
    Danke Robert,

    jetzt muss ich das nur noch verstehen... und für ne Zeichenfolge adaptieren.Diese ganzen shiftereien zu kapieren ist nicht so einfach..
    MFG

    Bomb

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Schau doch einfach mal in den bei WinAVR mitgelieferten Bibiliotheken.
    Mit der crc16.h solltest du glücklich werden . Viel fertiger implementiert wirst du es nicht mehr bekommen ...

    Man muss einfach nur noch die Funktion _crc16_update(); aufrufen. Schau dir am besten mal die Doku dazu an...

    MfG Kjion

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    09.11.2004
    Ort
    Wernigerode
    Alter
    44
    Beiträge
    51
    Hallo danke
    habs gefunden, aber das scheint auch wieder 'nur' ne crc über ein ein byte zu legen. Ich möchte aber, sagen wir mal 64 bytes, nacheinander übertragen und zum Schluss ne crc über das gesendete Paket mitgeben.
    Das ist erforderlich für das modbus Protokoll.

    edit: oder bedeutet das Update immer, dass die Methode mit dem letzten crc Stand für das neue Zeichen aufgerufen wird?
    MFG

    Bomb

  6. #6
    Gast
    Ja, das geht immer so weiter mfg

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    09.11.2004
    Ort
    Wernigerode
    Alter
    44
    Beiträge
    51
    hehe dann ist ja gut
    Wo ihr schon soviel zu CRC'S wisst. Habt Ihr zufällig das gleiche auch noch für C#?
    Wo findet Ihr denn die Beispiele? Ich bin bei WinAVR überhaupt nicht auf CRC's gestoßen.
    MFG

    Bomb

  8. #8
    KlausConzelmann
    Gast
    Hallo,

    ich bin auf der Suche nach dem Source zum Bilden des 16 Bit-CRC (CRC16) mit unterschiedlichen Polynomen. Die Polynome sollten vorgebbar sein (z.B. X16+X15+X2+1, X16+X12+X5+1 ....).
    Der Einsatz einer Tabelle oder Teil-Tabelle ist dafür wohl nicht so
    geeignet. Es sei denn sie wird auch generiert.
    Hat jemand ein solches Programm parat oder weis wo ein solches zu
    finden ist. Ich benötige dies in einer Microcontroller-Anwendung mit
    dem 8051 und zur Überprüfung mit dem PC.

    Danke für die Hilfe

    Klaus

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    09.11.2004
    Ort
    Wernigerode
    Alter
    44
    Beiträge
    51
    Code:
    uint16_t crc_xmodem_update (uint16_t crc, int8_t daten){
    	crc = crc ^ ((uint16_t)daten << 8);
    	for (int i=0; i<8; i++)
    	{
    		if (crc & 0x8000)
    			crc = (crc << 1) ^ 0x1021;
    		else
    			crc <<= 1;
    	}
    	return crc;
    }
    0x1021 ist das polynom theoretisch müsstest du für deinen fall nur dein polynom anpassen
    0xc003 wäre X16+X15+X2+1 bzw. 1100000000000011
    für den exponenten einfach das entsprechende bit. in dem 16bit hexwert setzen. das müsste man automatisieren können. über die eingabe der hexzahl könntest du dann halt das zu grunde liegende polynom ändern.
    MFG

    Bomb

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus