|  | spi_butterfly - parport-to-butterfly adapter driver | 
|  | =================================================== | 
|  |  | 
|  | This is a hardware and software project that includes building and using | 
|  | a parallel port adapter cable, together with an "AVR Butterfly" to run | 
|  | firmware for user interfacing and/or sensors.  A Butterfly is a $US20 | 
|  | battery powered card with an AVR microcontroller and lots of goodies: | 
|  | sensors, LCD, flash, toggle stick, and more.  You can use AVR-GCC to | 
|  | develop firmware for this, and flash it using this adapter cable. | 
|  |  | 
|  | You can make this adapter from an old printer cable and solder things | 
|  | directly to the Butterfly.  Or (if you have the parts and skills) you | 
|  | can come up with something fancier, providing ciruit protection to the | 
|  | Butterfly and the printer port, or with a better power supply than two | 
|  | signal pins from the printer port.  Or for that matter, you can use | 
|  | similar cables to talk to many AVR boards, even a breadboard. | 
|  |  | 
|  | This is more powerful than "ISP programming" cables since it lets kernel | 
|  | SPI protocol drivers interact with the AVR, and could even let the AVR | 
|  | issue interrupts to them.  Later, your protocol driver should work | 
|  | easily with a "real SPI controller", instead of this bitbanger. | 
|  |  | 
|  |  | 
|  | The first cable connections will hook Linux up to one SPI bus, with the | 
|  | AVR and a DataFlash chip; and to the AVR reset line.  This is all you | 
|  | need to reflash the firmware, and the pins are the standard Atmel "ISP" | 
|  | connector pins (used also on non-Butterfly AVR boards).  On the parport | 
|  | side this is like "sp12" programming cables. | 
|  |  | 
|  | Signal	  Butterfly	  Parport (DB-25) | 
|  | ------	  ---------	  --------------- | 
|  | SCK	= J403.PB1/SCK	= pin 2/D0 | 
|  | RESET	= J403.nRST	= pin 3/D1 | 
|  | VCC	= J403.VCC_EXT	= pin 8/D6 | 
|  | MOSI	= J403.PB2/MOSI	= pin 9/D7 | 
|  | MISO	= J403.PB3/MISO	= pin 11/S7,nBUSY | 
|  | GND	= J403.GND	= pin 23/GND | 
|  |  | 
|  | Then to let Linux master that bus to talk to the DataFlash chip, you must | 
|  | (a) flash new firmware that disables SPI (set PRR.2, and disable pullups | 
|  | by clearing PORTB.[0-3]); (b) configure the mtd_dataflash driver; and | 
|  | (c) cable in the chipselect. | 
|  |  | 
|  | Signal	  Butterfly	  Parport (DB-25) | 
|  | ------	  ---------	  --------------- | 
|  | VCC	= J400.VCC_EXT	= pin 7/D5 | 
|  | SELECT	= J400.PB0/nSS	= pin 17/C3,nSELECT | 
|  | GND	= J400.GND	= pin 24/GND | 
|  |  | 
|  | Or you could flash firmware making the AVR into an SPI slave (keeping the | 
|  | DataFlash in reset) and tweak the spi_butterfly driver to make it bind to | 
|  | the driver for your custom SPI-based protocol. | 
|  |  | 
|  | The "USI" controller, using J405, can also be used for a second SPI bus. | 
|  | That would let you talk to the AVR using custom SPI-with-USI firmware, | 
|  | while letting either Linux or the AVR use the DataFlash.  There are plenty | 
|  | of spare parport pins to wire this one up, such as: | 
|  |  | 
|  | Signal	  Butterfly	  Parport (DB-25) | 
|  | ------	  ---------	  --------------- | 
|  | SCK	= J403.PE4/USCK	= pin 5/D3 | 
|  | MOSI	= J403.PE5/DI	= pin 6/D4 | 
|  | MISO	= J403.PE6/DO	= pin 12/S5,nPAPEROUT | 
|  | GND	= J403.GND	= pin 22/GND | 
|  |  | 
|  | IRQ	= J402.PF4	= pin 10/S6,ACK | 
|  | GND	= J402.GND(P2)	= pin 25/GND | 
|  |  |