Forum: Mikrocontroller und Digitale Elektronik CRC Polynom für EnDAT Encoder


von BetaEffect (Gast)


Angehängte Dateien:

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.

von martin (Gast)


Angehängte Dateien:

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?

von Falk B. (falk)


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.

von Georg (Gast)


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

von Hp M. (nachtmix)


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

von Georg A. (georga)


Lesenswert?

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

https://reveng.sourceforge.io/

Wenn du drei verschiedene Messages hast, hat er das in kürzester Zeit.

von Bürovorsteher (Gast)


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...).

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.