Повторил 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....
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
_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 не "ерратил" ошибку? Или я чего-то не увидел, и напрасно предъявляю прететзии?