CRC-Checksumme SAE J1850 mercedes CAN bus, салонный кан передаются данные , в некоторых (критичных) id в конце контролька crc-8 SAE J1850 c которой все предельно ясно , вот пример:
40 C2 8F A0 AA 00 97 CF ;
40 C0 8F A0 AA 00 A7 09 ;
40 C0 8F A0 AA 00 B7 C4 ;
40 C0 8F A0 AA 00 C7 9D ;
40 C0 8F A0 AA 00 D7 50 ;
40 C0 8F A0 AA 00 E7 1A ;
40 C0 8F A0 AA 00 F7 D7 ;
40 C0 8F A0 AA 00 07 A8 ;
40 C0 8F 58 55 00 17 39 ;
40 C0 8F 58 55 00 27 73 ;
40 C0 8F 58 55 00 37 BE ;
40 C0 8F 58 55 00 47 E7 ;
40 C0 8F 58 55 00 57 2A ;
40 C0 8F 58 55 00 67 60 ;
40 C0 8F 58 55 00 77 AD ;
40 C0 8F 58 55 00 87 D2 ;
40 C0 8F 58 55 00 97 1F ;
40 C0 8F 58 55 00 A7 55 ;
40 C0 8F 58 55 00 B7 98 ;
40 C0 8F 58 55 00 C7 C1 ;
40 C0 8F 58 55 00 D7 0C ;
считал вот так:
----------------------------------------------------------
;************************************************* *******************
;----------------------------------------------------------
CalcCrcSaeJ1850:
PUSH.D W0
PUSH.D W2
;----------------------------
PUSH DCOUNT
PUSH DOSTARTH
PUSH DOSTARTL
PUSH DOENDH
PUSH DOENDL
;----------------------------
CLR.B CrcSaeJ1850
MOV CrcSaeJ1850Ptr, W1
MOV #0x06, W3
;----------------------------
DO W3, CalcCrcSaeJ1850End
MOV.B [W1++], W0
;----------------------------
XOR.B CrcSaeJ1850
MOV #0x3B, W0; C4^FF=3B
;------------------
BTSC.B CrcSaeJ1850, #0
XOR.B #0x1D, W0; poly<, c=0
BTSC.B CrcSaeJ1850, #1
XOR.B #0x3A, W0; poly<, c=0
BTSC.B CrcSaeJ1850, #2
XOR.B #0x74, W0; poly<, c=0
BTSC.B CrcSaeJ1850, #3
XOR.B #0xE8, W0; poly<, c=1,^poly
BTSC.B CrcSaeJ1850, #4
XOR.B #0xCD, W0; poly<, c=1,^poly
BTSC.B CrcSaeJ1850, #5
XOR.B #0x87, W0; poly<, c=1,^poly
BTSC.B CrcSaeJ1850, #6
XOR.B #0x13, W0; poly<, c=0
BTSC.B CrcSaeJ1850, #7
XOR.B #0x26, W0; poly<, c=0
;------------------
MOV.B WREG, CrcSaeJ1850
;------------------
CalcCrcSaeJ1850End:
NOP
;----------------------------
POP DOENDL
POP DOENDH
POP DOSTARTL
POP DOSTARTH
POP DCOUNT
;----------------------------
POP.D W2
POP.D W0
RETURN
;----------------------------------------------------------
;************************************************* *******************
;----------------------------------------------------------
после 2014 года с выходом новых моделей, обновили всю архитектуру обмена данными, с этим проблем нет (есть заводская база данных)
если контролька была раньше в 8м байте, то теперь перенесли и запихали ее в 1й байт, ну это тоже как бы хрен с ним.
в базе контрольку они обзывают:
CRC-Checksumme der Signal Group gemäß SAE J1850
считаем с2го-8й, кладем в первый и все сходится с родными пакетами.
но в некоторых id , в базе контрольку обзывают еще с каким-то Signal Group ID :
CRC-Checksumme der Signal Group gemäß SAE J1850 {Signal Group ID 2Bh}
пример:
07 09 40 0C 06 00 00 00 ;
BD 0A 40 0C 06 00 00 00 ;
20 0B 40 0C 06 00 00 00 ;
D4 0C 40 0C 06 00 00 00 ;
49 0D 40 0C 06 00 00 00 ;
F3 0E 40 0C 06 00 00 00 ;
6E 0F 40 0C 06 00 00 00 ;
06 00 40 0C 06 00 00 00 ;
9B 01 40 0C 06 00 00 00 ;
21 02 40 0C 06 00 00 00 ;
BC 03 40 0C 06 00 00 00 ;
48 04 40 0C 06 00 00 00 ;
D5 05 40 0C 06 00 00 00 ;
6F 06 40 0C 06 00 00 00 ;
F2 07 40 0C 06 00 00 00 ;
9A 08 40 0C 06 00 00 00 ;
07 09 40 0C 06 00 00 00 ;
и естественно в этих пакетах контролька не совпадает с расчетной по sae1850 crc-8 , приведенной выше.
пока только ясно что при вычислении контрольки еще учавствует Signal Group ID 2Bh, уже подставлял (наращивал) эти 2b и в начало и в конец пакета, и ксорил, ..... в самых разных вариантах, пока мысли кончились........
жду помощи от клуба.