Introduction
The SparkFun GNSS-RTK L1/L5 Breakout - NEO-F9P (Qwiic) is a high precision GNSS board with equally impressive configuration options. Utilizing both the L1 and L5 bands, the NEO-F9P delivers improved performance under challenging urban environments because the L5 signals fall within the protected ARNS (aeronautical radionavigation service) frequency band. This band is less subject to RF interference.
Similar to the ZED-F9P, the NEO-F9P module is a 184-channel u-blox F9 engine GNSS receiver, meaning it can receive signals from the GPS, GLONASS, Galileo, and BeiDou constellations with 10mm, three-dimensional accuracy! That's right; such accuracy can be achieved with an RTK navigation solution when used with a correction source. With this board, you will be able to know where your (or any object's) X, Y, and Z location is within roughly the width of your fingernail! Of course, the requirements for high precision GNSS requires a clear view of the sky (sorry, no indoor location) and a stream of correction data from an RTCM source. As long as you have two high precision breakout boards, or access to an online correction source, your NEO-F9P can output latitude, longitude, and altitude with centimeter grade accuracy. The module supports the concurrent reception of four GNSS systems. This module features a survey-in mode allowing the module to become a base station and produce RTCM 3.x correction data.
In this tutorial, we'll go over the hardware and how to hookup the breakout board. We will also go over a basic Arduino example to get started!
Required Materials
To follow along with this tutorial, you will need the following materials. You may not need everything though depending on what you have. Add it to your cart, read through the guide, and adjust the cart as necessary.
- 1x SparkFun IoT RedBoard - ESP32 Development Board [WRL-19177]
- 1x Reversible USB A to C Cable - 0.8m [CAB-15425]
- 1x SparkFun GNSS-RTK L1/L5 Breakout - NEO-F9P (Qwiic) [GPS-23288]
- 1x Qwiic Cable
- Flexible Qwiic Cable - 50mm [PRT-17260], for short distances
- Flexible Qwiic Cable - 500mm [PRT-17257], for those that need to wire the board farther away from your microcontroller
- 1x Reinforced Interface Cable - SMA Male to TNC Male (10m) [CAB-21740]
- 1x GNSS L1/L5 Multi-Band High Precision Antenna - 5m (SMA) [GPS-23814]
GNSS Accessories (Optional)
Depending on your setup, you may need the following mounting hardware. As included earlier in the required materials, the antenna ground plate below is needed when using multi-band antennas that do not have a good ground plane.
For users that decide to use the SPK6618H multi-band antenna as an alternative, users would not need to include the antenna ground plate. The mounting hardware listed below is also typically used with the SPK6618H multi-band antennas. The reinforced interface cable between the SMA to TNC also needed for the SPK6618H multi-band antennas.
- GNSS Magnetic Mount [PRT-21257]
- GNSS Antenna Mounting Hardware Kit [KIT-22197]
- Reinforced Interface Cable - SMA Male to TNC Male (10m) [CAB-21740]
- GNSS Multi-Band L1/L2/L5 Surveying Antenna - TNC (SPK6618H) [GPS-21801]
Radios (Optional)
For users that require radios to transmit RTK correction data, you could use the following radios.
- SiK Telemetry Radio V3 - 915MHz, 100mW [WRL-19032]
- SparkFun LoRaSerial Kit - 915MHz (Enclosed) [WRL-20029]
Tools (Optional)
You will need a soldering iron, solder, and general soldering accessories for a secure connection when using the plated through holes.
- Soldering Iron [TOL-14456]
- Solder Lead Free - 15-gram Tube [TOL-9163]
- Flush Cutters - Xcelite [TOL-14782]
- Hook-Up Wire - Assortment (Stranded, 22 AWG) [PRT-11375]
- Wire Stripper - 20-30 AWG Solid (22-32 AWG Stranded) [TOL-22263]
Prototyping Accessories (Optional)
For those using radios to connect a base station and rover together, you will need to connect to the PTHs. You could use IC hooks for a temporary connection depending on your setup and what you have available. Of course, you will want to the solder header pins for a secure connection. Below are a few prototyping accessories that you may want to consider.
- Breadboard - Self-Adhesive (White) [PRT-12002]
- IC Hook with Pigtail [CAB-09741]
- Break Away Headers - Straight [PRT-00116]
- Female Headers [PRT-00115]
- Jumper Wires Premium 6" M/M Pack of 10 [PRT-08431]
Suggested Reading
If you aren't familiar with the Qwiic Connection System, we recommend reading here for an overview.
If you aren’t familiar with the following concepts, we also recommend checking out a few of these tutorials before continuing.
You may also be interested in the following blog posts on GNSS technologies.
Hardware Overview
In this section, we will highlight the hardware and pins that are broken out on the SparkFun GNSS-RTK L1/L5 Breakout - NEO-F9P (Qwiic). For more information, check out our Resources and Going Further for the NEO-F9P.
NEO-F9P Module
The board breaks out the NEO-F9P.
Similar to the other F9P engines, the NEO-F9P is a 184-Channel GNSS Receiver. The module supports the concurrent reception of four GNSS systems: GPS, GLONASS, Galileo and BeiDou. The NEO-F9P is an upgrade to the NEO-M8P and utilizes the L1/L5 bands as opposed to the ZED-F9P's L1/L2.
Image Courtesy of u-blox: GPS Signals Migration White Paper |
Utilizing the L5 band, the NEO-F9P delivers improved performance under challenging urban environments because the L5 signals fall within the protected ARNS (aeronautical radionavigation service) frequency band. This band is less subject to RF interference. Below is a comparison of a single-band (L1) vs dual-band (L1/L5) GNSS test with a car driving through an urban environment. Tracking the vehicle was better when utilizing the L1/L5 bands.
Image Courtesy of u-blox: GPS Signals Migration White Paper |
Note
As of the writing of this tutorial, it is important to note that L5 band is still not yet fully operational on GPS and Galileo. It is expected to be fully operational by 2025.
When a RTK solution is reached, the module can achieve a horizontal accuracy of about 10mm (~0.393 inches) and a vertical accuracy of about 10mm (~0.393 inches). The NEO-F9P is capable of both rover and base station operations. Below are a few specs taken from the datasheet. For more information, check out the related documents for the NEO-F9P in the Resources.
- Time to First Fix: 27s (cold), 3s (hot)
- Max Navigation Rate:
- RTK (basic location over UBX binary protocol) - 25Hz
- PVT - 25Hz
- RAW - 25Hz
- Horizontal Position Accuracy:
- 1.5m without RTK
- 0.01m with RTK
- Vertical Position Accuracy:
- 2.0m without RTK
- 0.01m with RTK
- Time Pulse Accuracy: 30ns
- Operational Limits
- Max G: ≤4G
- Max Altitude: 80km (49.7 miles)
- Max Velocity: 500m/s (1118mph)
- Software Configurable
- Geofencing
- Odometer
- Spoofing Detection
- External Interrupt
- Pin Control
- Low Power Mode
- Many others!
- Supports NMEA, UBX, RTCM, SPARTN, CLAS protocols over UART or I2C interfaces
Power
There are a variety of power and power-related nets broken out to connectors and through hole pads. 5V power from the USB C Connector or PTH is regulated down to 3.3V with the AP2112K 3.3V/600mA voltage regulator. The logic levels for the NEO-F9P is 3.3V for the I/O pins.
- 5V — Power from the USB C connector's VBUS provides power to the 5V bus. The 5V net is also connected to the edge PTH pin labeled as 5V and the input of the 3.3V voltage regulator. Care must be taken when connecting to this pin to avoid conflicting voltages between the breakout board and anything connect to the 5V pin. Make sure that power you provide to this pin does not exceed 6 volts.
- 3V3 — This connects to the 3.3V net. Both sides of the board includes a 3.3V pin (labeled as 3V3) that should only be provided with a clean 3.3V power signal. This is also connected to the Qwiic connectors.
- GND — Of course, is the common, ground voltage (0V reference) for the system.
Backup Battery
The small metal disk is a small lithium battery. This battery does not provide power to the IC like the 3.3V system does, but to relevant systems inside the IC that allow for a quick reconnection to satellites. The first time to fix (TTFF) is about ~27 seconds. With the backup battery, the hot start is less than 3 seconds.
Qwiic and I2C
There are two PTHs labeled SDA and SCL on each side of the board. These indicate the I2C data and clock lines. These pins also have an alternative function for SPI: CS and SCK. By default, the I2C interface is enabled. As mentioned in the jumpers section, you'll need to keep the SPI jumper open on the underside for the I2C interface. We also conveniently added a GND and 3.3V pin on one side should you decide to daisy chain additional I2C devices to the PTH. Similarly, you can use either of the Qwiic connectors to provide power and utilize I2C. The Qwiic ecosystem is made for fast prototyping by removing the need for soldering. All you need to do is plug a Qwiic cable into the Qwiic connector and voila!
- SDA/CS — I2C data / SPI Chip Select
- SCL/SCK — I2C clock / SPI Serial Clock
Note
The only I2C address for this and all u-Blox GPS products is 0x42, though each can have their address changed through software.
Tip
There are jumpers for the I2C data and clock lines. By default, these jumpers are open. Closing the jumpers will add 2.2kΩ pull-up resistors to the I2C bus. For users that do not have pull-up resistors attached to the I2C lines on their microcontroller, make sure to close the jumpers with a little solder blob.
UART1
There are two pins on each row of headers currently labeled as TXD1 and RXD1 for the primary UART. These pins also have an alternative function for SPI: POCI and PICO. By default, the UART interface is enabled. Be sure that the SPI jumper on the back of the board is open.
- TXD1/POCI — TX out from NEO-F9P / SPI Peripheral Out Central In
- RXD1/PICO — RX into NEO-F9P / SPI Peripheral In Central Out
UART2
There is a second serial port available on the NEO-F9P. This is primarily used for RTCM3 correction data. By default, this port will automatically receive and parse incoming RTCM3 strings enabling RTK mode on the board like the other RTK breakout boards for the NEO-M8P-2 and ZED-F9P. The RTCM Correction port pins are arranged to match the industry standard serial connection (aka the 'FTDI' pinout). This pinout is compatible with our Bluetooth Mate and Serial Basic so you can send RTCM correction data from a cell phone or computer. Note that RTCM3 data can also be sent over I2C, UART1, SPI, or USB if desired.
What is a BlueSMiRF?
The BlueSMiRF was a Bluetooth device that was included in SparkFun's catalog. The footprint consists of a 1x6 header for the serial UART and power pins. Note that the arrangement of the header pins can be different from USB-to-serial converters (i.e. FTDI Serial Breakout Boards and CH340 Serial Basic Boards).
SPI
There are four pins on the header that are labeled with their corresponding SPI functionality: POCI, PICO, CS, and SCK. These pins are shared with the UART and I2C pins. By default, the UART interface is enabled. As mentioned in the jumpers section, you'll need to close the SPI jumper on the underside to enable SPI interface. Note the board uses different terminology for SPI. For more information, make sure to check out our SPI tutorial.
- TXD1/POCI — TX out from NEO-F9P / SPI Peripheral Out Central In
- RXD1/PICO — RX into NEO-F9P / SPI Peripheral In Central Out
- SDA/CS — I2C data / SPI Chip Select
- SCL/SCK — I2C clock / SPI Serial Clock
SMA Connector
The board is populated with one SMA connector for a secure connection. You will need a multiband GNSS antenna capable of receiving L1 and L5 bands to get the most out of the NEO-F9P. Note that this is intended for active antennas. We recommend using the GNSS L1/L5 Multi-Band High Precision Antenna - 5m (SMA). You will also need an antenna ground plate
Antenna Power
The antenna power pin (ANT PWR) is available for advanced users that want to power their L1/L5 3.3V active antenna with an external power source.
Follow the steps below to modify the board.
- Isolate VCC_RF — You will need to isolate the VCC_RF. Users will need to make sure to cut the trace between the two arrows (i.e. ▶ ◀) to disable the VCC_RF antenna power. You can also shift the surface mount component that connects to the trace by moving it so that it does not connect to the SMA connector.
- Install SMD Component — You will then need to populate the board where L1 is located (i.e. the pads that are not currently populated and connects to the ANT PWR PTH) with a 0603 part with impedance >500 Ohms at 1.5GHz.
- Inject Power — When ready, connect a clean DC power supply voltage between ANT PWR and GND.
Broken Out Pins
There are six other pins broken out:
- PPS — Pulse-per-second output pin. Begins blinking at 1Hz when module gets basic GPS/GNSS position lock.
- RTK_STAT — Real Time Kinematic status output pin. Remains high when module is in normal GPS mode. Begins blinking when RTCM corrections are received and module enters RTK float mode. Goes low when module enters RTK fixed mode and begins outputting cm-level accurate locations.
- RESET — Reset input pin. Pull this line low to reset the module.
- EXT INT — Interrupt input/output pin. Can be configured using U-Center to bring the module out of deep sleep or to output an interrupt for various module states.
- LNA_EN — Antenna, LNA control. During software backup mode, this pin is used to disable an antenna or optional external LNA using the LNA_EN signal to save power.
- SAFE — Safeboot input pin. This is required for firmware updates to the module and generally should not be used or connected.
LEDs
The board includes the following status LEDs as indicated in the image below.
- PWR — Indicates when the NEO-F9P is powered.
- PPS — Tied to the Pulse Per Second pin and acts as a visual indicator to the NEO-F9P's pulse per second signal.
- RTK — Indicates the status of the RTK lock. The RTK LED off upon power up. Once RTCM data has been successfully received it will begin to blink indicating an RTK float solution. This is a good way to see if the NEO-F9P is getting RTCM from various sources. Once an RTK fix is obtained, the LED will turn on.
Jumpers
Note
If this is your first time working with jumpers, check out the How to Work with Jumper Pads and PCB Traces tutorial for more information.
If you flip the board over, you will notice a few jumper pads.
- SHLD — This jumper connects the USB Type C connector's shield pin to GND. By default, this is closed. Cut this to isolate the USB Type C connector's shield pin.
- 3V3 — This jumper connects 3.3V to the UART2 port. By default, this is closed and will provide power to anything connected to the UART2 port. Cut this jumper if you are connecting a 3.3V USB-to-Serial converter with its own power source, or if the GNSS receiver is being powered with its own power source.
- I2C — This three way jumper labeled
I2C
will connect to two pull-up resistors to the I2C data and clock lines when closed. For users that do not have pull-up resistors attached to the I2C lines on their microcontroller, make sure to close the jumpers with a little solder blob. - SPI — The jumper labeled SPI enables the SPI data bus, thus disabling the UART functions on those lines. This also disables I2C interface.
- RTK — The RTK LED indicates the status of the RTK lock. Cut this jumper to disable the LED.
- PWR — The power LED will illuminate when 3.3V is activated either over USB or via the Qwiic bus. Cut this jumper to disable the LED.
- PPS — The pulse per second LED will illuminate each second once a position lock has been achieved. Cut this jumper to disable the LED.
Board Dimensions
The board is 1.7" x 1.7" (43.1mm x 43.1mm). This is not including the SMA connector. There are 4x mounting holes by each corner of the board.
Hardware Hookup
In this section, we'll go over how to connect the L1/L5 GNSS Antenna, SparkFun Qwiic GNSS-RTK L1/L5 Breakout - NEO-F9P, and IoT RedBoard - ESP32 for embedded systems. Of course, you can also connect the NEO-F9P directly to your computer without the need for a microcontroller if you decide to use the u-blox u-center software as well.
L1/L5 Dual-Band GNSS Antenna
Connect a compatible dual-band antenna that is capable of receiving L1 and L5 bands. In this case, we used the "GNSS L1/L5 Multi-Band High Precision Antenna - 5m (SMA)." Insert the TNC side of the interface cable into the antenna's TNC connector. Secure the connection by tightening the screw until it is finger-tight. Then insert the SMA side of the interface cable into the GNSS-RTK L1/L5 Breakout Board's SMA connector. Secure the connection by using the SMA's hex nut until it is finger-tight.
You will need to include an antenna ground plate to get the most of the multi-band antenna. For the following images below, we'll have the magnetic mount antenna separate from the antenna ground plate when connecting the NEO-F9P breakout board to the rest of the system. When running the examples, make sure to have the antenna mounted over a metal ground plate.
Note
Not all multiband antennas are made the same! Make sure that you are connecting a multi-band antenna that is capable of receiving L1/L5 signals when using the SparkFun Qwiic GNSS-RTK L1/L5 Breakout - NEO-F9P. There is also another u-blox antenna that looks the same. However, the u-blox antenna used in this tutorial receives L1/L5 signals as opposed to the L1/L2.
Connecting via Qwiic Port
Note
We recommend using the IoT RedBoard - ESP32 for the scope of this tutorial.
For this example, we will use the IoT RedBoard - ESP32 and its associated cable. Connecting the boards with a Qwiic cable is very simple. Plug a Qwiic cable between the RedBoard IoT and the SparkFun NEO-F9P. If you're going to be soldering to the through hole pins, then just attach lines to power, ground, and the I2C data lines to the microcontroller of your choice.
USB to Microcontroller
To power and program the IoT RedBoard - ESP32, users will just need to insert the Type C side of the cable to the development board. The other end will connect to a computer's USB port.
USB to NEO-F9P
For users that simply want to connect to the board via USB, you will insert a USB C cable into the USB connector. Then connect the other end to your computer USB port.
Connecting via PTH
For temporary connections to the PTHs, you could use IC hooks to test out the pins. However, you'll need to solder headers or wires of your choice to the board for a secure connection. You can choose between a combination of header pins and jumper wires, or stripping wire and soldering the wire directly to the board.
Installing the Arduino Library
Arduino
This example assumes you are using the latest version of the Arduino IDE on your desktop. If this is your first time using the Arduino IDE, library, or board add-on, please review the following tutorials.
Note
If you've never connected an CH340 device to your computer before, you may need to install drivers for the USB-to-serial converter. Check out our section on "How to Install CH340 Drivers" for help with the installation.
SparkFun has written a library to work with the u-blox NEO-F9P. You can obtain this library through the Arduino Library Manager by searching for "SparkFun u-blox GNSS v3". Find the one written by SparkFun Electronics and install the latest version. Users who prefer to manually install the library can get it from the GitHub Repository or download the .ZIP by clicking the button below:
Once you have the library installed checkout the various examples! There are several examples in the library that cover more than just the NEO-F9P. Note that some examples will not apply depending on the modules features. To take advantage of the F9P, we will be looking at the ZED-F9P folder.
Enabling L5 Band and Overriding Health Status
By default, the L5 band is disabled on the NEO-F9P. To take advantage of the L5 band, you will need to:
- enable the L5 band
- override the health status check
- save the settings into memory
- perform a software reset
Configuring with the Arduino Library
Arduino
Make sure that you are using the SparkFun u-blox GNSS Arduino Library v3.1.1+ in order to be able to take advantage of the following functions.
To do this using the Arduino Library, users can add the following three lines of code in the setup()
function after connecting a Qwiic cable between an Arduino to the NEO-F9P:
if (myGNSS.begin() == false) //Connect to the u-blox module using Wire port
{
Serial.println(F("u-blox GNSS not detected at default I2C address. Please check wiring. Freezing."));
while (1);
}
myGNSS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise)
//myGNSS.saveConfiguration(); //Optional: Save the current settings to flash and BBR
//Add the following 3 lines below to enable L5 band and override health status check on the NEO-F9P
myGNSS.setVal8(UBLOX_CFG_SIGNAL_GPS_L5_ENA, 1); // Make sure the GPS L5 band is enabled (needed on the NEO-F9P)
myGNSS.setGPSL5HealthOverride(true); // Mark L5 signals as healthy - store in RAM and BBR
myGNSS.softwareResetGNSSOnly(); // Restart the GNSS to apply the L5 health override
Configuring with U-Center
Users can also enable the L5 band via U-Center v22.07. Connect a USB cable between the NEO-F9P breakout board and your computer. Then open the software, connect to the COM port that the board enumerated to, and head to View > Generation 9 Configuration View. Once open, select the check box for GPS's L5. Select the check box for BBR. When ready, hit the Send Configuration button.
To override the health status by heading to View > Messages View > CUSTOM. With the Custom Messages set for Hex, paste the following to configure the settings in RAM and hit the send button:
Then send the following to configure the settings in BBR and hit the send button:
Tip
To confirm that the above UBX messages were sent successfully, check the UBX-ACK-ACK
messages after sending the message. For users that want to revert to the default behavior, make sure to check the GPS L5 Configuration: GNSS receiver handling of GPS L5 health status application note on page 5 under Table 2: UBX binary strings to revert the GPS L5 health status monitoring to default.
The "Satellite Level History" window should update and include the L5 bands if it is available.
Arduino Examples
--8<-- "./docs/arduino_examples.md
Troubleshooting
General Troubleshooting Help
Note
Not working as expected and need help?
If you need technical assistance and more information on a product that is not working as you expected, we recommend heading on over to the SparkFun Technical Assistance page for some initial troubleshooting.
If you don't find what you need there, the SparkFun Forums are a great place to find and ask for help. If this is your first visit, you'll need to create a Forum Account to search product forums and post questions.
Resources
Now that you've successfully got your SparkFun GNSS-RTK L1/L5 Breakout - NEO-F9P (Qwiic) up and running, it's time to incorporate it into your own project! For more information, check out the resources below:
SparkFun Resources
- Schematic (PDF)
- Eagle Files (ZIP)
- Board Dimensions (PNG)
- Qwiic Info Page
- Building a GPS System
- RTK Solutions
- Arduino Library
- GitHub Hardware Repo
u-blox NEO-F9P Resources