|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2013
Messaggi: 1
|
Calcolo del CRC16 CCITT
Buongiorno a tutti.
Sono nuovo del forum e vi ringrazio già per l'aiuto. Sto uscendo pazzo. Sono un programmatore c++ e python. Lavoro in ambiente linux (uso debian da molti anni). Sto lavorando ad un software in python per la comunicazione di dati con un lettore rfid. Tale lettore rfid attraverso comunicazione seriale mi trasferisce il seguente pacchetto: 22 00 1f 00 0f 00 01 00 19 01 0b 00 00 00 00 80 21 ff 5a 68 36 04 0f 0b 0d 10 2b 0d 00 00 1e 0f ba 0b Da quello che è scritto nella documentazione gli ultimi due byte (ba 0b) sono il risultato del CRC (avente come polinomio generatore x^16,x^12,x^5,x^0) Il primo byte (22) indica che che il pacchetto è di 34 byte e la casa madre del lettore mi ha detto che tale valore è compreso nel calcolo (quindi il calcolo comprende i primi 32 byte). Purtroppo pero' i conti non tornano. La casa madre mi ha dato una funzione in c#. Peccato che nel mio lavoro, anche se ho installato windows, non uso visual studio. In questo sito potete vedere quello che la mia funzione in python mi ritorna: http://ghsi.de/CRC/index.php?Polynom...0d+00+00+1e+0f Mentre la funzione che mi hanno fornito in c# è la seguente: protected int CalcCRC16CheckSum(byte[] cBuffer, int iBufLen, ref byte LSB, ref byte MSB) { uint wPolynom = 0x8408; uint wPreset = 0xFFFF; int i, j; uint wCrc = wPreset; //WORD for (i = 0; i < iBufLen; i++) { wCrc ^= cBuffer[i]; for (j = 0; j < 8; j++) { if ((wCrc & 0x0001) == 1) wCrc = (uint)((wCrc >> 1) ^ wPolynom); else wCrc = (uint)(wCrc >> 1); } } LSB = (byte)(wCrc & 0xFF); MSB = (byte)((wCrc & 0xFF00) / 256); return (int)wCrc; } Prego a chiunque di darmi una mano. Non so dove sbaglio. Purtoppo sono in stallo e la scadenza si avvicina. Max |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Ciao,
Hai provato a far girare la loro funzione usando mono? che protocollo RFID usate? 14000-7? Mi sa che il crc e' calcolato solo sul pacchetto di dati, quindi non sull'intestazione!
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:02.



















