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

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