Introduction and Overview: Host, Cable, Device
(If you are into programmable devices already, you can safely skip this
In contrast to static fixed-function chips which normally don't give
you much flexibility and are either not highly integrated (flip-flops,
counters,...) or only available for certain special high-volume applications
(USB FIFO,...), there are highly-integrated programmable ICs.
These chips can be used to build circuits for very complex tasks with
pretty few components, typically consume little power and can
be made to completely
change their function without touching the hardware on the board.
Programmable devices play a vital role in hardware design -- from
advanced hobbyist's projects to large-scale industrial applications.
In contrast to fixed-function chips which work out of the box, a
programmable device typically has to be programmed before it will
do anything useful.
So, as a developer, you need a "host" computer and additional
software and hardware tools to test and build your electronic gadgets.
Stepping back and looking at the grand total, what we have is:
The host computer: This is where the programs are written and compiled
before they are loaded onto the programmable device. We may also have a
simulator and a debugger here.
I'm using an i386-based box running Linux and freely available tools
descibed in detail for each type of programmable device presented on my
The interface cable: This is what connects the host computer with
the programmable device. Typically it's not a simple cable but has some
additional circuits inside since it has to somehow connect a plug on
the host computer (usually USB, or legacy serial or parallel port)
with the programmable chip (usually JTAG or SPI interface).
I'm using my self-developed universal "cable" called
The programmable device: This may be a microcontroller such as
a member of the 8-bit AVR RISC family
by Atmel or a 32-bit ARM core like
the AT91SAM7 (also from Atmel).
can also be a programmable logic device like a CPLD or an FPGA,
e.g. to pick just one, a member of the XC9500 family from
USB-AtmelPrg: Wolfgang's Universal Interface Cable
[click to enlarge: 58kb JPG]
USB-AtmelPrg was originally a one-afternoon design for a USB-based
Atmel AVR programming solution back in 2005 and this also explains
how USB-AtmelPrg got its name.
Since then, it has been extended to cover all host computer
communication I need when designing with programmable devices.
Although USB-AtmelPrg is an interface cable for
developers running Linux hosts, information in the following chapters
dealing with the programmable ICs themselves is largely
independent of the precise
interface cable or host operating system.
But of course, I typically include examples taken from my setup.
The USB-AtmelPrg page has much more details,
contains software and the complete circuit diagrams for download.
Historic note: Before developing the USB-AtmelPrg cable, I used an
interface cable plugged into the parallel port of the host computer.
This cable was only used to program certain AVR microcontrollers and it
is no longer maintained. If you are interested in this much simpler but
less powerful solution, read more...
Programmable Devices: AVR, ARM, CPLD
These pages feature digital programmable devices which I have been working
with. Follow the links to get detailed information on how these chips can
be programmed using freely available tools.
AVR microcontrollers: 8-bit cheap but powerful
microcontrollers with built-in SRAM, flash and EEPROM made by
AVR32 microcontrollers: 32-bit power efficient
and fairly fast microcontrollers made
Focus is on those versions with built-in SRAM and flash (UC series).
AT91SAM7 ARMs: higly integrated 32-bit
microcontrollers with build-in SRAM and flash made by
Atmel. More on ARMs.
STM32 ARMs: excellent 32-bit Cortex-M
microcontrollers with build-in SRAM and flash, lots of peripherals and
the F4 series even has an FPU! More on ARMs.
CPLDs: Complex programmable logic devices; there
are a lot of them on the market but I'm using the ones from
XILINX since they also offer very good
free software for Linux and Windows.