реклама на сайте
подробности

 
 
> Снова Bootloаder, "Подводные камни" AVR109
Stas633
сообщение Apr 21 2007, 20:49
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Не нашел форуме описания подобной ситуации, поэтому "выкладываю", может кому пригодится..

Повторил 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.. до сих пор не пойму smile.gif )

Вопрос... Почему же Atmel не "ерратил" ошибку? Или я чего-то не увидел, и напрасно предъявляю прететзии?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Apr 23 2007, 07:31
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
DW 0xFFFF ;For future part compatibility, instruction alignmentNOPQuoteEndQuoteEEndОбъясните плз, что это означает (или в каком ДШ про это рассказано)

Смотри DS ATmega163 (в ревизии E описательная часть на стр. 137, пример - на стр.141-142 - нужное на 142)
Instruction Word Read after
Page Erase, Page Write, and
Lock Bit Write
To ensure proper instruction pipelining after programming action (Page Erase, Page
Write, or Lock bit write), the SPM instruction must be followed with the sequence (.dw
$FFFF - NOP) as shown below:
spm
.dw $FFFF
nop
If not, the instruction following SPM might fail. It is not necessary to add this sequence
when the SPM instruction only loads the temporary buffer.

Цитата
В приведенном Вами примере отсутствует "переинициализация" RWW!

Раз считаете, что отсутствует - пусть отсутствуетwink.gif Прошу только заметить, что в приведенном кусочке запись не начинается до окончания предыдущей записи и выход из процедуры записи только после её окончания.

Цитата
А какого размера (в байтах) получается загрузчик в IAR при условии совместимости с AVRProg?

Самый короткий, который я встречал, занимал 384 байта. У меня занимал около 600, но пара функций была опущена. См. http://www.onembedding.com/files/jtag_vit/


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Stas633
сообщение Apr 23 2007, 08:16
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Цитата(sensor_ua @ Apr 23 2007, 08:31) *
Раз считаете, что отсутствует - пусть отсутствуетwink.gif Прошу только заметить, что в приведенном кусочке запись не начинается до окончания предыдущей записи и выход из процедуры записи только после её окончания.

Для переинициализации RWW не достаточно дождаться окончания процедуры записи (сброса бита SPMEN).
Необходимо установить биты RWWSRE и SPMEN и выполнить SPM. То есть:
- "загрузить" в SPMCR 0x11
- выпольнить команду SPM.
Такой процедуры в примере нет. Не так ли?

Для справки:
Код
• Bit 4 – RWWSRE: Read-While-Write Section Read Enable
When programming (page erase or page write) to the RWW section, the RWW section
is blocked for reading (the RWWSB will be set by hardware). To re-enable the RWW
section, the user software must wait until the programming is completed (SPMEN will be
cleared). Then, if the RWWSRE bit is written to one at the same time as SPMEN, the
next SPM instruction within four clock cycles re-enables the RWW section. The RWW
section cannot be re-enabled while the Flash is busy with a page erase or a page write
(SPMEN is set). If the RWWSRE bit is written while the Flash is being loaded, the Flash
load operation will abort and the data loaded will be lost (The page buffer will be cleared
when the Read-While-Write section is re-enabled).


Цитата(sensor_ua @ Apr 23 2007, 08:31) *
Самый короткий, который я встречал, занимал 384 байта. У меня занимал около 600, но пара функций была опущена.

Спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 06:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016