TSIP Packet Structure

TSIP stands for Trimble Standard Interface Protocol, and it is used in products from Trimble such as the Thunderbolt and differs from NMEA which is a lot simpler and only contains status data.

The TSIP protocol is based on the transmission of packets of information between the user equipment and the GPS receiver. Each packet includes an identification code that identifies the meaning and format of the data that follows. Each packet begins and ends with control characters.

TSIP packet structure is the same for both commands and reports. The packet format is:

<DLE> <id> <data string bytes> <DLE> <ETX>

Where:

  • <DLE> is the byte 0×10
  • <ETX> is the byte 0×03
  • <id> is a packet identifier byte, which can have any value excepting <ETX> and <DLE>.

The bytes in the data string can have any value. To prevent confusion with the frame sequences <DLE> <id> and <DLE> <ETX>, every <DLE> byte in the data string is preceded by an extra <DLE> byte (‘stuffing’). These extra <DLE> bytes must be added (‘stuffed’) before sending a packet and removed after receiving the packet. Notice that a simple <DLE> <ETX> sequence does not necessarily signify the end of the packet, as these can be bytes in the middle of a data string. The end of a packet is <ETX> preceded by an odd number of <DLE> bytes.

Multiple-byte numbers (integer, float, and double) follow the ANSI / IEEE Std. 754 IEEE Standard for binary Floating-Point Arithmetic. They are sent most-significant byte first. Note that switching the byte order will be required in Intel-based machines. The data types used in the ThunderBolt TSIP are defined below.

  • UINT8 – An 8 bit unsigned integer (0 to 255).
  • INT8 – An 8 bit signed integer (-128 to 127).
  • UINT16 – A 16 bit unsigned integer (0 to 65,535).
  • INT16 – A 16 bit signed integer (-32,768 to 32,767).
  • UINT32 – A 32 bit unsigned integer (0 to 4,294,967,295)
  • INT32 – A 32 bit signed integer (-2,147,483,648 to 2,147,483,647).
  • Single — Float (4 bytes) (3.4×10-38 to 1.7×1038) (24 bit precision)
  • Double —Float (8 bytes) (1.7×10-308 to 3.4×10308) (53 bit precision)

An example packet:

0x10,
0x8F, 0xAB,
0x00, 0x03, 0xE5, 0x1F, 0x06, 0x88, 0x00, 0x00,
0x0C, 0x17, 0x36, 0x16, 0x18, 0x01, 0x07, 0xDC,
0x10, 0x03

Your challenge is to decode this (hint: it is a timing packet).  I will post more about the breakdown of this kind of packet in the next post.

 

Trimble Thunderbolt Monitor Project (LCD)

I decided I would like to start a new construction project for 2012. Having thought carefully I finalised on a 10MHz reference which can be used as a standard for test equipment, or to lock the master oscillator (TCXO) of a rig/transverter to a solid, accurate source. I did quite a bit of research over Christmas and concluded that the best bet would be to start with something commercial and add to it. It is possible to start from scratch but with the surplus market so cheap why not spend the time adding the sugar and actually using it.

My research eventually pointed me to the Trimble Thunderbolt which is a commercial GPS disciplined clock and readily available on eBay. This was to be the basis of the project. I ordered one and it arrived today.

20120109-213634.jpg

To interact with the Thunderbolt you plug it into a PC and use some proprietary software which reads the TSIP data stream. TSIP is the protocol used and is not as simple as the typical NMEA stream you would get from a GPS. Plugging it into a computer is not the most useful way of determining if a lock is present so I decided to add an LCD screen. It is possible to get quite a bit of information from the unit thanks to the brilliant documentation from Trimble.

My plan is to build the GPS into a 19″ rack enclosure, add a 4×20 LCD screen and a few buttons for sending commands. As with most projects others have been there before and there is plenty of similar projects on the web. Most are much simpler than what I had planned. A few days ago I stumbled across a posting by VK4GHZ announcing his monitor for sale. When I looked at what it did I was very excited. I hoped it would be an open project which perhaps I could build. He has decided to make it a commercial venture and it costs AUD $160 + shipping! Wow!

I have decided to create my own project and document the progress here. I will publish anything I can including the code in the hope that someone benefits from it. I am a programmer by trade but still fairly new to programming micro controllers. The first attempt will be by using a PICAXE and a uM-FPU floating point processor. Few bits and bobs ordered so will get on it once they arrive.

Useful links