GPS Logger Shield Hookup Guide

Contributors: jimblom
Favorited Favorite 6

Hardware Overview

For a quick overview of the components and features of the GPS Logger Shield, refer to the image below:

Annotated GPS Shield image

The rest of this section will dive into some of the more critical components of the shield, including power supply requirements and UART and SPI interface configurations.

Powering the GPS Logger Shield

The GPS Logger Shield's main voltage supply is taken from the Arduino 5V header pin. This voltage is regulated down to 3.3V, which is supplied to both the GPS module and the µSD card.

These two components should consume around 30mA on average, but they may very occasionally spike to upwards of 100mA.

Logic-Level Shifting

The shield includes a TXB0108 8-Channel Level Shifter, which shifts voltage levels between the Arduino and 3.3V GPS UART and µSD SPI signals. Regardless of whether your Arduino runs at 5V or 3.3V, you shouldn't have to concern yourself with shifting voltages between either component.

The Arduino-side logic-level voltage is set by the IOREF pin, which most Arduino development boards connect to either 5V or 3.3V.

⚡ If your Arduino board doesn't have an IOREF pin, or if no voltage is supplied on that pin, you will need to set the IOREF voltage manually. The shield includes a jumper on the back-side of the board, labeled IOREF-SEL, which you can use to set the IOREF voltage to either 3.3V or 5V.

If your Arduino board doesn't have an IOREF pin, set this jumper to match your desired logic level.

GP3906 Battery Supply (VBAT)

The GP3906 is a great, little module, but it has one, big quirk: A supply voltage between 2.0-4.3V is required on the VBAT pin. If you have a 12mm coin cell battery, supplying that voltage is as easy as pushing it into the battery socket. When you insert the battery, make sure you slot it in + side facing up.

Plugging battery into the GPS Shield

If you don't have a battery handy, there are a few workarounds. You can grab a soldering iron, and short the 3V3-Batt jumper, next to the battery socket.

Batt/3V3 jumper closed

If you don't have a 12mm battery, shorting the 3V3/Batt jumper will at least keep your GPS module functional.

Or you can wire the broken out VBAT pin to any voltage supply between 2.0-4.3V.

⚡ VBAT Supply Required: The GP3906 requires some form of voltage supply on its VBAT pin, whether that be an actual battery, or simply the 3.3V regulator output. If your the GPS LED isn't at least blinking (or illuminated) when the shield is powered up, that may indicate lack of supply to the VBAT port (or a dead battery).

Supplying the GP3906 with a backup battery supply ensures that its real-time clock (RTC) will continue to tick, even when the rest of the board is powered off. That allows the module to get faster GPS fixes when it initially powers up. It doesn't consume a lot of power -- we've measured around 5-6µA, -- so a 12mm coin cell battery could keep the board "running" (in sleep mode) for about a year.

GPS Pin Breakout's

Most of the GPS input, output, and power pins are connected to something on the GPS Logger Shield, but they're all also broken out to this 8-pin header.

GPS Pin breakout's highlighted

Here's a quick overview of each pin and its function:

Pin LabelIn/OutBoard ConnectionPin Description
GNDInGroundGPS module ground (0V reference)
PPSOut1 pulse-per-second time reference
ENInActive-high chip-enable – pull low to reset or turn off
RXInArduino TX/D9Serial data input
TXOutArduino RX/D8Serial data output
FIXOutGPS Fix LEDGPS fix indicator – blinks before a fix, HIGH once a fix is valid
VBATIn12mm coin cell socketBackup power – keeps the RTC running (2.0-4.3V input range)
3V3InOn-board 3.3V regulator3.3V power supply input

The PPS and EN pins are left unconnected. You're free to wire them up to any Arduino pin should you need either a pulse-per-second signal, or extra control of the GPS module's operation.

Selecting the Serial Port

The GPS module communicates via a simple, UART (serial) interface. The UART-select switch allows you to switch that interface between either the Arduino's hardware UART -- on pins D0 and D1 -- or a SoftwareSerial port on pins D8 and D9.

UART-select switch

Should you need a reference, this table shows the map between GPS module and Arduino UART(s):

GPS PinArduino Software UART PinArduino Hardware UART Pin
RX91 (TX)
TX80 (RX)

If you're using an Arduino Uno or any development board with one, pre-occupied hardware UART, you may be forced to use the software serial port. Fortunately, the GPS module's baud rate defaults to a slow, steady 9600 bps, which SoftwareSerial shouldn't have a problem handling.

If you need to move the software serial port pins, they can be custom-routed to any other pin by cutting the solder jumpers between pins GPS-RX and D8 and/or GPS-TX and D9.

Software UART-select jumpers

Once those jumpers are cut, you can wire the GPS-RX and GPS-TX pins to any other pins you'd like.

Selecting the µSD SPI Pins

On older Arduino boards, finding the SPI port was pretty simple -- it'd be on pins 10-13, mapping out to CS, MOSI, MISO, and SCLK respectively. On more recent Arduino board releases, however, these pins are just as likely to be found on only the 6-pin, 2x3 SPI header. The GPS Logger Shield maps the µSD SPI pins to both of these headers, in order to support as many development boards as possible.

A trio of three-way solder jumpers can be used to modify which Arduino pins are routed to the µSD card's SPI I/O's.

SPI-select jumpers

The middle pad of these jumpers carries the signal to/from the µSD card. The pads toward the inside of the board carry signals to the SPI header, and the pads toward the outside carry signals to pins 10-13.

Boards that map SPI to pins 10-13 include the Arduino Uno, RedBoard, Arduino Pro's, and most ATmega328P-based boards. If you're using any of these boards, it should be safe to leave the jumper's untouched (as they're also, likely, shorted together on the Arduino).

Boards that only map SPI to the 2x3 SPI header include the Arduino Leonardo (and other most ATmega32U4-based boards), Arduino Due, and the Arduino Zero (and most ATSAMD21-based boards). On these boards, you'll need to cut the solder jumpers connecting the middle pad to the D11-, D12-, and D13-side pads. The µSD_CS connected to pin D10 can be defined on any pin so it does not have to be modified.

Check below for more information about the **µSD SPI Jumpers**.

Power and GPS Fix Status LEDs

This pair of LEDs on the corner of the shield are a handy tool for initial troubleshooting. The red PWR LED is attached to the output of the shield's on-board 3.3V regulator. If the shield is getting power, this LED should be on.

The blue GPS FIX LED is connected the GP3906's "3D_FIX" pin. It can be used to identify whether the GPS module has a proper fix or not. When you initially power the shield up, the LED should blink -- indicating it's trying to find a fix. Once the LED turns solidly on, you can rest assured that your GPS module has a good fix on your location.

3D Fix pin operation

The GP3906's 3D_Fix pin operation. The LED will be on when the GPS fix is valid, and blinking at 1/2 Hz otherwise.

Both of these LEDs have solder jumpers underneath, should you find the need to disable either of them. A quick slice between the pads is all it takes to remove them from the circuit. This might be useful if you're using the GPS Logger Shield in a low-power application, where even the handful of milliamps consumed by the LEDs means months off a project's battery lifetime.