diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in index 1152af77..f2d0c009 100644 --- a/src/avrdude.conf.in +++ b/src/avrdude.conf.in @@ -1458,6 +1458,23 @@ programmer usbpid = 0x0c9f; ; +#------------------------------------------------------------ +# gemmaBoot +#------------------------------------------------------------ + +# Serving the Gemma bootloader +# https://github.com/adafruit/Adafruit-Trinket-Gemma-Bootloader + +programmer + id = "gemmaBoot"; + desc = "Gemma bootloader disguised as USBtiny"; + type = "usbtiny"; + prog_modes = PM_SPM; + connection_type = usb; + usbvid = 0x2341; + usbpid = 0x0105; +; + #------------------------------------------------------------ # arduinoisp #------------------------------------------------------------ diff --git a/src/usbtiny.c b/src/usbtiny.c index 2e319318..7153ede9 100644 --- a/src/usbtiny.c +++ b/src/usbtiny.c @@ -618,7 +618,13 @@ static int usbtiny_chip_erase(const PROGRAMMER *pgm, const AVRPART *p) { if (! usbtiny_avr_op( pgm, p, AVR_OP_CHIP_ERASE, res )) { return -1; } - usleep( p->chip_erase_delay ); + + if(pgm->prog_modes & PM_SPM) { // Talking to bootloader directly + AVRMEM *fl = avr_locate_mem(p, "flash"); + // Estimated time it takes to erase all pages in bootloader + usleep(p->chip_erase_delay * (fl? fl->num_pages: 999)); + } else + usleep(p->chip_erase_delay); // prepare for further instruction pgm->initialize(pgm, p);