GPS not working after upgrade to 3.2


I have some trouble getting the GPS receiver to work on ArduCopter 3.2.
The flight controller is a HKPilotMega-Mini (awesome name), GPS is a Neo6M.
The GPS receiver gets a fix (LED on the GPS module) but all GPS related values remain 0 when connecting through MissionPlanner.
Just for fun I downgraded to ArduCopter 3.1 - and it turns out that GPS works there. I moved through all the available old firmware versions, the last one that works is 3.1.5, the first one that does not work is 3.2, neither does 3.2.1 nor the 3.3 beta. (not working == all GPS values in MissionPlanner are 0).
I’ve tried setting the GPS type to ublox and auto but neither does work.
I’ve checked the known issues list and the release notes but couldn’t find any hint that this feature does not work or if it has been removed.

I can work my way through the GIT repository to find out when exactly it stopped working but I was wondering if anyone else has the same issue or a fix.


I think the issue may be that your unit is outputting in NEMA format that is no longer supported on the newer versions of APM. They switched to a Binary format that they set the GPS too. Previous versions supported both NEMA and Binary but due to memory limits they removed it.


Thanks for the idea but that doesn’t seem to be the case.

I have worked my way along the GIT repository all the way to the tip of the 3.2.1 branch. Even if I build the firmware from the tip of that branch, GPS is working fine. If I download any of the pre-built firmware versions from 3.2 onwards, GPS does not work (at all).
I’ve even tried building the 3.3 branch - it works fine until some time in February/March. At this point the project does not compile anymore (some inertial nav missing), a sign that support for this platform will be dropped in 3.3

So, there is one very interesting thing though. When I compile any firmware, the Arduino IDE states that the target has 258,048 bytes available, however, I cannot successfully upload a firmware bigger than about 246,000 bytes. (the biggest one I could flash was 245,742, the smallest that did not work is 246,406). avrDude reports a verification error with those versions.
Fixing this for me is easy - I just turned Sonar off which brings me below that line.

When uploading the pre-built firmware through MissionPlanner, no error is reported though.

This is all confusing but at least I have found a solution that works for me.

PS: why is GIT so horrible - I’m a Mercurial person and I almost get a fit when I have to use GIT… :wink:

This is the change that disables NMEA for ArduCopter … _GPS.h#L47

Follow read me on how to make the binary smaller on command line build Ardunio IDE builds are not optimized for size,

See … /

Hope that helps :slight_smile:

Never used Hg, but love using git now I am familiar with it. Hg looks like it’s a variant of git, just funny syntax :wink:

Hi, this was very helpful and now everything makes sense!

I had a play with that changeset you pointed out and it turns out that it does not work when compiling with the Arduino-IDE. None of the APM_BUILD_* macros exists, this means that NMEA support is not disabled.

Oh well, knowing this, I downloaded the APM2-pass-through firmware, configured the Neo6M with the config file from the 3DR website and loaded a stock 3.2.1 firmware - everything works.

Thanks so much.

maternt, What is the “I downloaded the APM2-pass-through firmware, configured the Neo6M with the config file from the 3DR website and loaded a stock 3.2.1 firmware - everything works”

where can i get it and how do i do it. because i searched the 3DR site but couldn’t find it.

Kind regards