diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in index 1152af77..6e9df324 100644 --- a/src/avrdude.conf.in +++ b/src/avrdude.conf.in @@ -1458,6 +1458,38 @@ programmer usbpid = 0x0c9f; ; +#------------------------------------------------------------ +# arduino_gemma +#------------------------------------------------------------ + +# https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/gemma + +programmer + id = "arduino_gemma"; + desc = "Arduino Gemma bootloader disguised as USBtiny"; + type = "usbtiny"; + prog_modes = PM_SPM; + connection_type = usb; + usbvid = 0x2341; + usbpid = 0x0c9f; +; + +#------------------------------------------------------------ +# adafruit_gemma +#------------------------------------------------------------ + +# https://github.com/adafruit/Adafruit-Trinket-Gemma-Bootloader + +programmer + id = "adafruit_gemma"; + desc = "Adafruit Trinket Gemma bootloader disguised as USBtiny"; + type = "usbtiny"; + prog_modes = PM_SPM; + connection_type = usb; + usbvid = 0x1781; + usbpid = 0x0c9f; +; + #------------------------------------------------------------ # 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);