Like many hams, I have a scanner installed in my vehicle along with my radios. It’s great for keeping tabs on what’s going on around the area. The newer models of scanner from the major players (Uniden, Whistler, etc) typically have GPS capabilities to lock/unlock scanning banks depending on your location. This is super convenient, especially when you travel across states frequently as I do.
I own a BCD996P2 that I picked up secondhand from a friend a few years ago. It came with the standard Uniden “puck” GPS receiver, which plugs into the scanner’s rear DB9 port and includes a 12V accessory plug for a vehicle. Not the most elegant solution, but it works.
Recently, however, my GPS module died of unknown causes. One day it simply stopped powering up. A future post might dive into the internals to see what went bad, but in the meantime I wanted to cook up a solution that wasn’t going to cost me $80 for a new OEM module.
I happened to have several small GPS modules lying around from some ongoing projects. These are readily available on your favorite less-than-reputable online marketplace, and typically have uBlox NEO-xM modules installed. As it happens, they run on 3.3-5V, output TTL NMEA data, and are around 1 inch by 1 inch or so. Perfect for stuffing inside a small enclosure, or scanner…
So, after a little reading, I found that the most common method of adding “alternative” GPS sources to Uniden scanners is to patch into the RS-232 side of the serial port using a MAX232 level converter. RadioReference member jonwienke has a fantastic thread with several experiments using this method over on the RR forums. However, I didn’t have any MAX232 modules on hand, and I wanted a solution as soon as possible. Thankfully, there’s a second way to approach things.
We know BCD996P2 takes in RS-232 GPS data via its rear serial port. However, almost every modern MCU takes in TTL-level signals, and would quickly let the smoke out if fed with the +/- 7V (or more) that are typically present in true RS-232 signals. If we add up 2+2, we know that there must be internal level conversion going on somewhere inside the scanner. I was fully prepared to hunt all around both sides of the board for pins to tap into in order to break out the data lines.
However, after tearing down the unit, I found that Uniden was extremely nice to future would-be hackers. They very kindly broke out the RS-232 TX and RX lines to test points right next to both the DB9 connector and the level conversion IC (a TRS3221E, for reference). After probing these lines with my scope, I realized that this mod was going to be dead-simple. The two test points expose the TX/RX lines after conversion to +3.3V TTL levels. That means that all we need to do is run a wire from the NEO-6M module’s TX line to the scanner’s RX line, along with power and ground, and we’re done.
After finding a suitable power tap for 3.3V (I used the V_CPU test point) and running a ground wire to the nearest ground pad, I powered up the scanner to see whether it would smoke my module or not. Nothing blew up immediately, so I continued on.
I had to change the GPS baudrate from the default 4800bd to 9600bd (the NEO-6M default), but after that I was greeted with the above image. The scanner was talking to the GPS just fine, which meant all I had to do now was clean things up and hook up an antenna.
I routed the antenna connector through a hole I drilled in the back of the case. Originally, this area was where the rear M4 mounting hole was located. I never needed to mount anything there, and I’m not entirely sure why it’s there in the first place, so a 1/4-inch drill bit gave me a nice clean mounting point for the SMA bulkhead. Once that was done, and the unit was put back together, it was time to test it out!
Like I said earlier, this was probably one of the fastest mods I’ve done. Total time was a little over two hours from start to finish. The first module I tried ended up being a dud – it was outputting serial data at 3100baud, which is a totally non-standard data rate and I’m not entirely sure why that is. After swapping in a new unit (with a different pinout, because nothing is ever too easy) we were in business.
It goes without saying, but I offer no gaurantees if you decide to perform this mod yourself. There’s any number of weird things that could go wrong to easily break your scanner, and it’s nobody’s fault but your own if you manage to do that.
For a little more detailed info, check out my wiki page on this mod. Feel free to comment here with any questions, suggestions, or concerns, and I’ll try and respond!
Thanks for reading, and 73 for now!