LabVIEWForum.de
CRC Berechnung CAN - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: CRC Berechnung CAN (/Thread-CRC-Berechnung-CAN)



CRC Berechnung CAN - qweisCAN - 22.07.2015 14:50

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=1100010110011001&Message=800100 und meinem Oszilloskop.

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

Englische Version Crosspost


RE: CRC Berechnung CAN - jg - 22.07.2015 15:42

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

Danke, Jens


RE: CRC Berechnung CAN - jg - 22.07.2015 17:15

Schau mal hier:
http://forums.ni.com/t5/LabVIEW/how-to-add-15-bit-can-crc-calculation-to-labview-polynom-is-x15/td-p/2380590
Beitrag 2 verweist auf ein PDF, da wird die korrekte CRC15 Berechnung erklärt.

Gruß, Jens


RE: CRC Berechnung CAN - qweisCAN - 22.07.2015 17:27

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


RE: CRC Berechnung CAN - jg - 22.07.2015 18:59

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