MS5611 - CRC Berechnung

OP #3160306
Lesenswert?
• ▲
▼
Hallo Leute,

Es hat doch bestimmt jemand einen MS5611 Drucksensor im Einsatz?

Ich bekomme die CRC Prüfung der Koeffizienten partout nicht hin.

Von der Adresse 7 (0xAE) lese ich 0x1C18 aus dem PROM.
Laut Datenblatt sollen dort 4 bit CRC enthalten sein.
Wenn ich mir das Codebeispiel anschaue, setzt sich das letzte Byte aus 4 
Nullen und eben dem 4 CRC bits zusammen.
Nur passt da weder 0x1C noch 0x18 in das Muster!

Kann mir jemand dabei helfen?
Wäre schön - Danke.
OP #3160666
Lesenswert?
• ▲
▼
Hm danke Kaplic,

aber natürlich habe ich beide Dokumente schon studiert!
Und schnödes Kopieren ist erstens nicht mein Stil und entfällt, weil ich 
die CRC engine des Mikros benutzen will.

Also die Frage war, ob mir jemand sagen kann, welcher Wert sein Sensor 
auf der Adresse 7 "serial code and CRC" gespeichert hat?

Danke
OP #3161110
Lesenswert?
• ▲
▼
Oder vielleicht kann mir jemand sagen, welchem CRC Polynom folgender 
Algorithmus entspicht:

ich dachte es ist x^1 +1

1
     for (cnt = 0; cnt < 16; cnt++)     // operation is performed on bytes
2
     { // choose LSB or MSB
3

4
          if (cnt%2==1) n_rem ^= (unsigned short) ((n_prom[cnt>>1]) & 0x00FF);
5
          else n_rem ^= (unsigned short) (n_prom[cnt>>1]>>8);
6

7
          for (n_bit = 8; n_bit > 0; n_bit--)
8
          {
9
               if (n_rem & (0x8000))
10
               {
11
                    n_rem = (n_rem << 1) ^ 0x3000;
12
               }
13
               else
14
               {
15
                    n_rem = (n_rem << 1);
16
               }
17
          }
18
     }
19
     n_rem= (0x000F & (n_rem >> 12));   // final 4-bit reminder is CRC code
Gast #3167344
Lesenswert?
• ▲
▼
Welcher Wert bei anderen Chips auf Adresse 7 steht, ist doch egal und 
hilft Dir nicht weiter. Die CRC mit der Engine des Micros zu berechnen, 
wenn Du die schon mit dem Beispielcode nicht hinbekommst, wird das 
Problem auch nicht lösen. Da die CRC auch nur einmalig berechnet wird, 
macht das auch keinen Sinn.
Nimm mal meinen Code von 
https://github.com/AeroQuad/AeroQuad/blob/development/Libraries/AQ_BarometricSensor/BarometricSensor_MS5611.h 
um zu sehen, dass der MS5611 ok ist, danach kannst Du das ja immer noch 
anders machen.
OP #3169866
Lesenswert?
• ▲
▼
CRC ist ok, wenn ich den Beispielcode laufen lasse.

Das mit der CRC engine vom Mikro ist mehr so als Übung gedacht.
Hat keinen nennenswerten Vorteil, ich weiß.
Der code sieht halt eleganter aus (es wären nur 5 Zeilen).

Mich irritiert halt der Aufbau des LSB auf Adresse 7.

Es heißt: die letzten 4 bit sind der CRC code und bei der Berechnung ist 
das letzte Byte null zu setzten.
Wie zum Teufel kommt dann 0x18 zustande (0b0001 1000)?

Wieso ist das vierte bit gesetzt (0x10)?
Aber sicherlich läuft das unter der Kategorie - don't care.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.