What is the latest ROM version for the ISM420? How do I read it?

The base part number is ISM420R1-C33. The ROM Code part number can be read from the GPS in OSP (Sirf Binary) mode only and the version is :  “GS4e -4.1.2-P1”.

The GPS will initially come up in OSP at 115200 baud, unless you change it with the strapping pins 4 and pin 5 or have a SPI or EEPROM attached and then unit will start in NMEA 4800.

OPS MID 129 routine (switch from OPS to NMEA) for ISM420-480 EVB

Function: OSPMID129

Description: Send SiRF MID 129 (Switch to NMEA Protocol) to GPS in OSP mode


// where: A0A20018 - Start sequence/Payload length
// 81020101000101010501010100010001001000012580 - Payload
// 01ABB0B3 - Checksum/End sequence
// 81 MID
// 02 Mode: 00-Enable NMEA debug msg
// 01-Disable NMEA debug msg
// 02-Don't change last set value
// 01 GGA message rate (sec)
// 01 Checksum GGA message
// 00 GLL message rate (sec)
// 01 Checksum GLL message
// 01 GSA message rate (sec)
// 01 Checksum GSA message
// 05 GSV message rate (sec)
// 01 Checksum GGA message
// 01 RMC message rate (sec)
// 01 Checksum RMC message
// 00 VTG message rate (sec)
// 01 Checksum VTG message
// 00 MSS message rate (sec)
// 01 Checksum MSS message
// 00 EPE message rate (sec)
// 01 Checksum EPE message
// 00 ZDA message rate (sec)
// 01 Checksum ZDA message
// 00 Unused
// 00 Unused
// 2580 Bit rate 0480=1200, 0960=2400, 12C0=4800, 2580=9600,
// 4B00=19200, 9600=38400, E100=57600
//
void OSPMID129(char mode[], char GGA[], char GLL[], char GSA[], char GSV[],
char RMC[], char VTG[], char MSS[], char EPE[], char ZDA[],
char rate[])
{
char msg[65] = "A0A2001881"; // OSP msg start
char bmsg[32];
char csum[6];
char tmp[2];
unsigned int checksum = 0;
int i;
int j = 0;
strcat(msg,mode); // Add mode
strcat(msg,GGA); // Rate/CS
strcat(msg,GLL); // Rate/CS
strcat(msg,GSA); // Rate/CS
strcat(msg,GSV); // Rate/CS
strcat(msg,RMC); // Rate/CS
strcat(msg,VTG); // Rate/CS
strcat(msg,MSS); // Rate/CS
strcat(msg,EPE); // Rate/CS
strcat(msg,ZDA); // Rate/CS
strcat(msg,rate); // Add bit rate
strcat(msg,"0000"); // Add unused
for (i=8;i<strlen(msg);i+=2)
{
memcpy(&tmp,&msg[i],2);
checksum += axtoi(tmp); // Sum
checksum &= 0x7FFF;
}
sprintf(csum,"%04X",checksum); // Convert hex string
strcat(msg, csum); // Add checksum
strcat(msg,"B0B3"); // Add End sequence
strcat(msg, NULL); // Terminate
/* Convert to binary & send */
for (i=0;i<strlen(msg);i+=2)
{
memcpy(&tmp,&msg[i],2);
bmsg[j] = axtoi(tmp); // Convert & store
USART_SendChar(GPS_USART, bmsg[j]); // Send byte
j++;
}
DPRINT(msg); // Send to console
}

How do I switch from NEMA to the Sirf Protocol on the ISM300?

You need to send a Carriage Return (0x0D) and Line Feed (0x0A) after the checksum (*37) for the SiRF chip to act on the message.

Ex: $PSRF100,0,57600,8,1,0*37<CR><LF>

What OSP messages is used to turn the GPS Off ?

The command to turn off the GPS in OSP is Message ID 205 (Sub ID 16). So the actual message is:

A0A20002CD1000DDB0B3

Is flash enable required on the GPS? Reset?

  • The FLASH_EN is only needed to Flash the GPS.
  • Reset is needed is you want to exit Flash mode without powering off the GPS. Otherwise not needed in normal operation
  • The ISM480 powers up in an off state. The On/Off pin needs to be toggled to turn ON the GPS.
  • Once the On/Off pin has been toggled you monitor Wake-up pin to change from low to high.
  • This indicates the GPS is running and data should start streaming out of the serial port.

What inductor do you use for the RF antenna connection?

The ISM420 requires the use of the following circuit in the front end if you plan on using an active antenna. The circuit is not required if you elect to have no power and use a passive antenna.

RFin connects to the Antenna and the input to the GPS. In the case of the ISM420 inputs are 3.3V tolerant. So no protection needed to the GPS

Antenna Global Positioning System Front-End

We use the 0603HP – 33NXGLW inductor you can find at digi-Key.

How do I set the data rate of the NEMA messages used?

Here is the function call:

/* Set the rate of the NMEA messages used */
PSRF103("00", "00", "01", "02");
// GGA at 1 sec rate
Here is the function:
//-----------------------------------------------------------------------------
// Function:    PSRF103
// Description: Send SiRF msg 103 to GPS
//-----------------------------------------------------------------------------
// where:        $PSRF103,05,00,01,01*20
//   $PSRF103
//   05         00=GGA
//              01=GLL
//              02=GSA
//              03=GSV
//              04=RMC
//              05=VTG
//   00         mode, 0=set rate, 1=query
//   01         rate in seconds, 0-255
//   01         checksum 0=no, 1=yes
//   *20        checksum
void PSRF103(char nmeamsg[], char mode[], char rate[], char chksum[])
{
char msg[25] = "$PSRF103";                              // NMEA msg
char csum[2];
unsigned short checksum = 0;
int i;
strcat(msg,",");
strcat(msg,nmeamsg);                                    // Add NMEA msg
strcat(msg,",");
strcat(msg,mode);                                       // Add mode
strcat(msg,",");
strcat(msg,rate);                                       // Add rate
strcat(msg,",");
strcat(msg,chksum);                                     // Add checksum mode
for (i=1;i<strlen(msg);i++)
checksum ^= msg[i];                                   // XOR
sprintf(csum,"%02X",checksum);                          // Convert hex string
strcat(msg,"*");                                        // Add checksum delimeter
strcat(msg, csum);                                      // Add checksum
strcat(msg,"\r\n");                                     // Add CR, LF
USART_SendString(GPS_USART,msg);                        // Send msg
DPRINT(msg);
}

ISM480 GPS UART, SPI and I2C levels

  1. UART
    1. MARK (Logic 1) = Logic High
    2. Space (Logic 0) = Logic Low
    3. Idle Line = Logic High
    4. Line-break/open line = Continuous Logic Low
  2. SPI
    1. Slave Mode
    2. Idle Pattern: A7B4
    3. Maximum Clock = 6.8 MHz
    4. Default Clock Polarity and Phase: CPOL = 0, CPHA = 1
    5. Timing

I2C Port Timing

  1. I2C
    1. Default Address Format: 7-bit
    2. Master Address (sending) is 0x62
    3. Slave Address (receiving) is 0x60
    4. Data Frame Size:  8-bit octets
    5. Data Bit Order:   MSB,LSB
    6. Data Rates:       Default = Fast Mode (400 kbps), Standard Mode (100kbps)
    7. Timing

Serial Peripheral Interface timing format

ISM480 GPS State of Pins after Reset

After a reset (internally pulled up, power up generates the first reset) and before the first time ON_OFF.

Pin      Description      Reset State

1        CTS/SPI_CL/GPIO6      Pad Enabled, Low, Weak Pull-down Enabled

2        RX/MOSI/SDA          Pad Enabled, High

3        TX/MISO/SCL            Pad Enabled, High

4        RTS/SPI_CS/GPIO7        Pad Enabled, High, Weak Pull-up Enabled

5        Reset                   Pad Enabled, High, Pull-up Enabled

6        Wakeup                 Pad Enabled, Low

7        On_OFF                 Pad Enabled, Low

8        Flash Enable            Pad Enabled, Low

9        GPIO3                     Pad Enabled, High

When  the ON_OFF is pulsed for the first time the levels of  GPIO6 and GPIO7 are read to configure the host interface.

The reset is looked at by SiRF/CSR as an “External emergency override of internal POR”, so it is recommend to control the GPS through the use of the ON_OFF pin

How do you change the GPS output rate from a true 1Hz to 5Hz?

To enable the 5 Hz, use OSP MID 136.  The field “Position Calc Mode” can be interpreted this way:

Bit Mapped.  When set to 1, a bit enables the function.

Bit     Function

—-      ———–

0     Almanac Based Positioning

1     Reverse EE

2     5 Hz Navigation

3     SBAS Ranging

4     Fast time Sync

So set bit 2 to a 1 to enable 5 Hz navigation.

reference OSP document