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 |