Fun with level translators

Hmm, seems I’m blogging more than usual. Is that a good thing or a bad thing? I’m really not sure…

Well anyway, I’ve spent the best part of two days building up a GPS receiver. It’s based on a FasTrax iTrax321 “receiver on a chip” (actually a SiRFStar III chip and support components mounted on a small, thin PCB) and has one real purpose in life — to take a 5V supply and a GPS signal, and spit out an NMEA0138 serial data stream containing navigation data, and a 1PPS (one pulse per second) timing signal for my GPSDO.

Catch is, the SiRF chip is designed to run off of a very low voltage power supply. Like, 1.8V low. Oddly enough the iT321 takes 3.3V and regulates it down… Basically, this means I need an external level translator, a 3.3V regulator (for the iT321’s main power supply) and a 1.8V regulator (to provide a 1.8V reference for the translator). Using the highly scientific method of “buy ten of whatever’s cheapest”, I ended up with a tube of ten TI TXB0104 level translators, and ten each of the 3.3V and 1.8V versions of National Semiconductor’s LP5951 LDO regulators.

The datasheet for the iT321 is pretty concise as to what you need to do to make the chip work. It wants a Vcc between “X” and “Y” volts, the antenna track needs to have a Zo of 50 ohms, and so on. I’ve deviated from the spec a little, however — I wanted something I could build at home, so I stripped the board down to two copper layers, on a 0.8mm FR4 substrate. First power up, the iT321 booted, sent a couple of debug messages across the serial port, then immediately started sending NMEA0183 navigation (GPGGA) reports.

Problem is, the RS232 data was going as far as the iT321 side of the 220-ohm protection resistor (in the signal path of all I/Os that run between the iT321 and the TXB0104), but all the PC on the other end of my debug cable was seeing was… well… noise. A quick buzz with my scope revealed noise on both sides of the the TXB0104. And by noise I mean something that looked distinctly like the TXB0104 going into self-oscillation. A 40MHz sine wave on every line that was connected to a piece of wire, but the one open-circuit output was transmitting the exact data the iT321 was telling it to (the VALID FIX output).

So it seems the TXB010x series (TXB0104, TXB0108 and similar) have issues with driving inductive loads (like, say, a metre of six-core flexible wire). I added a 74LS244 buffer between the TXB0104 and the debug cable, and the noise vanished — in fact, I’ve been sitting here watching the GPS board’s output on Fastrax’s debug app, GPS Workbench. Eight SVs in use, two more being tracked, first fix in 17.8 seconds, and a HDOP of 0.90. No doubt about it, the SiRFStar III is a very nice receiver… I just hope its 1PPS output is as well-implemented as its navigation algorithms.

Plan of action now is to design the GPSDO (which will probably be based on a couple of 74HC dividers and a HCT4066 PLL chip) and then build up that and a Rev D GPS receiver board. Then I just need to build up the frequency counter and Zener diode tester…

EDIT: Before anyone asks, the iT321 is based on the SiRF GSC3LTf — see The specs for the iT321 are here: