Не нашел форуме описания подобной ситуации, поэтому "выкладываю", может кому пригодится..
Повторил bootloader по AVR109.
Попробовал программировать Мегу при помощи AVRProg.
Cтолкнулся с проблемой верификации памяти после программирования.
При "детальном рассмотрении" обнаружил, что в ASM-программе в AVR109 отсутствует ре-инициализация памяти (RWW) после операций записи страницы. И это не смотря на то, что
в тексте AVR109 эта "проблема" упоминается:
Код
...Note that if the RWW section accessed without re-enabling it after an erase or write
operation, all addresses in the RRW section read 0xFFFF....
После "подправки" программы проблемы "не стало":
Код
; void write_page (unsigned int adr, unsigned char function);
_write_page::
MOV R31,R17
MOV R30,R16 ;move adress to z pointer (R31=ZH R30=ZL)
OUT SPMCR,R18 ;argument 2 decides function
SPM ;perform pagewrite
; "поправка" программы
; ------------------------------------
Wait_spm1:
in R16, SPMCR
sbrc R16,0
rjmp Wait_spm1
LDI R16, $11 ; enable RWW
OUT SPMCR, R16 ;
SPM
; ------------------------------------
RET
" dw $FFFF" и "nop" удалил как ненужные (а для чего используется dw $FFFF.. до сих пор не пойму

)
Вопрос... Почему же Atmel не "ерратил" ошибку? Или я чего-то не увидел, и напрасно предъявляю прететзии?