I've been struggling the last few days with writing my own ISP tool to program an AVR over SPI. The tool is running on an ARM host processor and I am using a builtin SPI interface plus a GPIO to control the AVR reset.
I can get the AVR in to programming mode, read the signature bytes, read and program the fuses, and erase just fine. My trouble is with programming and reading back the flash. It seems that if there is to much delay between programming pages then everything starts to fail. I can completely fail to write a single byte if I wait a second before programming each page.
On the other hand, I did manage to program the part by pulsing the reset and entering programming mode for every single page I am trying to write. This is not a good solution.
Has anybody seen this sort of behavior and is it documented in any Atmel spec? Is there a minimum serial programming speed for a given clock speed?
Any other ideas on what may be going on?