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

 
 
> Самопрограммирование mega640.
cpl
сообщение Jul 21 2008, 17:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Необходимо обновлять загрузчик, есть ли возможность прошить загрузчик(NRWW область) из памяти программ (NWW область) ?
Код взял из примеров Atmel, страница памяти программ остается не тронутой, не стирается ....
Если код располагается в NRWW областе то страница стирается, вне ее нечего не просиходит...
smile3046.gif
код:

ldi ZL,0x00
ldi ZH,0x70

ldi temp,(1 << PGERS | 1<< SPMEN) ; Page Erase
call Do_spmF

ldi temp,(1 << RWWSRE | 1<< SPMEN)
call Do_spmF

Do_spmF:
push temp1
Do_spmF1:
in temp1,SPMCSR
sbrc temp1,SPMEN
rjmp Do_spmF1
in temp1,SREG
cli
Wait_eeF:
sbic EECR,EEPE
rjmp Wait_eeF
out SPMCSR,temp
spm
out SREG,temp1

pop temp1

ret
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Syberian
сообщение Aug 26 2008, 04:27
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999



Не знаю, как насчет 640-й, но некоторые Меги не поддерживают побайтную запись флеш. Т.е. с каждым байтом будет переписываться вся страница из почти пустого буфера, т.е. 0хFF. В итоге мы увидим полностью затертую память.

Делал на 644 самопрограммирование по COM-порту из стандартного набора на асме постранично, и все работало!
Размещается прога в секторе smallboot.
Чтобы перешить сам загрузчик, надо исполнять подобную программу из общей памяти. Вот и все smile.gif


Код
.equ PAGESIZEB = 256;PAGESIZEB is page size in BYTES, not words
.org SMALLBOOTSTART


.equ spm_pagebuf=$110; 256bytex
.equ spm_numpages=$10A
.equ spm_crc1=$10B
.equ spm_crc2=$10C
.equ spm_crc3=$10D
.equ spm_crc4=$10E

com_spi:
cli
rcall com__read
cpi tmp,'F'
breq spi_flsh
jmp 0; suxxxxxxxxxxxxxx!!!!!!!!

spi_flsh:
rcall com__read
sts spm_numpages,tmp
clr zh
clr zl

lds cnt1,spm_numpages

spm_rdda1:
push cnt1
    ldiy spm_pagebuf
    ldi tmp,0xCB
    rcall com__write
    clr cnt
spm_rdda:
    rcall com__read
    st y+,tmp
    djnz cnt,spm_rdda
ldiy spm_pagebuf
rcall Write_page
inc zh
pop cnt1
djnz cnt1,spm_rdda1

ldi tmp,0xCB
rcall com__write
jmp 0








Write_page:
; Page Erase
    ldi tmp, (1<<PGERS) | (1<<SPMEN)
    rcall Do_spm
; re-enable the RWW section
    ldi tmp, (1<<RWWSRE) | (1<<SPMEN)
    rcall Do_spm
; transfer data from RAM to Flash page buffer
    ldi cnt, 0 ;init loop variable 256

Wrloop:
    ld r0, Y+
    ld r1, Y+
    ldi tmp, (1<<SPMEN)
    rcall Do_spm
    adiw ZH:ZL, 2
    subi cnt, 2;use subi for PAGESIZEB<=256
    brne Wrloop

    dec zh
; execute Page Write
    ldi tmp, (1<<PGWRT) | (1<<SPMEN)
    call Do_spm
; re-enable the RWW section
    ldi tmp, (1<<RWWSRE) | (1<<SPMEN)
    call Do_spm
; read back and check, optional


Return:
    in tmp, SPMCSR
    sbrs tmp, RWWSB; If RWWSB is set, the RWW section is not ready yet
    ret
    rjmp Return



Do_spm:
; check for previous HW ops complete
Wait_spm:
    in tmp1, SPMCSR
    sbrc tmp1, SPMEN
    rjmp Wait_spm
Wait_ee:
    sbic EECR, EEPE
    rjmp Wait_ee
; SPM timed sequence
    out SPMCSR, tmp
    spm
    ret

com__write: lds tmp1,ucsr0a sbrs tmp1,udre0 rjmp com__write sts udr0,tmp ret
com__read: lds tmp1,ucsr0a sbrs tmp1,rxc0 rjmp com__read lds tmp,udr0 ret
Go to the top of the page
 
+Quote Post
cpl
сообщение Aug 26 2008, 08:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Цитата(Syberian @ Aug 26 2008, 08:27) *
Чтобы перешить сам загрузчик, надо исполнять подобную программу из общей памяти. Вот и все smile.gif

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Вы сами то пробовали таким образом перешивать загрузчик из основной области ?
В теории все сходится да на практике расходится...

Повторюсь еще раз в симуляторе ВСЕ перешивается....
на стендах мега 128 и 640 порепрошить загрузчик получилось только из загрузочной области, при перепрошивке из основной области проц неодекватен тк процессор не останавливается в момент прошивки а продолжает исполнять код в данном случаии FF по всей памяти.
smile3046.gif
вот теперь все smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- cpl   Самопрограммирование mega640.   Jul 21 2008, 17:32
- - arttab   обновлялка загрузчика должна быть в NRWW. Хотя мо...   Jul 22 2008, 13:26
|- - cpl   Цитата(arttab @ Jul 22 2008, 17:26) обнов...   Jul 22 2008, 13:31
|- - oran-be   Совершенно непонятно - в чем проблема. Если зашар...   Jul 22 2008, 16:15
|- - cpl   Цитата(oran-be @ Jul 22 2008, 20:15)...   Jul 23 2008, 08:21
- - IJAR   Сталкивался с подобной проблемой - решил ее так: З...   Jul 23 2008, 07:43
|- - _Pasha   Цитата(IJAR @ Jul 23 2008, 10:43) функция...   Jul 23 2008, 07:51
|- - IJAR   Цитата(_Pasha @ Jul 23 2008, 11:51) Иными...   Jul 23 2008, 08:05
- - Александр Куличок   ЦитатаИными словами, во время записи происходит ка...   Jul 23 2008, 12:36
|- - Боинг749   Цитата(Александр Куличок @ Jul 23 2008, 15...   Aug 25 2008, 12:55
- - Боинг749   Цитата(cpl @ Aug 26 2008, 12:47) ^^^^^^^^...   Aug 26 2008, 19:26
- - sKWO   Цитата(Боинг749 @ Aug 26 2008, 22:26) Ком...   Aug 26 2008, 20:01
- - Боинг749   Цитата(sKWO @ Aug 27 2008, 00:01) Ну, чег...   Aug 26 2008, 20:19


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:41
Рейтинг@Mail.ru


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