Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert der CRC-check gegen 0


von Davos R. (richmand)


Lesenswert?

Hi. Ich habe folgendes Problem. Und zwar möchte ich zur Datensicherheit 
innerhalb eines CAN-Netzwerkes eine zusätzliche CRC einfügen. Zur 
Generierung der CRC verwende ich folgenden Algorithmus:

static uint16 get_crc(uint8 *bufp, uint32 buflen, uint32 polynom)
{
    uint32 crc;
    int n;


    crc = 0;
    for ( ; buflen > 0; buflen--, bufp++)
    {
        crc += (uint32)(*bufp << 16);

        for (n=0; n<8; n++)
        {
            if (crc & 0x00000001)
            {
                crc ^= polynom;
            }
            crc >>= 1;
        }
    }
    return ((uint16)crc);
}

Wie kann ich denn jetzt, quasi am anderen Ende, testen, ob die CRC 
richtig ist. Gibt es da nicht einen Test gegen 0, bei dem mit Sicherheit 
gewährleistet ist, dass die übertragenen Daten konsitent sind? Irgendwie 
blick ich bei dem CRC generieren nicht so richtig durch.

MfG

von Stefan E. (sternst)


Lesenswert?

Du musst die CRC mitsenden, und der Empfänger vergleicht dann die CRCs 
(die Mitgesendete mit der selbst Berechneten).

von Davos R. (richmand)


Lesenswert?

Also berechnet der Empfänger ebenfalls eine CRC und zieht dann die 
empfangene davon ab und bei einem Ergebnis von 0 stimmen beide überein?

von ... .. (docean) Benutzerseite


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Davos Rit schrieb:
> Also berechnet der Empfänger ebenfalls eine CRC und zieht dann die
> empfangene davon ab und bei einem Ergebnis von 0 stimmen beide überein?

Du brauchst nichts abziehen.
Der CRC ist so konstruiert, dass der Empfänger ebenfalls seine CRC 
mitrechnet. Soweit stimmt es noch. Aber wenn er dann das CRC Byte 
empfängt und dieses CRC Byte in seine eigene Berechnung noch mit 
einfliessen lässt, dann kommt 0 raus.

Du schiebst einfach nur das Datenpaket (inklusive der gesendeten CRC) im 
Empfänger durch den CRC Algorithmus durch und das Ergebnis davon muss 0 
sein.

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.