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.
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?
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.