Ublox NEO-6M GPS Module (How-to & Review)

I remember the first GPS unit I bought was a USB device with a sirf3 chip (20 channels, 1 Hz) and it costed around $45. Now I can buy an Ublox NEO-6M under $20 and get much more (50 channels, 5 Hz and other good stuff).

So let’s see how to test these inexpensive but quite powerful units with the help of a Bus Pirate 3.6. First, connect the bus pirate with the GPS unit:

  • GND to GND
  • 3V3 of bus pirate with VCC of GPS
  • MISO of bus pirate with TX of GPS
  • MOSI of bus pirate with RX of GPS
Connection of Bus Pirate v3.6

Bus Pirate v3.6

Connection of Ublox NEO-6M

Ublox NEO-6M

Now it’s time to start a serial terminal like Termite and set the correct port number and baud rate (115200 bps). Next, let’s issue the following commands pressing enter after each one:

  • m (set mode)
  • 3 (select UART)
  • 5 (baud rate: 9600, this is the default baudrate of the GPS unit)
  • ENTER four times (set data bits, parity, stop bits, polarity, output type to default)
  • W (power supply on, the 3V3 pin gets 3.3 volts)
  • (1) (run macro #1 which is UART bridge, the Bus Pirate will act as a bridge until reset)

After finishing these steps you should start receiving raw NMEA messages from the GPS unit.

NMEA messages coming from Ublox NEO-6M with no fix.

NMEA messages coming from Ublox NEO-6M with no fix

That huge number of commas after each other shows us that this unit knows nothing yet, this was its first (cold) start. Let’s go outside and see what happens.

NMEA messages after fixing location

NMEA messages after fixing location

This looks much better, but it is still hard to understand for a human being so let’s try something else. Let’s download u-center for Windows from here. This is an evaluation software from the manufacturer of the chip. During installation we must make sure not to install any drivers as we are already using the FTDI drivers with the Bus Pirate.


We don’t need any drivers.

After installing and starting the application a rather empty window greets us.



Using the  icons on the left select the correct COM port (COM4 in my case) and baud rate. Now don’t forget: you need to use baud rate of the Bus Pirate and not the GPS since we are using a bridge. So select 115200 and if everything goes well, something like this will happen:


Now we have many-many possibilities to go on with but I won’t cover these (maybe in a later post…). Thankfully, the user guide of u-center is quite detailed so I would start exploring there.

One thing I really wanted to do is to change the baud rate of the unit but somehow I couldn’t manage to do it. Whenever I try to change it to 115200 it gets back at 9600 before I could send a “save configuration” command. I am following chapter 6.1 from the user guide.

If anyone has an idea what am I missing, please leave a comment. Thank you!


Product name: Ublox NEO-6M GPS Module w/ EEPROM – Blue + Green

  • Comes with backup battery and antenna, nothing additional needed
  • Standard UART
  • Fast
  • Antenna comes on a separate PCB, this makes it a bit fragile


7 CommentsLeave a comment

  • Good day to all,
    Now, on to the business. I have bought a GPS Bee kit (a u-blox Neo 6M gps module in a XBee compatible board) and I’m having a huge headache thanks to it.
    The problem is that it appears to “see” satellites, but never gets a fix. Right now I’m using it with PL2303 USB – TTL UART converter , connecting them like so:
    Converter – GPS
    RX – TX
    TX – RX
    3v3 – 3v3
    GND – GND

    I’m completely sure that there is no wiring problem. I have 3 modules like this and all of them have the same problem. I’m using u-center software to see what the gps receiver sends to the converter. The gps usually “sees” 1-3 satellites for several seconds. The strings output repeats over and over in the same pattern which is giving no information.

    I have googled, watched videos, read forums for several days now and I’m at a loss.

    Things I’ve tried:
    1. Going outside to get as much open sky as possible (for at least 3 hours);
    2. Connecting it to Arduino, uploading a working and tested program to get the same result;
    3. Changing the baud rate (even though I’m completely sure now that this gps uses 9600 baud);
    4. Switching connecting Rx to Rx and Tx to Tx achieves nothing, the receiver doesn’t even communicate with the converter (the receive LED doesn’t flash when connected like that);
    5. Trying 3-4 other gps programs which show the same result (satellites appear for a moment and disappear, same empty strings);
    6. Doing everything i could find that other people did (going through settings, modifying them, tinkering with the firmware etc.)

    • Hello SWARD,

      I’m sorry for the very late reply, I’ve been quite busy lately, and I totally forgot your comment. Sorry about that.
      If the unit outputs the same messages forever and even “sees” a few satellites for some time that means the serial communication is OK. No need to switch cables or change baud rate or gps programs.
      Normally, these units come with a very basic configuration which should work “out-of-the-box” so I wouldn’t really tinker with the firmware neighter.
      If you’re really trying to get a fix with open sky (no tall buildings nearby) then, unfortunately I’d say you got defective units. You might try to contact the seller with screenshots from u-center.
      Good luck!

  • Hi, I am using NEO-6m module with an arduino. i have made the connections and seem to be getting only numbers from the GPS module and not the kind of data you are talking about. Could you help me with that?

  • Hi, I’ve tried reading the raw data coming from the NEO6M using an Arduino Uno, but all I receive is incomplete gibberish even after setting the baud rate of the software serial to 9600 and the LED flashing on the NEO6M.

    It outputs the raw data like this,


    Any idea if I have a defective unit?

    • Hello Ahmed,
      This is really strange, to be honest I’ve never seen anything like this before. Since some parts look alright, I’m absolutely sure that the baud rate, pinout are correct. As I see, the disturbance in the datastream is periodic. If you count it, a “ÿÿÿ” comes after every 15 or 16 characters. It always happens precisely after the same amount of time. This is a useful information for hunting the error down. Without further information I can imagine the following errors (listing them from most probable to most unlikely):

      • You are using software serial which is not as reliable as HW serial. Maybe you are doing something computationally intensive in the background, and the SW serial is running out of time. If you can, try connecting the GPS module directly to a computer through an FTDI or similar chip and see if it works that way.
      • Some other software error on the Arduino, something else is trying to use the RX pin periodically
      • A problem with the circuit, the serial line runs too close to something bad or is shorted with something else.
      • The GPS unit is defective

      I hope this helps, or at least gives you an idea of how to proceed.


  • I’ve done something stupid. I’ve somehow managed to disable the serial ports on my neo-6m-0-001. As a result, the serial port no longer sends or receives anything. Not even gibberish.

    Is there a way to reset the serial port to outpot nmea data or am I screwed?

Leave a Reply

Your email address will not be published. Required fields are marked *