Not Getting "FIXED" with F9P and NEO-D9S

Has anyone had success getting the F9P example script (Example19_LBand_Corrections_with_NEO-D9S) to run and get RTK lock? When I run it, I don’t get FLOAT or FIXED, just “Carrier Solution (None)”.

A little background on my setup: I am using an F9P connected via I2C (and UART2 concurrently) to the NEO-D9S. My antenna is a roof-top mounted Ublox multi band with clear view of sky. I connect to the F9P via a Teensy 3.6 with I2C. So the setup is

MacbookPro - USB - Teency3.6 - I2C - F9P - I2C/UART2 - D9S

When I take the same setup and run it through U-Center, I get FIXED lock within a couple of minutes. That setup is

Win10 - USBC - F9P - I2C/UART2 - D9S

My guess is that there’s some parameter that’s either missing from the Example19 script, or that’s different than the U-Center defaults. It could also be something related to the Example19 script using I2C to talk to the D9S, whereas U-Center uses the UART2. I’ve spent several hours trying different things with the Example19 script, but no luck thus far.

Any suggestions appreciated!!

Don

Hi Don,

Have you copied and pasted your L-Band keys into secrets.h? And selected the correct frequency for your area? There’s more information in the hook-up guide - see the sections on NEO-D9S and ZED-F9P configuration.

https://learn.sparkfun.com/tutorials/gn … okup-guide

I hope this helps,

Paul

Yes, have read the hookup guides, and have keys and gpsWeek loaded, and freq is set to US freq for Inmarsat. It’s getting good FIXED in U- Center, but not even getting to Float with Example19. So I’m wondering if others have been successful running Example19 as-is, or what mods they made to get Float and Fix modes. Thx!

Hi Don,

I re-tested that Example a couple of weeks ago and it works just fine…

Are you using the SparkX combo-board, or separate NEO and ZED breakouts? Either way, you should only provide the data from the NEO to the ZED once. The ZED seems to get confused if you provide the data over both I2C and UART2. If you are using the combo board, there is a #define noPush in the code that you can uncomment and which will prevent the duplicate push over I2C. If you are using separate boards, again disable the I2C push if you have the UART2’s connected up.

I hope this helps,

Paul

Paul,

Thx. I am using separate boards, connected via I2C. i wasn’t able to get that to work, so i uncommented out the #define noPush, added the uart2, but that causes a “cannot find I2C device” error. Then tried both uart2 and i2c, still no luck. Is yours the combo board or two separate boards like mine? I did notice signal levels are pretty low using the Ublox multiband antenna with low-loss cable to the roof, but U-Center locks to Fixed with the uart2 connection between boards just fine. My preference would be to use uart2 between the boards, then i’d use the i2c just for pulling results from the f9p, but i’m unclear on how to modify Example19 to do that.

Don

Hi Don,

I’ve got the full set: combo board and separate breakouts too…

I think it’ll be easiest if I send you some code which I’ve tested and know works. I’m in the UK (using the EU frequency) but I’ll set the code to use the US frequency. It will have my L-Band key in it, so I’ll Private Message the code to you. Please don’t abuse it, or share it with anyone else. I’ve tested it using separate breakouts with a Teensy 3.2.

The hardware setup is:

Computer → USB_Cable → Teensy → Qwiic_I2C_Cable → ZED_F9P_(I2C) → Qwiic_I2C_Cable → NEO_D9S_(I2C)

No UART2 connections. The Teensy will read the correction data from the NEO over I2C, and push it to the ZED over I2C. All being well, you should see:

Watch out for the private message.

Best wishes,

Paul

Thanks! I’ll fire it up this morning again! Don

Paul,

Thanks again, your script is working, thx so much. I have paid for my own keys, so perhaps i’m entering the gpsWeek in wrong or something. So i’ll work on figuring out what i’ve messed up.

I’m using this rtk setup to get a “truth source” for testing my own matlab (and C) code for processing obs and nav data for pvt solutions. having this rtk solution is perfect. thx again, i owe you a pint someday! Don

Excellent Don - I’m glad that’s working for you.

Getting the key valid-from date and time is a little tricky. u-blox provide the data in a few ways (through ThingStream or via MQTT) but they’re all slightly different and not quite what the code needs. Also, u-blox have just changed the valid from time from midnight Friday-Saturday to midnight Saturday-Sunday. And there was a key change at the weekend, which may have complicated matters for you…

Anyway, please reach out again if you need more help.

All the best,

Paul

Hi everybody,

I use a SparkX combo-board and I don’t see RMX PMP messages in the u- center if I connect the USB for Neo D9S.

I use the u-blox L1/L2 antenna. as far as i understand to see the RMX PMP encrypted datas no PP key is needed. I have a L Band Point Perfect Abo and putted the keys in the IDE code

If a go to use an ESP board i get the position, but not fixed only 3D.

This ist my programm

Use the NEO-D9S L-Band receiver to provide corrections to a ZED-F9x via UBX-RXM-PMP messages

By: SparkFun Electronics / Paul Clark

Based on original code by: u-blox AG / Michael Ammann v3 updates: Decembe 22nd, 2022

License: MIT. See license file for more information.

This example shows how to obtain SPARTN correction data from a NEO-D9S L-Band receiver and push it over I2C to a ZED-F9x.

This is a proof of concept to show how the UBX-RXM-PMP corrections control the accuracy.

If you are using the SparkFun Combo Board (SPX-20167), the correction data is transferred from the NEO to the ZED via UART2.

You don’t need to push it over I2C. Doing so just gives the ZED twice as many correction messages.

Uncomment the “#define noPush” below to disable the I2C push.

You will need a Thingstream PointPerfect account to be able to access the SPARTN Credentials (L-Band or L-Band + IP Dynamic Keys).

Copy and paste the Current Key and Next Key into secrets.h.

Feel like supporting open source hardware?

Buy a board from SparkFun!

ZED-F9P RTK2: https://www.sparkfun.com/products/16481

NEO-D9S:

https://www.sparkfun.com/products/19390

Combo Board: https: //www.sparkfun.com/products/20167

Hardware Connections:

Use Qwiic cables to connect the NEO-D9S and ZED-F9x GNSS to your board

If you don’t have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https: //www.sparkfun.com/products (4425)

Open the serial monitor at 115200 baud to see the output

*/

#define noPush // Uncomment this line to disable pushing the correction data over I2C. Useful for the combo board which uses UART2 instead.

I have uncommented no Push and use the frequency for EU.

What do I wrong? can someone help me? Which additionally information are needed for you?

Thanks in advance

Bernhard

What specific sparkfun part numbers are you using?

Hi Bernhard,

I don’t see RMX PMP messages in the u- center if I connect the USB for Neo D9S

This is normal. You will only see the PMP messages on USB if they have been enabled. You can do this is u-center using CFG-MSG or CFG-VALSET, or you can modify the example and include this code near line 293:

myLBand.addCfgValset(UBLOX_CFG_MSGOUT_UBX_RXM_PMP_USB, 1);           // Output UBX-RXM-PMP on USB

Have you also changed the GPSWeek and GPSToW in secrets.h? The current week is 2301, next week is 2305, ToW is 86400 for both:

const uint8_t currentKeyLengthBytes =   16; 
const char currentDynamicKey[] =        "--------------------------------";
const uint16_t currentKeyGPSWeek =      2301; // Update this when you add new keys
const uint32_t currentKeyGPSToW =       86400;

const uint8_t nextKeyLengthBytes =      16; 
const char nextDynamicKey[] =           "--------------------------------";
const uint16_t nextKeyGPSWeek =         2305; // Update this when you add new keys
const uint32_t nextKeyGPSToW =          86400;

I hope this works for you. If not, please copy and paste some of the serial monitor output here so we can analyse it.

Best wishes,

Paul

Just to clarify, there was a key change earlier today. In Thingstream, you should see:

Current Key ---- Expires: 23:59 Mar 10, 2024

Next Key ---- Expires: 23:59 Apr 07, 2024

This means the current key is valid from week 2301, ToW 86400 (12:00AM today)

The next key is valid from week 2305, ToW 86400.

Best,

Paul

Hi Paul, hi Yellow Dog,

thanks for the fast reply.

I use a GNSS Combo Breakout GPS 22560

living in Europe a use the european frequncy . My Point Perfect Keys are:

const uint8_t currentKeyLengthBytes = 16;

const char currentDynamicKey = “xxxx”;

const uint16_t currentKeyGPSWeek = 2301; // Update this when you add new keys

const uint32_t currentKeyGPSToW = 86340;

const uint8_t nextKeyLengthBytes = 16;

const char nextDynamicKey = “xxx”;

const uint16_t nextKeyGPSWeek = 2305; // Update this when you add new keys

const uint32_t nextKeyGPSToW = 86340;

Regarding the GPSToW i subtracted the minute to midnight also.

As far as I can see there is no UART2 traffic from NEO D9S to F9P. Described in

u-blox configuration manual for Neo D9S and F9P

"Firstly, some initial functional checks are required to verify that NEO-D9S is operating correctly:

• NEO-D9S communication has been established (e.g., via u-center) through UART1 or USB

• The L-band antenna is plugged in

• The L-band and interface configurations have been sent

• The UBX-RXM-PMP message can be used to check the received correction data (Figure 5)

• The UBX-MON-TXBUF message can be used to check the data sent via UART2 (Figure 6)

Figure 5 and Figure 6 show the messages as they appear in u-center."

I cannot see the datas in UBX-RXM-PMP and UBX-MON_TXBUF, but Paul, I will follow your advice and try to enable the viewing.

For sure you have an idea ! Thanks

Bernhard

PS My last project with a pure F9P board and Point Perfect IP correction is working fine.

Hi Paul,

me again!

On which code do you refer with

“This is normal. You will only see the PMP messages on USB if they have been enabled. You can do this is u-center using CFG-MSG or CFG-VALSET, or you can modify the example and include this code near line 293:”

I work with Examble 2 "L Band correctons with NEO D9S

"Use the NEO-D9S L-Band receiver to provide corrections to a ZED-F9x via UBX-RXM-PMP messages

By: SparkFun Electronics / Paul Clark

Based on original code by: u-blox AG / Michael Ammann

v3 updates: Decembe 22nd, 2022

License: MIT. See license file for more information.

This example shows how to obtain SPARTN correction data from a NEO-D9S L-Band receiver and push it over I2C to a ZED-F9x. (If you uncomment a line it pushes over UART)"

I have also updated the firmware of F9P to 1.32. Is my board a generation 9 board, as asked in u-center ?

Thanks

Bernhard

Hi Bernhard,

Yes, you have generation 9. Updating to 1.32 is a good idea.

You can enable the NEO-D9S PMP messages on USB by modifying the example code:

  myLBand.addCfgValset(UBLOX_CFG_MSGOUT_UBX_RXM_PMP_UART1, 1);           // Output UBX-RXM-PMP on UART1
  myLBand.addCfgValset(UBLOX_CFG_UART2OUTPROT_UBX,         1);           // Enable UBX output on UART2
  myLBand.addCfgValset(UBLOX_CFG_MSGOUT_UBX_RXM_PMP_UART2, 1);           // Output UBX-RXM-PMP on UART2
  myLBand.addCfgValset(UBLOX_CFG_MSGOUT_UBX_RXM_PMP_USB, 1);           // Output UBX-RXM-PMP on USB <== INSERT THIS LINE (Line 294)
  myLBand.addCfgValset(UBLOX_CFG_UART1_BAUDRATE,           38400);       // match baudrate with ZED default
  myLBand.addCfgValset(UBLOX_CFG_UART2_BAUDRATE,           38400);       // match baudrate with ZED default

Please check your antenna has a good view “South”. The correction data comes from a geostationary Inmarsat satellite.

I hope this helps,

Paul

Good evening Paul,

I guess some examples are your work!

I put in the line, you suggested, but no change. I do not get any message; not in u centre nor via serial Monitor on IDE.

In u center i get in MON PMP

locked frameSync =0 cno=0 cnoFrac =0,00#and in MON RXBUF IC2 a small blue bar in the other lines UART1,UART2, USB nothing

Hi Bernhard,

(Yes, I wrote most of the library examples! :wink: )

Do you see any messages in the Serial Monitor? If you do, please copy and paste them here.

Which Arduino board are you using? Is it one which has worked previously?

Best,

Paul

Hi Paul,

if we talke about the example 10

"LBand PMP over Serial

Use the NEO-D9S L-Band receiver to provide corrections as PMP over Serial

By: SparkFun Electronics / Paul Clark

Based on original code by: u-blox AG / Michael Ammann

v3 updates: Decembe 22nd, 2022"

I use the configuration in this programm unchanged, even if the defaults in some cases are different.

In the Monitor I only see some the setup prints, but no PMP Messages:

"

12:23:34.149 → )!⸮-ĶV⸮⸮⸮⸮⸮⸮DIO, clock div:1

12:23:34.149 → load:0x3fff0030,len:1416

12:23:34.149 → load:0x40078000,len:14804

12:23:34.149 → load:0x40080400,len:4

12:23:34.149 → load:0x40080404,len:3356

12:23:34.149 → entry 0x4008059c

12:23:35.289 → NEO-D9S SPARTN Corrections

12:23:35.289 → u-blox NEO-D9S connected

12:23:35.426 → L-Band: configuration →

"

no change after the line L-Band configuration.

I use an ESP 32 which is in different applications working.

Thnaks

Bernhard

Hi Bernhard,

Are you sure you are connecting your ESP32 board to the ZED and NEO correctly?

For Example2_LBand_Corrections you need to connect using the I2C Wire bus.

For Example10_LBand_PMP_over_Serial you need to connect to the NEO using I2C Wire, and connect the ESP32 Serial1 UART pins to the ZED UART1 TXO and RXI. Example10 is not a good choice for the Combo Board, because the ZED and NEO are already connected via UART2. But perhaps you are only using that example to check if the NEO is working correctly?

You should see “OK” or “ERROR!” after " L-Band: configuration ->". Which do you see?

Can you please share a photo of your boards, showing the wiring connections between them.

Please also check again that your antenna has a clear view of the sky to the South.

Thank you,

Paul