From f13e4f97d51b17750f66e09ec9773f4e87546ca2 Mon Sep 17 00:00:00 2001 From: Olaf Rempel Date: Thu, 16 Oct 2014 21:58:36 +0200 Subject: [PATCH] add untested devices --- ispprog.c | 136 +++++++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 64 deletions(-) diff --git a/ispprog.c b/ispprog.c index a90ae54..5c57d50 100644 --- a/ispprog.c +++ b/ispprog.c @@ -131,6 +131,7 @@ static uint8_t spi_speed = SPI_SPEED_PROBE; #define POLL_7F 0x02 /* value 0x7F can not be polled from flash/eeprom */ #define POLL_80 0x04 /* value 0x80 can not be polled from flash/eeprom */ #define POLL_FF 0x08 /* value 0xFF can not be polled from flash/eeprom */ +#define POLL_UNTESTED 0x80 /* device not tested */ struct _device { uint8_t sig[3]; /* device signature */ @@ -143,99 +144,99 @@ static struct _device device; static const struct _device devices[] PROGMEM = { { { 0x1E, 0x90, 0x01 }, 0x13, 0x00, POLL_00 | POLL_FF }, /* at90s1200 */ -// { { 0x1E, 0x90, 0x05 }, 0x55, ???, ??? }, /* tiny12 */ -// { { 0x1E, 0x90, 0x06 }, 0x56, ???, ??? }, /* tiny15 */ -// { { 0x1E, 0x90, 0x07 }, 0xFF, ???, ??? }, /* tiny13 */ + { { 0x1E, 0x90, 0x05 }, 0x55, 0x00, POLL_UNTESTED }, /* tiny12 */ + { { 0x1E, 0x90, 0x06 }, 0x56, 0x00, POLL_UNTESTED }, /* tiny15 */ + { { 0x1E, 0x90, 0x07 }, 0xFF, 0x00, POLL_UNTESTED }, /* tiny13 */ { { 0x1E, 0x91, 0x01 }, 0x20, 0x00, POLL_7F | POLL_80 | POLL_FF }, /* at90s2313 */ -// { { 0x1E, 0x91, 0x02 }, 0x48, ???, ??? }, /* at90s2323 */ -// { { 0x1E, 0x91, 0x03 }, 0x4C, ???, ??? }, /* at90s2343 */ -// { { 0x1E, 0x91, 0x05 }, 0x34, ???, ??? }, /* at90s2333 */ + { { 0x1E, 0x91, 0x02 }, 0x48, 0x00, POLL_UNTESTED }, /* at90s2323 */ + { { 0x1E, 0x91, 0x03 }, 0x4C, 0x00, POLL_UNTESTED }, /* at90s2343 */ + { { 0x1E, 0x91, 0x05 }, 0x34, 0x00, POLL_UNTESTED }, /* at90s2333 */ { { 0x1E, 0x91, 0x08 }, 0x20, 0x0F, POLL_FF }, /* tiny25 (at90s2313 devcode) */ { { 0x1E, 0x91, 0x09 }, 0x5E, 0x0F, POLL_FF }, /* tiny26 */ { { 0x1E, 0x91, 0x0A }, 0x5E, 0x0F, POLL_FF }, /* tiny2313 (tiny26 devcode) */ { { 0x1E, 0x91, 0x0B }, 0x20, 0x0F, POLL_FF }, /* tiny24 (at90s2313 devcode) */ -// { { 0x1E, 0x91, 0x0C }, 0xFF, 0x0F, POLL_FF }, /* tiny261a */ + { { 0x1E, 0x91, 0x0C }, 0xFF, 0x0F, POLL_FF | POLL_UNTESTED }, /* tiny261a */ -// { { 0x1E, 0x92, 0x01 }, 0x28, ???, ??? }, /* at90s4414 */ -// { { 0x1E, 0x92, 0x02 }, 0x6C, ???, ??? }, /* at90s4434 */ -// { { 0x1E, 0x92, 0x03 }, 0x30, ???, ??? }, /* at90s4433 */ -// { { 0x1E, 0x92, 0x05 }, 0xFF, 0x1F, POLL_FF }, /* mega48 */ + { { 0x1E, 0x92, 0x01 }, 0x28, 0x00, POLL_UNTESTED }, /* at90s4414 */ + { { 0x1E, 0x92, 0x02 }, 0x6C, 0x00, POLL_UNTESTED }, /* at90s4434 */ + { { 0x1E, 0x92, 0x03 }, 0x30, 0x00, POLL_UNTESTED }, /* at90s4433 */ + { { 0x1E, 0x92, 0x05 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega48 */ { { 0x1E, 0x92, 0x06 }, 0x20, 0x1F, POLL_FF }, /* tiny45 (at90s2313 devcode) */ { { 0x1E, 0x92, 0x07 }, 0x20, 0x1F, POLL_FF }, /* tiny44 (at90s2313 devcode) */ -// { { 0x1E, 0x92, 0x08 }, 0xFF, 0x1F, POLL_FF }, /* mega461a */ -// { { 0x1E, 0x92, 0x0A }, 0xFF, 0x1F, POLL_FF }, /* mega48pa */ -// { { 0x1E, 0x92, 0x0D }, 0x5E, 0x1F, POLL_FF }, /* tiny4313 (tiny26 devcode) */ + { { 0x1E, 0x92, 0x08 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega461a */ + { { 0x1E, 0x92, 0x0A }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega48pa */ + { { 0x1E, 0x92, 0x0D }, 0x5E, 0x1F, POLL_FF | POLL_UNTESTED }, /* tiny4313 (tiny26 devcode) */ { { 0x1E, 0x93, 0x01 }, 0x38, 0x00, POLL_7F | POLL_80 | POLL_FF }, /* at90s8515 */ -// { { 0x1E, 0x93, 0x03 }, 0x68, ???, ??? }, /* at90s8535 */ -// { { 0x1E, 0x93, 0x05 }, 0x65, ???, ??? }, /* mega83 */ -// { { 0x1E, 0x93, 0x06 }, 0x3A, 0x1F, POLL_FF }, /* mega8515 */ + { { 0x1E, 0x93, 0x03 }, 0x68, 0x00, POLL_UNTESTED }, /* at90s8535 */ + { { 0x1E, 0x93, 0x05 }, 0x65, 0x00, POLL_UNTESTED }, /* mega83 */ + { { 0x1E, 0x93, 0x06 }, 0x3A, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega8515 */ { { 0x1E, 0x93, 0x07 }, 0x76, 0x1F, POLL_00 | POLL_FF }, /* mega8 */ -// { { 0x1E, 0x93, 0x08 }, 0x69, 0x1F, POLL_FF }, /* mega8535 */ + { { 0x1E, 0x93, 0x08 }, 0x69, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega8535 */ { { 0x1E, 0x93, 0x0A }, 0xFF, 0x1F, POLL_FF }, /* mega88 (no devcode) */ { { 0x1E, 0x93, 0x0B }, 0x20, 0x1F, POLL_FF }, /* tiny85 (at90s2313 devcode) */ { { 0x1E, 0x93, 0x0C }, 0x20, 0x1F, POLL_FF }, /* tiny84 (at90s2313 devcode) */ -// { { 0x1E, 0x93, 0x0D }, 0xFF, 0x1F, POLL_FF }, /* tiny861a */ -// { { 0x1E, 0x93, 0x0F }, 0xFF, 0x1F, POLL_FF }, /* mega88pa */ -// { { 0x1E, 0x93, 0x11 }, 0xFF, 0x1F, POLL_FF }, /* tiny88 */ -// { { 0x1E, 0x93, 0x81 }, 0xFF, 0x1F, POLL_FF }, /* at90pwm2/3 */ -// { { 0x1E, 0x93, 0x82 }, 0xFF, 0x3F, POLL_FF }, /* at90usb82 */ -// { { 0x1E, 0x93, 0x83 }, 0xFF, 0x1F, POLL_FF }, /* at90pwm2b/3b */ -// { { 0x1E, 0x93, 0x89 }, 0xFF, 0x1F, POLL_FF }, /* mega8u2 */ + { { 0x1E, 0x93, 0x0D }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* tiny861a */ + { { 0x1E, 0x93, 0x0F }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega88pa */ + { { 0x1E, 0x93, 0x11 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* tiny88 */ + { { 0x1E, 0x93, 0x81 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* at90pwm2/3 */ + { { 0x1E, 0x93, 0x82 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* at90usb82 */ + { { 0x1E, 0x93, 0x83 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* at90pwm2b/3b */ + { { 0x1E, 0x93, 0x89 }, 0xFF, 0x1F, POLL_FF | POLL_UNTESTED }, /* mega8u2 */ -// { { 0x1E, 0x94, 0x01 }, 0x60, ???, ??? }, /* mega161 */ -// { { 0x1E, 0x94, 0x02 }, 0x64, ???, ??? }, /* mega163 */ + { { 0x1E, 0x94, 0x01 }, 0x60, 0x00, POLL_UNTESTED }, /* mega161 */ + { { 0x1E, 0x94, 0x02 }, 0x64, 0x00, POLL_UNTESTED }, /* mega163 */ { { 0x1E, 0x94, 0x03 }, 0x74, 0x3F, POLL_FF }, /* mega16 */ -// { { 0x1E, 0x94, 0x04 }, 0x63, 0x3F, POLL_FF }, /* mega162 */ -// { { 0x1E, 0x94, 0x05 }, 0x78, 0x3F, POLL_FF }, /* mega169 */ + { { 0x1E, 0x94, 0x04 }, 0x63, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega162 */ + { { 0x1E, 0x94, 0x05 }, 0x78, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega169 */ { { 0x1E, 0x94, 0x06 }, 0xFF, 0x3F, POLL_FF }, /* mega168 (no devcode) */ -// { { 0x1E, 0x94, 0x0A }, 0x74, 0x3F, POLL_FF }, /* mega164pa (mega16 devcode) */ -// { { 0x1E, 0x94, 0x0B }, 0xFF, 0x3F, POLL_FF }, /* mega168pa */ -// { { 0x1E, 0x94, 0x0F }, 0xFF, 0x3F, POLL_FF }, /* mega164a */ -// { { 0x1E, 0x94, 0x82 }, 0xFF, 0x3F, POLL_FF }, /* at90usb162 */ -// { { 0x1E, 0x94, 0x88 }, 0xFF, 0x3F, POLL_FF }, /* mega16u4 */ -// { { 0x1E, 0x94, 0x89 }, 0xFF, 0x3F, POLL_FF }, /* mega16u2 */ + { { 0x1E, 0x94, 0x0A }, 0x74, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega164pa (mega16 devcode) */ + { { 0x1E, 0x94, 0x0B }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega168pa */ + { { 0x1E, 0x94, 0x0F }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega164a */ + { { 0x1E, 0x94, 0x82 }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* at90usb162 */ + { { 0x1E, 0x94, 0x88 }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega16u4 */ + { { 0x1E, 0x94, 0x89 }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega16u2 */ { { 0x1E, 0x95, 0x02 }, 0x72, 0x3F, POLL_FF }, /* mega32 */ -// { { 0x1E, 0x95, 0x03 }, 0x75, 0x3F, POLL_FF }, /* mega329 (mega169 devcode) */ -// { { 0x1E, 0x95, 0x04 }, 0x75, 0x3F, POLL_FF }, /* mega3290 (mega169 devcode) */ -// { { 0x1E, 0x95, 0x05 }, 0x74, 0x3F, POLL_FF }, /* mega325 (mega16 devcode) */ -// { { 0x1E, 0x95, 0x06 }, 0x74, 0x3F, POLL_FF }, /* mega3250 (mega16 devcode) */ -// { { 0x1E, 0x95, 0x08 }, 0x74, 0x3F, POLL_FF }, /* mega324p (mega16 devcode) */ -// { { 0x1E, 0x95, 0x0B }, 0x75, 0x3F, POLL_FF }, /* mega329p (mega169 devcode) */ -// { { 0x1E, 0x95, 0x0C }, 0x75, 0x3F, POLL_FF }, /* mega3290p (mega169 devcode) */ + { { 0x1E, 0x95, 0x03 }, 0x75, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega329 (mega169 devcode) */ + { { 0x1E, 0x95, 0x04 }, 0x75, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega3290 (mega169 devcode) */ + { { 0x1E, 0x95, 0x05 }, 0x74, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega325 (mega16 devcode) */ + { { 0x1E, 0x95, 0x06 }, 0x74, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega3250 (mega16 devcode) */ + { { 0x1E, 0x95, 0x08 }, 0x74, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega324p (mega16 devcode) */ + { { 0x1E, 0x95, 0x0B }, 0x75, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega329p (mega169 devcode) */ + { { 0x1E, 0x95, 0x0C }, 0x75, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega3290p (mega169 devcode) */ { { 0x1E, 0x95, 0x0F }, 0xFF, 0x3F, POLL_FF }, /* mega328p (no devcode) */ -// { { 0x1E, 0x95, 0x11 }, 0x74, 0x3F, POLL_FF }, /* mega324pa (mega16 devcode) */ -// { { 0x1E, 0x95, 0x15 }, 0xFF, 0x3F, POLL_FF }, /* mega324a */ -// { { 0x1E, 0x95, 0x81 }, 0xFF, 0x3F, POLL_FF }, /* at90can32 */ + { { 0x1E, 0x95, 0x11 }, 0x74, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega324pa (mega16 devcode) */ + { { 0x1E, 0x95, 0x15 }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega324a */ + { { 0x1E, 0x95, 0x81 }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* at90can32 */ { { 0x1E, 0x95, 0x87 }, 0xFF, 0x3F, POLL_FF }, /* mega32u4 (no devcode) */ -// { { 0x1E, 0x95, 0x8A }, 0xFF, 0x3F, POLL_FF }, /* mega32u2 */ + { { 0x1E, 0x95, 0x8A }, 0xFF, 0x3F, POLL_FF | POLL_UNTESTED }, /* mega32u2 */ { { 0x1E, 0x96, 0x02 }, 0x45, 0x7F, POLL_FF }, /* mega64 */ -// { { 0x1E, 0x96, 0x03 }, 0x75, 0x7F, POLL_FF }, /* mega649 (mega169 devcode) */ -// { { 0x1E, 0x96, 0x04 }, 0x75, 0x7F, POLL_FF }, /* mega6490 (mega169 devcode) */ -// { { 0x1E, 0x96, 0x05 }, 0x74, 0x7F, POLL_FF }, /* mega645 (mega16 devcode) */ -// { { 0x1E, 0x96, 0x06 }, 0x74, 0x7F, POLL_FF }, /* mega6450 (mega16 devcode) */ -// { { 0x1E, 0x96, 0x08 }, 0xFF, 0x7F, POLL_FF }, /* mega640 */ + { { 0x1E, 0x96, 0x03 }, 0x75, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega649 (mega169 devcode) */ + { { 0x1E, 0x96, 0x04 }, 0x75, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega6490 (mega169 devcode) */ + { { 0x1E, 0x96, 0x05 }, 0x74, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega645 (mega16 devcode) */ + { { 0x1E, 0x96, 0x06 }, 0x74, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega6450 (mega16 devcode) */ + { { 0x1E, 0x96, 0x08 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega640 */ { { 0x1E, 0x96, 0x09 }, 0x74, 0x7F, POLL_FF }, /* mega644a (mega16 devcode) */ { { 0x1E, 0x96, 0x0A }, 0x74, 0x7F, POLL_FF }, /* mega644pa (mega16 devcode) */ -// { { 0x1E, 0x96, 0x81 }, 0xFF, 0x7F, POLL_FF }, /* at90can64 */ -// { { 0x1E, 0x96, 0x82 }, 0xFF, 0x7F, POLL_FF }, /* at90usb646/647 */ + { { 0x1E, 0x96, 0x81 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* at90can64 */ + { { 0x1E, 0x96, 0x82 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* at90usb646/647 */ { { 0x1E, 0x97, 0x01 }, 0x41, 0x7F, POLL_7F | POLL_80 | POLL_FF }, /* mega103 */ { { 0x1E, 0x97, 0x02 }, 0x43, 0x7F, POLL_FF }, /* mega128 */ -// { { 0x1E, 0x97, 0x03 }, 0xFF, 0x7F, POLL_FF }, /* mega1280 */ -// { { 0x1E, 0x97, 0x04 }, 0xFF, 0x7F, POLL_FF }, /* mega1281 */ -// { { 0x1E, 0x97, 0x05 }, 0x74, 0x7F, POLL_FF }, /* mega1284p (mega16 devcode) */ -// { { 0x1E, 0x97, 0x06 }, 0xFF, 0x7F, POLL_FF }, /* mega1284 */ -// { { 0x1E, 0x97, 0x81 }, 0xFF, 0x7F, POLL_FF }, /* at90can128 */ -// { { 0x1E, 0x97, 0x82 }, 0xFF, 0x7F, POLL_FF }, /* at90usb1286/1287 */ + { { 0x1E, 0x97, 0x03 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega1280 */ + { { 0x1E, 0x97, 0x04 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega1281 */ + { { 0x1E, 0x97, 0x05 }, 0x74, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega1284p (mega16 devcode) */ + { { 0x1E, 0x97, 0x06 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* mega1284 */ + { { 0x1E, 0x97, 0x81 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* at90can128 */ + { { 0x1E, 0x97, 0x82 }, 0xFF, 0x7F, POLL_FF | POLL_UNTESTED }, /* at90usb1286/1287 */ -// { { 0x1E, 0x98, 0x01 }, 0xFF, ???, ??? }, /* mega2560 */ -// { { 0x1E, 0x98, 0x02 }, 0xFF, ???, ??? }, /* mega2561 */ + { { 0x1E, 0x98, 0x01 }, 0xFF, 0x00, POLL_UNTESTED }, /* mega2560 */ + { { 0x1E, 0x98, 0x02 }, 0xFF, 0x00, POLL_UNTESTED }, /* mega2561 */ -// { { 0x1E, 0xA7, 0x01 }, 0xFF, ???, ??? }, /* mega128rfa1 */ + { { 0x1E, 0xA7, 0x01 }, 0xFF, 0x00, POLL_UNTESTED }, /* mega128rfa1 */ }; #define EV_NONE 0x00 @@ -438,12 +439,19 @@ static void cmdloop(void) while (1) { if (reset_state == STATE_IDLE) { + /* device not supported */ ser_send('!'); break; } else if (reset_state == STATE_RESET_PROGMODE) { - /* device not supported */ - ser_send('\r'); + if (device.flags & POLL_UNTESTED) { + reset_statemachine(EV_PROG_LEAVE); + /* untested device */ + ser_send('!'); + } else { + /* supported device */ + ser_send('\r'); + } break; } }