# Ublox GPS checksum in Oshonsoft BASIC

#### camerart

Joined Feb 25, 2013
3,176
Hi,
I'm trying to set-up and READ SPI NMEA sentences from a NEO-M8 GPS, in Oshonsoft BASIC.

on Page 171, 32.4 There is a calculation section explaining how to calculate the checksum, but I can't quite understand it, can anyone help please?
Cheers, Camerart

Mod: Page Clip.E

Last edited by a moderator:

#### camerart

Joined Feb 25, 2013
3,176
I thought the checksum was a simple XOR?

https://nmeachecksum.eqth.net/
Hi U,
Thanks for the calculator.
I tried a couple of known examples, and the checksums were different. It's possible that I didn't use it correctly.

What I'm trying to do is send the relevent BYTE STRINGS from the [ u-blox M8 Receiver description Including protocol specification PDF] and receive NMEA sentences.
I can see the example calculation shown, but not understand it.
C

#### nsaspook

Joined Aug 27, 2009
10,426
https://www.ietf.org/rfc/rfc1145.txt
APPENDIX I: The 8-bit Fletcher Checksum Algorithm

The 8-bit Fletcher Checksum Algorithm is calculated over a sequence
of data octets (call them D[1] through D[N]) by maintaining 2
unsigned 1's-complement 8-bit accumulators A and B whose contents are
initially zero, and performing the following loop where i ranges from
1 to N:

A := A + D
B := B + A

It can be shown that at the end of the loop A will contain the 8-bit
1's complement sum of all octets in the datagram, and that B will

Zweig & Partridge [Page 3]

RFC 1145 TCP Alternate Checksum Options February 1990

contain (N)D[1] + (N-1)D[2] + ... + D[N].

The octets covered by this algorithm should be the same as those over
which the standard TCP checksum calculation is performed, with the
D[13]. Note that, for purposes of the checksum computation, the
checksum field itself must be equal to zero.

At the end of the loop, the A goes in the first byte of the TCP
checksum and B goes in the second byte.

Note that, unlike the OSI version of the Fletcher checksum, this
checksum is 0.

There are a number of much faster algorithms for calculating the two
[Sklower89], [Nakassis88] and [Fletcher82]. Naturally, any
computation which computes the same number as would be calculated by
the loop above may be used to calculate the checksum. One advantage
of the Fletcher algorithms over the standard TCP checksum algorithm
is the ability to detect the transposition of octets/words of any
size within a datagram.

#### camerart

Joined Feb 25, 2013
3,176
Hi N,
Thanks for the text.
Again, it seems I've drifted into a complicated world, and the example in the D/S was only a few lines.
===================================
CK_A = 0, CK_B = 0
For(I=0;I<N;I++)
{
CK_A = CK_A + Buffer
CK_B = CK_B + CK_A
}
=================================
EDIT: Looking again at the D/S, it does say fletchers!
C

#### upand_at_them

Joined May 15, 2010
940
Hi U,
Thanks for the calculator.
I tried a couple of known examples, and the checksums were different. It's possible that I didn't use it correctly.

What I'm trying to do is send the relevent BYTE STRINGS from the [ u-blox M8 Receiver description Including protocol specification PDF] and receive NMEA sentences.
I can see the example calculation shown, but not understand it.
C
I have an old GPS log file and I ran a couple of the sentences through that calculator and got the correct checksum for each. Post an example of your data.

#### camerart

Joined Feb 25, 2013
3,176
I have an old GPS log file and I ran a couple of the sentences through that calculator and got the correct checksum for each. Post an example of your data.
Hi U,
Here is an example from the PDF, I posted in #1.
C

#### Attachments

• 152.2 KB Views: 7

#### upand_at_them

Joined May 15, 2010
940
I mean the actual data coming out of the uBlox unit.

#### camerart

Joined Feb 25, 2013
3,176
I mean the actual data coming out of the uBlox unit.
Hi U,
I think we have a misunderstanding, I am trying to send messages as in the last post, in order to receive \$NMEA sentences, that arrive from the GPS complete with their checksum.

If it possible to convert:
===================================
CK_A = 0, CK_B = 0
For(I=0;I<N;I++)
{
CK_A = CK_A + Buffer
CK_B = CK_B + CK_A
}
=================================

into BASIC, job done.
Thanks for trying,
C

#### upand_at_them

Joined May 15, 2010
940
Sorry, my mistake.

#### camerart

Joined Feb 25, 2013
3,176
Sorry, my mistake.
Hi U,
That's ok, at least you tried, thanks.
I also posted on a computer forum, and they came back with this:
==========================================
N = 10
Buffer = 1
CK_A = 0
CK_B = 0
For i = 0 to N step 1
CK_A = CK_A + Buffer
CK_B = CK_B + CK_A
Next i
==============================================
He had to add 'N' and 'BUFFER' to get it to work.
I assume that 'N' is the number of BYTEs in the string, I'm not sure about buffer.
I'll try a few things with example, and see what happens.
C

#### jjw

Joined Dec 24, 2013
784
Hi U,
That's ok, at least you tried, thanks.
I also posted on a computer forum, and they came back with this:
==========================================
N = 10
Buffer = 1
CK_A = 0
CK_B = 0
For i = 0 to N step 1
CK_A = CK_A + Buffer
CK_B = CK_B + CK_A
Next i
==============================================
He had to add 'N' and 'BUFFER' to get it to work.
I assume that 'N' is the number of BYTEs in the string, I'm not sure about buffer.
I'll try a few things with example, and see what happens.
C
I guess it should be Buffer(i) inside the loop, where Buffer is an Array for the message ( payload)

Last edited:

#### camerart

Joined Feb 25, 2013
3,176
I guess it should be Buffer(i) inside the loop, where Buffer is an Array for the message ( payload)
Hi J,
Ok, thanks, I'll try that.
C

#### camerart

Joined Feb 25, 2013
3,176
Hi,
Before adding the CODE in #15, I am trying to get a response from the NEO-8 using long hand.
I have joined bits from other programs that seem correct, but I don't think it quite right. Can someone check if I'm on the right lines please?

I'm trying to SEND '0xB5,0x62,0x0A,0x04,0x00,0x00,0x0E,0x34' (which is the version) and should illicit a response from the NEO-8
Here is my CODE:
C.

Last edited:

#### jjw

Joined Dec 24, 2013
784
Why don't you post the code?

#### camerart

Joined Feb 25, 2013
3,176
Why don't you post the code?
Hi J and s,
I tried posting the CODE as an insert and as an attachment, but I wasn't allowed. I've had this before, and thought that as long as it wasn't a BAS file and posted as a TXT file, it would work.
I'll see if I can give permission.
EDIT: Try to open the link, I think it should open
Cheers, C.

Last edited:

#### camerart

Joined Feb 25, 2013
3,176
Hi,
Testing

E
Morning E,
If you're testing an actual module, I would like to see a photo please. So far I haven't seen one with the D_SEL, CS and CLK connections, I had to add them to my board.
Cheers, E.