Package: avrdude Version: 5.5-4 Severity: grave Avrdude fails to complete a request to getting info, or to program a chip, through USBTiny adapter (http://www.ladyada.net/make/usbtinyisp/). The error message is: avrdude: error: usbtiny_receive: No error (expected 8, got 4)
There is a patch http://savannah.nongnu.org/patch/download.php?file_id=14754 discussed at http://savannah.nongnu.org/patch/?6233, that fixes this error among others. The patch attached here, is built and verified,with the Debian source package. The only changes are related to this fail. -- System Information: Debian Release: 5.0 APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 2.6.28_amd64 (SMP w/2 CPU cores; PREEMPT) Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages avrdude depends on: ii libc6 2.7-16 GNU C Library: Shared libraries ii libncurses5 5.7+20081213-1 shared libraries for terminal hand ii libreadline5 5.2-3 GNU readline and history libraries ii libusb-0.1-4 2:0.1.12-13 userspace USB programming library avrdude recommends no packages. Versions of packages avrdude suggests: ii avrdude-doc 5.5-5 documentation for avrdude -- no debconf information
--- avrdude-5.5.orig/usbtiny.c 2007-10-29 15:40:04.000000000 +0000 +++ avrdude-5.5/usbtiny.c 2009-01-14 02:39:55.000000000 +0000 @@ -138,7 +138,7 @@ fprintf( stderr, "Operation %d not defined for this chip!\n", op ); return -1; } - memset(cmd, 0, sizeof(cmd)); + memset(cmd, 0, 4); avr_set_bits(p->op[op], cmd); return pgm->cmd(pgm, cmd, res); @@ -286,19 +286,19 @@ int nbytes; // Make sure its empty so we don't read previous calls if it fails - memset(res, '\0', sizeof(res) ); + memset(res, '\0', 4 ); nbytes = usb_in( USBTINY_SPI, (cmd[1] << 8) | cmd[0], // convert to 16-bit words (cmd[3] << 8) | cmd[2], // " - res, sizeof(res), 8 * sck_period ); + res, 4, 8 * sck_period ); if (verbose > 1) { // print out the data we sent and received printf( "CMD: [%02x %02x %02x %02x] [%02x %02x %02x %02x]\n", cmd[0], cmd[1], cmd[2], cmd[3], res[0], res[1], res[2], res[3] ); } - return ((nbytes == sizeof(res)) && // should have read 4 bytes + return ((nbytes == 4) && // should have read 4 bytes res[2] == cmd[1]); // AVR's do a delayed-echo thing }