THE DESIGN CYCLE
to bind. FTDI’s Vinculum USB Host Controller IC (VNC1L)
is actually a microcontroller with 64 KB of embedded
Flash program memory that encapsulates USB device
classes. In addition to hosting the USB device classes, the
VNC1L takes care of the USB Host Interface and data
transfer functions. If that isn’t enough binding of technology
for you, Vinculum series ICs automatically handle the
FAT12, FAT16, and FAT32 file systems.
I don’t know about you, but I’m not really worried
about what’s inside a VNC1L. The question is: can I use a
VNC1L without going to the University of USB? An initial
read of the VNC1L datasheet tells me that I have access to
a pair of USB 2.0 compliant host/slave ports. The whole
idea here is to put a PIC on the host side of a USB wire
and it looks like I can interface my microcontroller to
the VNC1L using the microcontroller’s UART, the
microcontroller’s SPI interface, or the microcontrollers’
parallel FIFO interface.
Okay, I’m hooked in. Let’s see if we can make the
VNC1L do some USB tricks without having to resort to
the USB encyclopedia. My VNC1L-laden VDIP2
development board can be seen in Photo 1. The VDIP2
is simply a carrier for the VNC1L. As you can see in the
photo, the VDIP2 is packaged in a 40 pin DIP form factor.
The standard pin spacing of the VDIP2 gives us easy
prototyping access to all of the VNC1L’s resources. The
VDIP2 is represented graphically in Schematic 1.
The VNC1L datasheet and supporting documentation
tell us that the VNC1L is really a specialized USB micro-controller with loads of built-in USB functionality. Reading
further into the datasheet reveals the fact that various
supervisory applications can be loaded into the VNC1L’s
Flash program memory. The VDIP2 comes from the factory
preloaded with Vinculum VDAP supervisory firmware.
This VDAP firmware allows the VNC1L to interface a disk
device and USB slave peripheral to the VDIP2’s pair of
USB ports. In this case, a disk is defined as a BOMS
(Bulk Only Mass Storage) Flash Disk, which is just another
way of saying USB memory stick or thumb drive.
Keyboards, mice, and printers fall into the USB slave
peripheral category.
As you can see in Schematic 1, the VDIP2 circuitry
isn’t complex at all. The USB interface is pretty much self-explanatory. However, there are VNC1L pins that perform
functions that aren’t posted in their schematic symbols.
For instance, driving the PROG# pin low and toggling the
RESET# pin high-low-high enables the VNC1L bootloader
mode with a UART programmer interface. When not
in bootloader mode, the ACBUS5 and ACBUS6 pins
determine the VNC1L’s command monitor interface.
Pulling up both ACBUS5 and ACBUS6 selects UART
interface mode. UART interface mode can also be
selected by pulling ACBUS5 and ACBUS6 logically low.
ACBUS5 pulled logically low with ACBUS6 pulled logically
high puts the VNC1L’s command monitor interface into
SPI mode. Reversing the SPI mode logic pattern on
ACBUS5 and ACBUS6 enables the command monitor
parallel FIFO interface. In UART interface mode, pins
ADBUS0 and ADBUS1 become the UART TXD and RXD
lines, respectively.
When the SPI command monitor interface is active,
the ADBUS0 pin becomes SCLK (Clock) and the ADBUS1
pin serves as SDI (Data IN). SDO (Data Out) duty falls to
the ADBUS2 pin and the ADBUS3 pin becomes the SPI
SS pin (Slave Select). Knowledge of how the VNC1L’s pins
morph is only half of the picture. To fully utilize the power
of the VNC1L, we will need to walk the road of firmware
understanding.
THE SOFT SIDE OF VINCULUM
In the midst of the Vinculum pinout conversation, I
threw out the words “command monitor.” It might be a
good idea to begin our Vinculum firmware discussion with
a definition of this phrase. Basically, the command monitor
is a firmware entity that is used by a microcontroller to
send and receive data and commands to the VNC1L. In a
similar manner to PC DOS command windows, the
VNC1L command monitor issues a prompt to the micro-controller informing it that the command monitor is ready
for the next command. The command monitor responds
to commands from the microcontroller by issuing status
and error information just as a PC DOS command window would.
The VNC1L documentation can be confusing when it
comes to the word “monitor.” So, let’s see if I can prevent
the confusion this may cause you if you decide to read
the VNC1L datasheet and firmware guide. The command
monitor is a part of the Vinculum firmware that runs in
the VNC1L’s internal microcontroller. A monitor is the
hardware device that sits at the other
end of the VNC1L firmware’s command
monitor code module. In our case,
the monitor is a PIC. The VNC1L
documentation will sometimes leave the
word command out of a command
monitor discussion and simply call the
command monitor a monitor.
The manner in which the
microcontroller interfaces with the
command monitor (UART, SPI, FIFO) is
determined by VNC1L pins ADCBUS5
and ADCBUS6. The pins that support
December 2008 17
■ PHOTO 1. The VDIP2 is designed to be plugged into a 40-pin IC socket. The
VDIP2’s pins provide direct access to the VNC1L’s UART, parallel FIFO, and SPI
interfaces.