updated 2/1/2012 by Monica Bate and Peter Darche
.The datasheet can be found here.
.A reference manual can be found here.
Summary
The EM-406A is a 20-channel GPS receiver with built in patch antenna available at Sparkfun for $60. It supports the NMEA 0183 protocol for GPS data over an RS-232 serial connection, making it easy for a microcontroller to communicate to it. The datasheet also contains examples of each supported command, which is helpful when dealing with an unfamiliar protocol. It also is WAAS-enabled, which allows for a higher level of accuracy than standard GPS alone. (I’ll explain WAAS further later.) Considering its high level of accuracy, small form factor, and easy setup, it seems like an excellent choice for GPS applications.



Relevant Features and Specs:
- SiRF star! high performance GPS Chip Set*
- Very high sensitivity (Tracking Sensitivity: -159 dBm)
- Extremely fast TTFF (Time To First Fix) at low signal level
- Support NMEA 0183 data protocol
- Built-in SuperCap to reserve system data for rapid satellite acquisition (This isn’t explained anywhere else in the datasheet.)
- Built-in patch antenna
- LED indicator for GPS fix or not fix
General
- Chipset
- SiRF Star!
- Channels
- 20 channel all-in-view tracking. This allows the unit to acquire data from up to 20 satellites, which should be enough redundancy for city and indoor use (unverified).
- Sensitivity
- -159 dBm
Accuracy
- Position
- 10 meters, 2D RMS, 5 meters, 2D RMS, WAAS enabled
- Velocity
- 0.1 m/s
- Time
- 1us synchronized to GPS time
Datum
- Default
- WGS-84
Acquisition Time
- Reacquisition
- 0.1 sec., average
- Hot start
- 1 sec., average
- Warm start
- 38 sec., average
- Cold start
- 42 sec., average
Power
- Main power input
- 4.5V ~ 6.5V DC input
- Power consumption
- 44mA
Protocol
- Electrical level
- TTL level, Output voltage level: 0V ~ 2.85V RS-232 level
- Baud rate
- 4,800 bps
- Output message
- NMEA 0183 GGA, GSA, GSV, RMC, VTG, GLL
Physical Characteristics
- Dimension
- 30mm*30mm*10.5mm "0.2mm (pretty freakin' small)
Theory of usage
From Wikipedia: Utilizing a constellation of at least 24 Medium Earth Orbit satellites that transmit precise microwave signals, the system enables a GPS receiver to determine its location, speed, direction, and time.
It is not necessary to understand the exact nature of these signals in order to use a GPS receiver. Like nearly all GPS receiver modules, the EM-406A decodes these signals, determines its position, and provides the developer with a means of acquiring this data.
Protocol
The EM-406A supports the NMEA 0183 protocol for GPS data over an RS-232 serial connection, making it easy to interface with a microcontroller. A typical command looks like this: $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18 This is an output command from the EM-406A. All commands start with a $, then the command itself, followed by any parameter data. All of the supported commands and the data fields are described in the data sheet. This command translates to:
| Name | Example | Units | Description |
|---|---|---|---|
| Message ID | $GPGGA | GGA | protocol header |
| UTC Time | 161229.487 | hhmmss.sss | |
| Latitude | 3723.2475 | ddmm.mmmm | |
| N/S Indicator | N | N=north or S=south | |
| Longitude | 12158.3416 | dddmm.mmmm | |
| E/W Indicator | W | E=east or W=west | |
| Position Fix Indicator | 1 | See Table B-3 | |
| Satellites Used | 07 | Range 0 to 12 | |
| HDOP | 1.0 | Horizontal Dilution of Precision | |
| MSL Altitude1 | 9.0 meters | ||
| Units | M | meters | |
| Geoid Separation1 | meters | ||
| Units | M | meters | |
| Age of Diff. Corr. | second | Null fields when DGPS is not used | |
| Diff. Ref. Station ID | 0000 | ||
| Checksum | *18 | ||
| <CR><LF> | End of message termination |
Pin Assignment

Another datasheet from Futurlec
(:source lang=arduino:)
Code example
This example was taken from an Arduino forum discussing the EM-406. The original post can be found here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1166042147/
//Created August 15 2006 //Heather Dewey-Hagborg //http://www.arduino.cc //reworked to GPS reader //Dirk, december 2006
- include <ctype.h>
- include <string.h>
- define bit9600Delay 84
- define halfBit9600Delay 42
- define bit4800Delay 188
- define halfBit4800Delay 94
byte rx = 6; byte tx = 7; byte SWval; char dataformat[7] = "$GPRMC"; char messageline[80] = ""; int i= 0;
void setup() {
pinMode(rx,INPUT);
pinMode(tx,OUTPUT);
digitalWrite(tx,HIGH);
digitalWrite(13,HIGH); //turn on debugging LED
SWprint('h'); //debugging hello
SWprint('i');
SWprint(10); //carriage return
Serial.begin(9600);
}
void SWprint(int data) {
byte mask;
//startbit
digitalWrite(tx,LOW);
delayMicroseconds(bit4800Delay);
for (mask = 0x01; mask>0; mask <<= 1) {
if (data & mask){ // choose bit
digitalWrite(tx,HIGH); // send 1
}
else{
digitalWrite(tx,LOW); // send 0
}
delayMicroseconds(bit4800Delay);
}
//stop bit
digitalWrite(tx, HIGH);
delayMicroseconds(bit4800Delay);
}
char SWread() {
byte val = 0;
while (digitalRead(rx));
//wait for start bit
if (digitalRead(rx) == LOW) {
delayMicroseconds(halfBit4800Delay);
for (int offset = 0; offset < 8; offset++) {
delayMicroseconds(bit4800Delay);
val |= digitalRead(rx) << offset;
}
//wait for stop bit + extra
delayMicroseconds(bit4800Delay);
delayMicroseconds(bit4800Delay);
return val;
}
} void char2string() {
i = 0;
messageline[0] = SWread();
if (messageline[0] == 36) //string starts with $
{
i++;
messageline[i] = SWread();
while(messageline[i] != 13 & i<80) //carriage return or max size
{
i++;
messageline[i] = SWread();
}
messageline[i+1] = 0; //make end to string
}
} void loop() {
digitalWrite(13,HIGH);
//only print string with the right dataformat
char2string();
if (strncmp(messageline, dataformat, 6) == 0 & i>4)
{
for (int i=0;i<strlen(messageline);i++)
{
Serial.print(messageline[i], BYTE);
}
}
//Serial.print(SWread(),BYTE); //use this to get all GPS output, comment out from char2string till here
}
(: sourceend :)
The EM-406A also supports WAAS, which is a secondary network of satellites and ground stations used to provide higher resolution positioning data. This network was created by the U.S. FAA and DOT.