--- ../avrdude.old/ft245r.c 2013-09-22 17:00:01.413993533 +0200 +++ ft245r.c 2013-09-22 20:06:33.498408507 +0200 @@ -296,6 +296,10 @@ return 0; } +static int set_sck(PROGRAMMER * pgm, int value) { + return set_pin(pgm, PIN_AVR_SCK, value); +} + static int set_reset(PROGRAMMER * pgm, int value) { return set_pin(pgm, PIN_AVR_RESET, value); } @@ -420,12 +424,22 @@ ft245r_powerup(pgm); + /* Apply power between VCC and GND while RESET and SCK are set to “0”. In some systems, + * the programmer can not guarantee that SCK is held low during power-up. In this + * case, RESET must be given a + */ + set_sck(pgm, OFF); + set_reset(pgm, OFF); usleep(5000); // 5ms set_reset(pgm, ON); usleep(5000); // 5ms set_reset(pgm, OFF); - usleep(5000); // 5ms + + /* Wait for at least 20 ms and enable serial programming by sending the Programming + * Enable serial instruction to pin MOSI. + */ + usleep(20000); // 20ms return ft245r_program_enable(pgm, p); }