www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC-16 mit M32C über 126 Byte Blöcke


Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich arbeite mit einem Renesas M32C85 Controller, der CRC Register
integriert hat. D.h. man schreibt jeweils ein Byte in das CRCIN
register und nach 2 Takten liegt angeblich in CRCD der dazugehörige
CRC-16 (CCITT oder wie das poly heisst) wert.

wäre ja schön, wenn dies so wäre... leider kenne ich mich damit gar
nicht aus und mit 2 seiten im manual isses auch alles recht knapp
beschrieben.
hat damit jemand schon was gemacht?

meine hauptfrage besteht darin:
ich möchte 128 byte blöcke in einem EEPROM per page write speichern;
würde also gerne 126 byte daten mit dem CRC-16 sichern (=>128byte).
kann ich das CRCIN register so bedienen, dass ich 126 byte nacheinander
reinschiebe und der controller mir nach dem 126ten eine 16bit CRC zu
diesem block liefert?!?

danke im voraus!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne die Funktion des Controllers zu kennen, liegt freilich folgendes
Vorgehen nahe:
- Polynom (CCCIT/CRC16/...) definieren wenn möglich/nötig.
- CRC-Akkumulator initialisieren (0 oder ~0, je nach Polynom).
- Alle Bytes reinschieben.
- Akkumulierte CRC rausholen.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

danke erst mal. zu deinem post:
Polynom kann aus 3 standard polynomen gewählt werden, wobei ich das
normale CCCIT CRC-16 nehmen werde (einstellbar über 2 register bits).
CRC-Akku lässt sich ebenfalls initialisieren (0000 oder FFFF).
aber dann weiss ich halt nicht, ob ich einfach meine 126 Bytes
nacheinander in das 8 bit breite CRCIN register schieben kann (16
bittige CRC wert sollte dann in CRCD liegen), oder wie das überhaupt
funzt. müsste ja eigentlich auch eine maximale anzahl von bytes geben,
die man da sinnvoller weisse mit einem CRC-16 sichern kann, oder?!

hier mal der link zu dem (>3mb) datenblatt und die beschreibung der CRC
calculation (Seite 289-290):

http://eu.renesas.com/fmwk.jsp?cnt=Documentation.j...

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu dem link:
2ter von oben
...Hardware Manual

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nu, passt doch. Das Polynom scheint festgelegt zu sein (wo sind die 2
Bits?). Anonsten wie oben beschrieben, CRCD = "CRC-Akku", mit 0
initialisieren, die Datenbytes nach CRCIN schieben, danach berechnete
CRC in CRCD abholen. Und nicht schneller als 1 Byte alle 2 Takte, wenn
das beim M32c überhaupt geht.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die bits zum CRC setting stehen woanders, heissen aber CRC0 und CRC1 in
irgendeinem register. is ja auch egal...

also du verstehst das auch so, dass ich initialisiere, dann 126 mal 1
byte nacheinander reinschiebe und dann den CRC-16 wert zu diesen 126
byte in CRCD liegen habe!?
da muss man aber sicherlich noch ein bit setzen (CRC transmit oder
ähnlich) nach jedem byte... da muss ich noch mal schauen...

aber danke erst mal!

noch was:
kannst du da auch irgenwie erkennen, wie das ganze beim lesen, oder
verifizieren der rückgelesenen 128 byte später klappen soll?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sachte, CRC0/CRC1 gehören zu einer ganz anderen Baustelle/Schnittstelle,
haben hiermit nichts zu tun. Serielle Schnittstellen haben ihre eigenen
CRC-Generatoren.

Lesen/Schreiben ist hinsichtlich der CRC der gleiche Vorgang. Wobei
manche CRCs die Eigenheit haben, dass man beim Emfang den gesamten
Block mitsamt der empfangenen CRC reinschiebt, und bei korrekten Daten
anschliessend 0 rauskriegt. Aber ob man das nun so macht, oder schlicht
die CRCs vergleich, macht kaum einen Unterschied.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Apropos: Kann es sein, dass Du mit dem M32c die Latte etwas arg hoch
gelegt hast?

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke dir. hast recht... die anderen register gehören woanders hin...
sorry, aber die "Latte" habe leider nicht ich so hoch gelegt, sondern
die ist vorgegeben, da ich nur ein klitzekleines teil des ganzen
programmiere.
soweit komme ich mit dem aber auch klar. nur das mit dem CRC ist mir
nicht ganz klar geworden in dem manual.
danke dir noch mal!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.