CRC Polynom für EnDAT Encoder

Gast #6637786
Lesenswert?

Hallo,
ich suche schon seit Langem nach dem CRC-Polynom für das EnDAT Portokoll 
der Firma Heidenhain.
Ich habe das EnDAT Protokoll auf einem FPGA implementiert und möchte 
abschließend noch die Prüfsumme berechnen, um einen möglichen 
Übertragungsfehler zu erkennen.

In allen Dokumenten, die ich bisher gefunden habe, wird sich jedoch über 
das CRC-Polynom ausgeschwiegen. Es wird immer nur erwähnt, dass eine CRC 
Prüfsumme mit 5 Bit am Ende mitübertragen wird.

Auch in Sourcecodes z.B. von Ti, wo dieses Protokoll umgesetzt ist finde 
ich das Polynom nicht.

Ich habe noch das Datenblatt zum EnDAT Protokoll mit angehängt.

Anderfalls: kennt jemand eine Möglichkeit das Polynom zurückzurechnen. 
Ich kann ja den gesamten Bitstream inkl. CRC auslesen.

Ich bin für jede Hilfe dankbar.
Angehängte Dateien:
Gast #6637826
Lesenswert?

2008 habe ich in meiner Bachelor-Arbeit eine Auswerteschaltung für 
EnDat-Geber mittels Atmega gebaut. Die CRC-Berechnung habe ich damals 
anhand der EnDat Spezifikation in Assembler implementiert... Aber ein 
explizites Polynom habe ich in meinen Unterlagen auch nirgends gefunden. 
Möglicherweise liegt das daran, dass es von Seiten Heidenhain in 
Hardware implementiert wurde?
Über den Startwert der Flipflops müsste sich das Polynom doch irgendwie 
ermitteln lassen, oder?
Angehängte Dateien:
#6637860
Lesenswert?

martin schrieb:
> Über den Startwert der Flipflops müsste sich das Polynom doch irgendwie
> ermitteln lassen, oder?

Oder. Die XOR-Verknüpfungen bestimmen das Polynom.

http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html

Wenn man dein Bild anschaut, sieht man.

- Bits 0, 1, und 3 werden mit XOR verknüpft

Daraus entsteht das Polynom 01011 bzw. 0xB. Man muss beachten, daß das 
Register zur CRC-Berechung mit 0xFF vorgeladen wird. Ebenso die 
Schieberichtung der Daten.
Gast #6638332
Lesenswert?

Falk B. schrieb:
> Die XOR-Verknüpfungen bestimmen das Polynom

Im Prinzip sind das Polynom und die Schieberegisterschaltung 2 
Betrachtungsweisen für die gleiche Funktion. Man muss sich daher nicht 
unbedingt mit dem Polynom befassen, um eine Funktion zu programmieren, 
man kann auch von der Schaltung ausgehen und in Software nachbilden, was 
bei einem Taktzyklus in der Schaltung passiert. Schieben und XOR gibt es 
ja auch in Assembler.

Das habe ich vor rund 40 Jahren so gemacht für Floppy-Controller, es gab 
einen Schaltungsvorschlag von BASF für die CRC-Erzeugung mit TTL-ICs 
(passend zu 8-Zoll-Laufwerken). Von Polynomen war nicht die Rede.

Georg
#6638360
Lesenswert?

BetaEffect schrieb:
> Auch in Sourcecodes z.B. von Ti, wo dieses Protokoll umgesetzt ist finde
> ich das Polynom nicht.

So furchtbar viele 5-Bit Polynome gibt es ja nicht.

Aus diesem Codeschnipsel der TI-Dokumentation, wie die LUT initialisiert 
wird
1
2.3.3.4 PM EnDat22 Library Function Details
2
PM_endat22_generateCRCTable
3
Directions:
4
This function generates table of 256 entries for a given CRC polynomial (polynomial) with specified
5
number of bits (nBits). Generated tables are stored at the address specified by pTable.
6

7
Definition:
8
void PM_endat22_generateCRCTable(uint16_t nBits, uint16_t polynomial, uint16_t *pTable)
9

10
Usage:
11
#define NBITS_POLY1 5
12
#define POLY1 0x0B
13
#define SIZEOFTABLE 256
14
uint16_t table1[SIZEOFTABLE];
15
// Generate table for poly 1
16
PM_endat22_generateCRCTable(
17
NBITS_POLY1,
18
POLY1,
19
table1);
entnehme ich, dass die XORs bei 0x0B sitzen, und dieses Generatorpolynom 
gehört zu CRC-5-ITU

x^5 + x^4 + x^2 + 1

Details kannst du hier nachlesen: 
https://en.wikipedia.org/wiki/Cyclic_redundancy_check
Gast #6639190
Lesenswert?

Die Beschreibung im ersten Betrag enthält ungefähr nur 5% der 
notwendigen Informationen zu EnDat2.1 und 2.2.
Für die Auswerteelektronik EIB741 von H. gab es bis November vorigen 
Jahres noch eine recht tiefgehende HW/SW-Beschreibung zum Gerät auf der 
Webseite.
Irgendwie ist die zwischenzeitlich verschwunden, aus welchen Gründen 
auch immer. Die EIB741 ist die HW-Plattform für Steuerungsentwickler.
Ich müsste diese Beschreibung noch auf meinem Rechner im Office haben, 
obwohl das Projekt geplatzt ist (vllt auch besser so...).
(Firma: Starfleet) #8060551
Lesenswert?

So furchtbar viele 5-Bit Polynome gibt es ja nicht.

Eben, so etwa 2^5 = 32, wobei für CRC nur die Maximum-length-polynome interessieren. Für eine hervorragende Auflistung nach Hamming-Distanz (HD) und Polynomlänge schaue man mal bei der Carnegie Mellon Universität nach: https://users.ece.cmu.edu/~koopman/crc/

und findet dort 0x12 (HD=2 und 3) und 0x15 (HD=4).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren