How to calculate the checksum?

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi,

how can I calculate the checksum (CRC-16) from the byte[] I retrieve from a
hardware device through the RS232 serial port?

Christian
 
Christian said:
how can I calculate the checksum (CRC-16) from the byte[] I retrieve from a
hardware device through the RS232 serial port?

I have some CRC-16 code on the shelf.

I fact I have more than one version.

Do you have some sample data and an expected result to
help determine which ?

Arne
 
Hi Arne,

thanks for your help. I have the following informations:

<Sync_1 = 0x81> 8 DATA-BITS No Parity
<Sync_2 = 0x82> 8 DATA-BITS No Parity
<Cksum> = Telegramm<[pos_Sync_1]> XOR . XOR . XOR ... [<pos_Sync_2-2>]
<Cmd> = Command to modem

|<--- CheckSum : --------------- XOR ------------------->|
<Sync_1>, <DEV_ADR>, <Cmd>, <OPTION>, [<DATA>], <Chksum>, <Sync_2>

Hope this helps.
Christian

Arne Vajhøj said:
Christian said:
how can I calculate the checksum (CRC-16) from the byte[] I retrieve from a
hardware device through the RS232 serial port?

I have some CRC-16 code on the shelf.

I fact I have more than one version.

Do you have some sample data and an expected result to
help determine which ?

Arne
 
Christian Havel said:
Hi Arne,

thanks for your help. I have the following informations:

<Sync_1 = 0x81> 8 DATA-BITS No Parity
<Sync_2 = 0x82> 8 DATA-BITS No Parity
<Cksum> = Telegramm<[pos_Sync_1]> XOR . XOR . XOR ... [<pos_Sync_2-2>]
<Cmd> = Command to modem

|<--- CheckSum : --------------- XOR ------------------->|
<Sync_1>, <DEV_ADR>, <Cmd>, <OPTION>, [<DATA>], <Chksum>, <Sync_2>

It depends on what sort of CRC it is.

For most serial protocols it is based on the table driven one in x/y/zmodem
source code. However that isn't the correct CRC value for an ethernet packet
OR an SDLC/HDLC comms protocol.

You could use
http://sourceforge.net/projects/classlesshasher/?format=raw

which contains more CRC variants than I've encountered in the wild but most
comms protocols tend to use the one contained in FCS16.

I suspect from your code that actually you just want to XOR all the bytes in
the data together.

Without a sample data packet (or sample source code) it's nearly impossible
to tell if you've got it right. When I first did the ethernet one I ended up
hand decoding a packet on an oscilloscope screen to see exactly what was
transmitted!

Peter
 
Christian said:
thanks for your help. I have the following informations:

<Sync_1 = 0x81> 8 DATA-BITS No Parity
<Sync_2 = 0x82> 8 DATA-BITS No Parity
<Cksum> = Telegramm<[pos_Sync_1]> XOR . XOR . XOR ... [<pos_Sync_2-2>]
<Cmd> = Command to modem

|<--- CheckSum : --------------- XOR ------------------->|
<Sync_1>, <DEV_ADR>, <Cmd>, <OPTION>, [<DATA>], <Chksum>, <Sync_2>

Hope this helps.

That is not sample data and sample checksum.

It looks more as simple XOR than CRC.

But without more specific information everything will just
be guesswork.

Arne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top