0,0,1,1// SBC=1 (Gray: 3) ** 1ste and 2te Fixed bits
15
// nicht drin
16
};
17
18
std::uint32_treceivedCRC_17=0x1A049;
ABER... wenn ich es selber ausrechne, ich bekomme immer CRC_17 =
**0xAD5** statt **0x1A049** wie es in CANoe ausgegeben wurde (siehe
CANoe Screenshot).
Für die Berechnung habe ich alle Bits genommen, wie in die ISO
vorgeschrieben ist [Seite 33]: SOF, Arbitration field, Control Field, no
Data Field (DLC = 0), dynamischen Stuff Bits ohne Fixed Stuff Bits und
SBC Feld [Stuff Bits Count] - siehe bitsForCalculation Code oben.
Basis der Kalkulation ist das Polynom CRC_17 = 0x3685B
(Bin:110110100001011011). Hier einen Link wo man es online rechnen kann
**
(https://asecuritysite.com/comms/crc_div?a=1010101010&b=10001) **
Ich bitte um Hiiiilfe!!! Ich weiss nicht mehr was ich noch falsch mache
oder ob ich etwas vergesse!
Vielen Dank im Vorab!
PS: Die msgReceived hat sogar EOF Recessive Bits am Ende, die sollen
aber für die Berrechnung fällig irrelevant sein.
Gruß,
Ed
Man muss beachten dass der Startwert für die CRC Berechnung nicht wie
beim normalen CAN 0x0 ist sondern das MSB gesetzt hat. dann kommt
0x1A049 anstelle 0x00AD5 als CRC raus.
Dieter schrieb:> Man muss beachten dass der Startwert für die CRC Berechnung nicht wie> beim normalen CAN 0x0 ist sondern das MSB gesetzt hat. dann kommt> 0x1A049 anstelle 0x00AD5 als CRC raus.
Hallo Dieter,
Vielen Dank für die Antwort. Wenn ich das richtig verstanden habe, soll
ich folgende array nehmen?:
1
std::uint8_tbitsForCalculation[24]={
2
1,0,1,1,0,0,1,0,1,// BASE-ID = 0x165
3
0,// RRS Bit
4
0,// IDE Bit
5
1,// FDF Bit
6
0,// res Bit
7
0,// BRS Bit
8
0,// ESI Bit
9
0,0,1,0,0,// DLC=0 (1x dynamisch Stuff Bit)
10
0,0,1,1// SBC=1 (Gray: 3) ** 1ste and 2te Fixed bits
11
// nicht drin
12
};
Wenn **NEIN**, ein bisschen Licht in dieser Dunkelheit bitte!!
Wenn **JA**, ich verstehe trotzdem nicht, da ich immer noch die 0x0AD5
bekomme.
Ich habe es sogar mit Ihrer Anmerkung händisch gemacht (siehe Bild)...
und ich bekomme immer dasselbe Ergebnis :-(
Ich weiss, dass es evtl. eine dumme Kleinigkeit ist, aber ich sehe es
nicht...
Für die CRC Berechnung wird der Wert der CRC mit einem Startwert
initialisiert. In der von Dir verlinkten Webseite mit der CRC Berechnung
sehe ich keine Möglichkeit den Startwert einzugeben (das wird dann
vermutlich immer 0x0 sein ohne es jetzt geprüft zu haben). Für die
CAN-FD CRC braucht man aber einen Startwert der CRC mit gesetztem MSB,
also hilft die Webseite nicht weiter.
Bei diesem CRC Online Calculator kann man den Startwert für die CRC
vorgeben:
https://leventozturk.com/engineering/crc/
Polxnomial: 110110100001011011
Input Data: 000101100101001000001000011
Initialise: 110000000000000000 (oder 000000000000000000 für 0xAD5)
Der Wert "110000000000000000" ist nötig weil man hier 18 Bit für das
Register eingibt.
Dieter schrieb:> Bei diesem CRC Online Calculator kann man den Startwert für die CRC> vorgeben:>> https://leventozturk.com/engineering/crc/>> Polxnomial: 110110100001011011> Input Data: 000101100101001000001000011> Initialise: 110000000000000000 (oder 000000000000000000 für 0xAD5)>> Der Wert "110000000000000000" ist nötig weil man hier 18 Bit für das> Register eingibt.
Vielen Dank Dieter,
Du hast mir wirklich weitergeholfen. Es war die "Kleinigkeit" der
CRC_INIT_VECTOR, dass ich übergesehen habe.