Take a look around on your desk.
Go on, don't kid me that you've not got a development board within reach.
How do you talk to that board?
At the very least, if it's got an MCU on it, you'll likely need a way to program it. Hope you've got your programmer of choice handy?
If it's got sensors on it, there's a great chance that there's an I2C bus somewhere within the circuit. There are a few tools you can use for that, ranging from cheap to... well, not so cheap...
If there's also a display on there, well SPI is usually favored for those more data-intensive applications.
Even a basic board can be loaded with physical interfaces — we've listed three separate ones here already for a simple PCB with a display and a few sensors.
Although a minimal board, this thought exercise already needs a suite of equipment to get it up and running, debugged, and verified.
Your programmer of choice will be duly enacted to load your boards bitstream, binary or other.
A Bus Pirate can be pulled into service when trying to diagnose why your T/Rh (for example) I2C device is giving you nothing but NACKs.
And finally, you might get lucky — things might just work, requiring maybe only some basic access to the boards DEBUG header, providing it's functional enough to spit out and receive some serial strings.
Already, that one board you're trying to raise up off the slab has involved a non-trivial number of various bits of support equipment, and that's just to get it up and running! On my desk, that means I've got a J-Link of some flavor, a USB-serial UART adapter, maybe even my Logic analyzer pod.
That's not only a significant amount of tooling to have cluttering the desk, but it doesn't always travel well — we maybe don't want to risk taking that many — usually quite expensive -bits of tooling on the road, or through airport security, over and over.
Tigard looks set to reduce your desk clutter, and lighten your load when traveling, thanks to its incredibly well conceived use of the FTDI FT2232H, a multi-protocol serial converter IC that packs all of the interfaces we've mentioned (and more) into a single, easy-to-carry board that is essentially an entire programming and serial interface debugging tool in one!
If you've ever used one of the ubiquitous FTDI cables, you can use Tigard. Based upon the FT2232H from FTDI chip, Tigard is the embodiment of the full capabilities offered by the Multi-Protocol Synchronous Serial Engine (MPSSE) contained within certain FTDI parts.
If some of these keywords are ringing a bell with you, perhaps you've had experience of Blinka from Adafruit. Blinka uses the same FTDI MPSSE engine, on the same FT232H IC, in order to expose a world of embedded interfaces (I2C, JTAG, SPI, etc), over a single USB serial port. This allows you to target these embedded interfaces from the comfort of a Python sketch running on your PC.
Tigard is very similar to the Adafruit FT2232H breakout, but with less breakout board, and more bells and whistles, featuring a number of design features that make it more suitable for benchtop debugging — and you where this is going — we're going to dig into the design and see what makes Tigard tick!
As we've already highlighted, the beating heart of Tigard is the hugely capable FT2232H from FTDI Chip.
While they may have ruffled a few feathers with their driver debacle of some years prior — sending many a maker towards serial converter products form other vendors — there's a huge amount more to the FTDI product offering than a mere USB-Serial converter.
A number of FTDI parts, including the FT2232H obviously, feature the MPSSE — this is the Swiss Army knife of embedded serial protocol interfaces. With an MPSSE-enabled part, you can speak not only UART, but USART (SPI for example) or I2C / TwoWire.
You can also program devices and MCU by instantiating the MPSSE as a SWD, or even JTAG interface.
And if those feature weren't already enough, you can drive capable pins on the IC as GPIO! With all of this functionality in a single IC, this part has the potential to be the formation (and bulk of operation) of your next programming and ATE setup — little else is needed to support all the functions used in the bring-up of nearly any embedded board.
What does it take to go from a bare IC, beyond a breakout board, and all the way to application specific tooling? Well, for a versatile tool, one of the very first things you might consider is that you will likely be looking at ways to support the varying system voltages that your various target boards will be operating at.
When you are considering multiple signals, one of the easiest ways to get two different systems, on different voltages to talk to each other — without running the risk of one of them blowing their lid! — is to employ a set of SN74LVCxT245 (or similar). In the case of Tigard, the SN74LVC8T245 is chosen, with eight channels available.
Having the ability to translate between two different voltages, these parts are also bi-directional, owing to the DIR pin that we can see on pin 2 of the part.
You might ask how that works, given in the schematic excerpt below, the pins are configured with static pull resistors — with U5 DIR tied high, and U6 DIR tied low. Well... in this instance, these parts are being used as uni-directional level shifters.
There is some sound logic there. Not only are there enough signals to fan out over two devices — but they can also handily be grouped by perspective! That is, there are a group of signals that are always going to be "outbound" from the FT2232H, such as CLK, DO, CS. These signals will need shifting from the V_REF level of the Tigard — at 3.3V — to the V_REF level of the target device, which could be 1.8V, or 5.0V, etc.
Conversely, there are signals that will also always be "inbound" to the FT2232H, such as UART_RX, or the suggestively named "ICE_DONE." These signals require the opposite in terms of level shift, instead requiring the V_REF level to be adjusted the other way, from that of the target device to the 3.3V used on the Tigard board.
As certain protocols require synchronous, simultaneous bi-directional communications, using a system where the DIR of the level shifters is toggled as required, is not really feasible — this is a logical approach to achieving the required signal level conversion, while not needing to use protocol-specific level converters, and the higher price that is usually associated with them!
These are versatile parts, with applications not only in test and development gear, but anywhere that requires two different systems with two different voltage reference levels to communicate.
If you are perhaps looking to retrofit some old equipment, maybe for some circuit bending fun, or on the path towards creating the HMI interfaces of your wildest dreams, there's a good chance you might want to keep these parts in mind!
With the MPSSE handling the signaling interfaces, and the SN74LVC8T245 level translators handling the electrical interfacing, the final set of parts that make Tigard so versatile are its connectors themselves.
We can see from the Adafruit FT2232H breakout that we linked at the top of the article, Tigard has ease of use in mind.
With things like UART and JTAG available on standard 0.1" headers, it's straightforward enough to connect them to whatever format your target header takes.
When it comes to the SWD/Cortex header, it's nice to see that Tigard has opted for the standard 1.27mm pitch and pin out that is used by target boards that implement that same interface.
When we look at the I2C port, bottom left of Tigard, we see a footprint for the very same connector that Adafruit use for their STEMMA QT I2C connection system.
Alternately, you might recognize it as the SparkFun Qwiic connector — but the point is that out of the box, Tigard is compatible with both.
With only a few simple cables, kept in the box with Tigard, you are safe in the knowledge that you are virtually guaranteed to be able to hook up to whatever board is sat on your desk at that moment!