Home/GPS/Trimble/Trimble 4000 GPS Receiver Resources/Trimble 4000 Protocol

4000 Series Undocumented Serial Commands

Undocumented Normal Mode Commands

The documented commands can be found in the: 4000SE/SSE/SSi RS-232 Interface/Data Collector Format Specification Manual

0x80 - Switch to 4000A/S Compatible Mode

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x80
3Length0
4Checksumcomputed
5ETX0x03

Reply

ByteDescriptionValue
0ACK0x06

0x87 - Mode Change

This switches the receiver into monitor mode. The commands for monitor mode are different than those used in normal mode, and are documented later in this document.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x87
3Length1
40x57
5Checksumcomputed
6ETX0x03

It can take a few seconds for the monitor to start. When the receiver enters monitor mode, the baud rate defaults back to 9600-N-8-1. A good practice is to switch to monitor mode, reconfigure the computer serial port to 9600-N-8-1, then periodically poll the port with ENQ requests until an ACK is received. When this happens, the monitor is ready.

Reply

ByteDescriptionValue
0ACK0x06

Monitor Mode Commands

There are 10 monitor mode commands implemented in the monitor program.

0x80 - Write Memory

Command

NOTE: The format of the address is neither big-endian nor little-endian. It feels like there was a bug that went un-noticed, that then made it into the ROM of the PPU and they were stuck with it. The order is a little endian combo of big endian words.

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x80
3Lengthlength of data+4
4AddressAddress 15:8
5Address 7:0
6Address 31:24
7Address 23:16
8-nDatadata
n+1Checksumcomputed
n+2ETX0x03

Reply

ByteDescriptionValue
0ACK0x06

0x81 - Ignored

This command packet is ignored and produces no response.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x81
3Length0
4Checksumcomputed
5ETX0x03

Reply

No reply is sent.

0x82 - Read Memory

NOTE: The format of the address is regular big endian, unlike the write command.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x82
3Length5
4AddressAddress 31:24
5Address 23:16
6Address 15:8
7Address 7:0
8LengthNumber of bytes to read
n+1Checksumcomputed
n+2ETX0x03

Reply

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x92
3Lengthlength of data+4
4AddressAddress 31:24
5Address 23:16
6Address 15:8
7Address 7:0
8-nDatadata
n+1Checksumcomputed
n+2ETX0x03

0x83 - ACK ping

This command does nothing, then returns an ACK.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x83
3Length0
4Checksumcomputed
5ETX0x03

Reply

ByteDescriptionValue
0ACK0x06

0x84 - ?

This command does nothing, then returns 4 zero bytes.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x84
3Length0
4Checksumcomputed
5ETX0x03

Reply

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x94
3Length4
40
50
60
70
8Checksumcomputed
9ETX0x03

0x85 - ?

This command does nothing, then returns 9 zero bytes.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x85
3Length0
4Checksumcomputed
5ETX0x03

Reply

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x95
3Length9
40
50
60
70
80
90
100
110
120
13Checksumcomputed
14ETX0x03

0x86 - Set Baud Rate

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x86
3Length1
4DataBaud Rate (see table below)
5Checksumcomputed
6ETX0x03

Known Values for BAUD, from page 80 of the MC68332 Technical Summary:

ValueRate
0xDA2400
0x6D4800
0x379600
0x1B19200
0x0E38400

Reply

ByteDescriptionValue
0ACK0x06

0x87 - Backspace Ping

This command doesn't do anything, but it responds in a non-standard way, returning a single byte, 0x08, rather than a properly structured STX/ETX packet.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x87
3Length0
4Checksumcomputed
5ETX0x03

Reply

ByteDescriptionValue
00x08

0x88 - Reset Receiver

This exits the ROM monitor and resets the CPU. Because it resets the CPU, no response is sent.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x88
3Length0
4Checksumcomputed
5ETX0x03

0x89 - Jump

This causes the ROM monitor to jump to the given address. Because it jumps out of the monitor, no response is sent. I suspect there are debug routines at known addresses that are used with this functionality.

Command

ByteDescriptionValue
0STX0x02
1Status0x00
2Command0x89
3Length4
4 Data Address (Big Endian)
5
6
7
8Checksumcomputed
9ETX0x03