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

 
 
> Снова 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 22 2007, 08:18
Сообщение #2


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

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



Вы какое-то старьё раскопали или где? Вот фрагмент из файла, датированного (на моём компе) 11.07.2002

write_page:
RCALL WAIT_SPMEN ;Wait for SPMEN flag cleared
MOV R31,R17
MOV R30,R16 ;move adress to z pointer (R31=ZH R30=ZL)
LOAD_SPM_CONTROL_REGISTER_MACRO ; argument 2 decides function (r18)
_SPM ;Store program memory
DW 0xFFFF ;For future part compatibility, instruction alignment
NOP
RJMP WAIT_SPMEN ;Wait for SPMEN flag cleared

В текущей версии сорцов вообще используются встроенные функции IAR.
Цитата
" dw $FFFF" и "nop" удалил как ненужные (а для чего используется dw $FFFF.. до сих пор не пойму )

В старых мегах было нужно - FLASH там такая была (рассказывать обломно - в дейташитах есть). И не мешает оно совсем


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


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

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



Цитата(sensor_ua @ Apr 22 2007, 09:18) *
...
write_page:
RCALL WAIT_SPMEN ;Wait for SPMEN flag cleared
MOV R31,R17
MOV R30,R16 ;move adress to z pointer (R31=ZH R30=ZL)
LOAD_SPM_CONTROL_REGISTER_MACRO ; argument 2 decides function (r18)
_SPM ;Store program memory
DW 0xFFFF ;For future part compatibility, instruction alignment
NOP
RJMP WAIT_SPMEN ;Wait for SPMEN flag cleared
...


В приведенном Вами примере отсутствует "переинициализация" RWW!
В текущей версии AVR109 (2004), дествительно данная проблема устранена:

<main.c>
Код
...
            // Read program memory.
            else if(val=='R')
            {
                // Send high byte, then low byte of flash word.
                _WAIT_FOR_SPM();
                _ENABLE_RWW_SECTION();
...
                address++; // Auto-advance to next Flash word.
            }
...


<flash.h>
Код
...
#define _ENABLE_RWW_SECTION() __DataToR0ByteToSPMCR_SPM( 0x00, 0x11 )
...


<intrinsics.h>
Код
....
/* SPM */

/*
  __DataToR0ByteToSPMCR_SPM, pseudo code.
  MOV   R0,data
  OUT   SPMCR,byte
  SPM
*/
__intrinsic void __DataToR0ByteToSPMCR_SPM(unsigned char data,
                                           unsigned char byte);

...


А какого размера (в байтах) получается загрузчик в IAR при условии совместимости с AVRProg?
(я не "пользуюсь" IAR'ом).
Go to the top of the page
 
+Quote Post



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

 


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


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