The UART board from BatchPCB must be cursed. First, it took it (and the accompanying new memory board) over four months to get here, then it silently refused to cooperate when I finally soldered it. I was surprised, as it was really an easy board to design and solder, with only few components and lots of breathing room for everything. I thought there was nothing that could have gone wrong, but still, it had gone wrong.
Immediately after soldering, I beeped out all the connections on the board, checked for shorts between power and ground with a multimeter (as I always do before plugging anything new to the computer), connected it with a null-modem serial cable to my laptop and… I saw a black screen. The board was dumb and deaf.
It took me an hour or two of fiddling before I realized I had made a silly mistake. Before that, I replaced all chips, beeped out the connections again, swapped the UART ICs between the PCB and my previous wire-wrapped prototype but to no avail. So, I decided to break out the oscilloscope and probe signals on DB9 connectors, to see what was happening.
It wasn’t long before I realized that the signals I was looking for were all there, but not on the pins where I was expecting them to be. In fact, the layout of the connector was reversed. I made the mistake during one of the last cleanups of the schematics when I changed the version of a connector footprint to explicitly indicate that its metal shield was grounded (G1 and G2 on the diagram). In doing that, I mistakenly took a female connector, even though Eagle CAD indicates quite clearly which is which. If I recall correctly, I even noticed the different shape of the footprint back then, but somehow decided not to bother and simply neglected that fact without verifying.
Incorrect connector gender was the reason why I observed the signals in reversed order on the scope. Here is how the male and female DB-9 connector pins are ordered so that they match when connected (note the location of pin 1 in both cases):
My very first thought was that I wasted the board and that it had to go to trash. On a second thought though, I realized that there was a quick and dirty hack to solve the problem and still save the board. I simply needed to solder the connectors on the bottom side of the board. The final result looks a bit awkward, but works perfectly fine and is as solid as in the original plan.
Having fixed the connection problem, I fired up the whole thing again, and… I still saw nothing on the terminal screen.
The second problem was entirely not my fault, and as such was a bit more difficult to track down. It also proves that BatchPCB’s policy to manufacture more boards that you actually order is not really a special offer, but their means to avoid excessive returns.
My board had a manufacturing fault. There was a ground spill, shorting one of my address bus bits to ground, and effectively making this bit always-zero. Below is a close-up photo of how BatchPCB messed up my board. Compare it to a screenshot of the original design in Eagle CAD. Red arrow points at the place when ground layer went a bit beyond its designed boundary.
When I finally discovered the short, I fixed it by cutting a ground plane with a precision knife (this may be seen on the photo as well). After that, the board greeted me with a nice “Hello world!” from my UART test code.
Out of curiosity, I checked the other UART board I got from BatchPCB for free. It was OK, at least in this board region (no short to ground on the pin). I was unlucky to pick the wrong board. Nevertheless, there is a valuable lesson learned in this. BatchPCB may say that their minimum spacing requirement is 8 mils, but one should not trust that. My board was within the specs, but ground spill happened. From now on, whenever possible, I will leave more space between the polygons (ground or power) and the traces on my boards.
The schematics package and Eagle files I am posting in downloads today already have the connector gender problem fixed and the ‘isolation’ parameter for the ground planes set to 16 mils.