LabVIEWForum.de - CRC Berechnung CAN

LabVIEWForum.de

Normale Version: CRC Berechnung CAN
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich versuche seit ein paar Tagen die CRC Prüfsumme einer übertragenen CAN Nachricht in Labview zu rekonstruieren. Ich benutze das Polynom P(x) = x15+ x14+ x10+ x8+ x7+ x4+ x3+ x0 (0xC599). Ich hab einige funktionierende Vi's zur CRC-16 berechnung, mir ist es nur nicht bis jetzt gelungen eine Lösung für mein Problem zu finden.

Mein derzeitiges Programm ist für CRC-16 funktionierendes Programm wo ich nur das Polynom geändert habe.

[Bild: CRC_C599.png]

Eingabe Daten: 800100
Erwartete CRC Prüfsumme: 4B5A Laut http://ghsi.de/CRC/index.php?Polynom=110...age=800100 und meinem Oszilloskop.

Falls mir eventuell jemand weiterhelfen kann würde ich mich freuen.

Englische Version Crosspost
Offtopic2
Bitte selbstständig auf CROSSPOSTING hinweisen (vgl. LVF-Regeln).

Danke, Jens
Schau mal hier:
http://forums.ni.com/t5/LabVIEW/how-to-a...-p/2380590
Beitrag 2 verweist auf ein PDF, da wird die korrekte CRC15 Berechnung erklärt.

Gruß, Jens
Smile Vielen Dank, den Eintrag hatte ich auch schon gefunden. In C hab ich auch eine funktionierende Lösung, mir fehlt nur die Implementierung in LabVIEW.

Code:
#include <stdio.h>
#include <stdint.h>

uint16_t can_crc_next(uint16_t crc, uint8_t data)
{
    uint8_t i, j;

    crc ^= (uint16_t)data << 7;

    for (i = 0; i < 8; i++) {
        crc <<= 1;
        if (crc & 0x8000) {
            crc ^= 0xc599;
        }
    }

    return crc & 0x7fff;
}

int main()
{
    int i;
    uint8_t data[] = {0x80, 0x01, 0x00};
    uint16_t crc;

    crc = 0;

    for (i = 0; i < sizeof(data); i++) {
        crc = can_crc_next(crc, data[i]);
    }

    printf("%x\n", crc);
}
C Code
Und in LabVIEW hast du schon fast den Teil aus dem Bosch-PDF umgesetzt, mit einem kleinen, aber feinen Unterschied...
Code:
CRC_RG(14:0) = CRC_RG(14:0) EXOR (4599hex);
Gruß, Jens
Referenz-URLs