2006-11-22: I have just learned of a new project, "USBtiny". It sounds like it does more than my design did, all with clearly GPL-licensed software.
I am no longer working on this project. I encourage anyone who is interested to continue it.
Download [This file is an agumented version of the README.txt file included in the distribution]
Portions written by me (Jeff Epler) are covered by the GNU GPL. Obviously, a firmware image does not become GPL merely because it has been uploaded to a part by this software.
Python is distributed separately, under an open source license. See http://www.python.org.
Now, plug the programmer in, attach it to a part you don't care about, and run
$ uavrp-program.pyyour part should be detected and erased, followed by an error about the argument list (because no firmware was listed on the commandline)
C:\python23\uavrp-driver\uavrp.inf
Now, attach the programmer to a part you don't care about and run
C:\> uavrp-programyour part should be detected and erased, followed by an error about the argument list (because no firmware was listed on the commandline)
uavrp-program firmware.hexuavrp currently only programs firmware, not eeprom. Definitions for only 2 parts (at90s2313, atmega16) exist, and only one has been tested. (atmega16).
uavrp-program's only argument is an "ihex"-format image to be programmed on the attached device.
A Template is constructed from a 32-bit hex number, followed by a list of zero or more input parameters given as a bit shift and a bit mask, followed by the output parameter given as a bit shift and a bit mask. This is different to the way Atmel's documentation describes things. Template.fromstr() is a factory method which takes a specification from the datasheets (such as "0010 1000 xxxx xxaa bbbb bbbb oooo oooo") and creates a Template from it, with the following assumptions:
Example:
class At90s2313(Programmer, unbanked_memory, unbanked_eeprom): signature = 0x1e9101 read_program_lo = Template(0x20000000, [(8, 0x3ff)]) read_program_hi = Template(0x28000000, [(8, 0x3ff)]) write_program_lo = Template(0x40000000, [(8, 0x3ff), (0, 0xff)]) write_program_hi = Template(0x48000000, [(8, 0x3ff), (0, 0xff)]) read_eeprom = Template(0xa0000000, [(8, 0x7f)]) write_eeprom = Template(0xc0000000, [(8, 0x7f)]) write_lock = Template(0xace00000, [(17, 0x3)]) chip_erase = Template(0xac800000)
Obvious stuff, like reading flash, reading/writing firmware, lock bits and fuse bits. Getting the timing right, not just "good enough to program my devices". Supporting more devices. Allowing the user to override the detected part.
Less obvious stuff, like "SPI16" to program 4 bytes at once, as a speedup (since usb latency seems to be the biggest time suck)
| Name | Last modified | Size | Description | |
|---|---|---|---|---|
| Parent Directory | - | |||
| HEADER.html | 20-Oct-2008 11:16 | 5.2K | ||
| README.txt | 27-Mar-2004 16:11 | 4.0K | ||
| uavrp-1.0.1.zip | 31-Jan-2005 08:20 | 68K | Source for Windows or Linux | |
| uavrp-1.0.win32-py2.3.exe | 27-Mar-2004 16:13 | 66K | Installer for Windows | |
| uavrp-1.0.win32.zip | 27-Mar-2004 16:13 | 49K | Binary Zip for Windows | |
| uavrp-1.0.zip | 27-Mar-2004 16:13 | 57K | Source for Windows or Linux | |
| uavrp-1.0/ | 05-Apr-2004 11:04 | - | ||