Pinout
Tonight I spent some time thinking about the pinout for the connectors. One of the major issues with Rev 1 was that the pinout was incompatible with the boards when they were touching each other. The lesson I learned from that mistake was to be very careful when using the mirror command on connector components in the schematic editor (the mirror command is usually more trouble than it's worth). I also learned that it's a good idea to have a supply of Arduinos on hand.
I've since fixed and tested the new pinout on the Rev 2 boards. The boards interconnect perfectly and have no issues with shorting power and ground. As a precaution, I added PTCs, a resettable fuse on the VLED line. With the design ready to work for normal usage, I wanted to focus on user error. A user will connect to one of the two "IN" connectors on the board. So far, I've only used individual jumper wires. However, it's possible that a user could use something like a ribbon cable with a matching pitch. I wanted to find out what would happen if the user flipped the cable around and installed it backwards.
First, I looked at the schematic. Normally, swapping power and ground would be a problem. However, in this case, swapping VLED and GND connects ground to the anodes of the LEDs. Next, I checked the "Absolute Maximum Ratings" section of the TLC5917 datasheet. The limits seemed tight, especially when applying negative voltages to the pins. This situation would arise if 12 V were applied to ground and 5 V were applied to the pins, such as CLK and SDI. The chip would think it was getting -7 V on some of its pins.
After thinking about the various ways to arrange the pinout, I was unable to come up with a solution that would stay inside the maximum ratings when the connector was reversed. The last thing I needed to do was test the pinout. Swapping my individual jumper wires around, I plugged it in and expected magic smoke to come out. I was pleasantly surprised when nothing popped. The only component that was getting hot was the 22R resistor bank on the Arduino, located near the USB connector. Fortunately, the resistor bank was able to survive a few minutes of punishment. I then swapped everything around, and the system functioned normally.
I'm satisfied with the current pinout. The system withstood a reversed connector long enough for the user to realize something was wrong. Hopefully, the instinct to disconnect the power when things don't go as expected will win out. Ultimately, it's expensive, if not impossible, to design for every contingency. I did test a few other pinouts and had far worse results. I hope my new Arduinos will arrive soon.