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
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x80 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | ACK | 0x06 |
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
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x87 |
3 | Length | 1 |
4 | | 0x57 |
5 | Checksum | computed |
6 | ETX | 0x03 |
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
Byte | Description | Value |
0 | ACK | 0x06 |
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.
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x80 |
3 | Length | length of data+4 |
4 | Address | Address 15:8 |
5 | Address 7:0 |
6 | Address 31:24 |
7 | Address 23:16 |
8-n | Data | data |
n+1 | Checksum | computed |
n+2 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | ACK | 0x06 |
0x81 - Ignored
This command packet is ignored and produces no response.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x81 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
No reply is sent.
0x82 - Read Memory
NOTE: The format of the address is regular big endian, unlike the write command.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x82 |
3 | Length | 5 |
4 | Address | Address 31:24 |
5 | Address 23:16 |
6 | Address 15:8 |
7 | Address 7:0 |
8 | Length | Number of bytes to read |
n+1 | Checksum | computed |
n+2 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x92 |
3 | Length | length of data+4 |
4 | Address | Address 31:24 |
5 | Address 23:16 |
6 | Address 15:8 |
7 | Address 7:0 |
8-n | Data | data |
n+1 | Checksum | computed |
n+2 | ETX | 0x03 |
0x83 - ACK ping
This command does nothing, then returns an ACK.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x83 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | ACK | 0x06 |
0x84 - ?
This command does nothing, then returns 4 zero bytes.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x84 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x94 |
3 | Length | 4 |
4 | | 0 |
5 | | 0 |
6 | | 0 |
7 | | 0 |
8 | Checksum | computed |
9 | ETX | 0x03 |
0x85 - ?
This command does nothing, then returns 9 zero bytes.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x85 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x95 |
3 | Length | 9 |
4 | | 0 |
5 | | 0 |
6 | | 0 |
7 | | 0 |
8 | | 0 |
9 | | 0 |
10 | | 0 |
11 | | 0 |
12 | | 0 |
13 | Checksum | computed |
14 | ETX | 0x03 |
0x86 - Set Baud Rate
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x86 |
3 | Length | 1 |
4 | Data | Baud Rate (see table below) |
5 | Checksum | computed |
6 | ETX | 0x03 |
Known Values for BAUD, from page 80 of the MC68332 Technical Summary:
Value | Rate |
0xDA | 2400 |
0x6D | 4800 |
0x37 | 9600 |
0x1B | 19200 |
0x0E | 38400 |
Reply
Byte | Description | Value |
0 | ACK | 0x06 |
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
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x87 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
Reply
Byte | Description | Value |
0 | | 0x08 |
0x88 - Reset Receiver
This exits the ROM monitor and resets the CPU. Because it resets the CPU, no response is sent.
Command
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x88 |
3 | Length | 0 |
4 | Checksum | computed |
5 | ETX | 0x03 |
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
Byte | Description | Value |
0 | STX | 0x02 |
1 | Status | 0x00 |
2 | Command | 0x89 |
3 | Length | 4 |
4 |
Data |
Address (Big Endian) |
5 |
6 |
7 |
8 | Checksum | computed |
9 | ETX | 0x03 |