Musst Du den Slave wirklich flashen oder nur resetten? (Kann man beim 6 pol. Original-ISP-Stecker mit nem Jumper, da liegen Reset und GND nebeneinander).
Wenns nur der Reset ist, tippe ich mal auf eine falsche Neuinitialisierung (z.B. könnte das i_spi im SPI-ISR nach Neustart des Masters ohne Timeout beim Slave nicht mehr synchron laufen).
BTW: Du könntest auch mal bei den Variablendeklarationen direkt den Initialwert dranschreiben:
static volatile uint8_t i_spi; /* Zaehler der SPI- Bytes */
==>
static volatile uint8_t i_spi = 0; /* Zaehler der SPI- Bytes */
Das macht zwar beim AVR im Kaltstart keinen Unterschied, liest sich aber besser (und spätestens im init_SLAVE_INT wäre eine Initialisierung der intern benötigten Zustände/Zähler von der Logik her schon fast zwingend).
Lesezeichen