roboforum.ru

Технический форум по робототехнике.

Не пишит страницы в avr bootloader (proteus)

Не пишит страницы в avr bootloader (proteus)

wiskas » 12 мар 2012, 16:31

Добрый день всем! недавно подсел на atmel и решил разобраться полностью с этим зверем, решил написать свой велосипед, ой бутлоадер. Но к сожелению в протеус не пишутся страницы, то есть вроде бы все делаю по мануалам, а записуется страница в область программной памяти с FF коммандами, моих команд сохраненных в временной странице как бы и нету. Вот кусок кода с области bootloadera, кто знает в чем беда, направте в нужное русло пожалуйста.

Код: Выделить всёРазвернуть
commandWriteChip:

        clr     ZH ; 0 адресс страницы
        clr     ZL
                                                ; SPMEN – разрешает вызов команды SPM в следующих 4х тактах
                                                ; PGERS – команда на очистку страницы флеша
        ldi     R17, (1<<PGERS) | (1<<SPMEN)    ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM
        ldi     R17, (1<<RWWSRE) | (1<<SPMEN)   ; ре-инициализация страницы
        call    commandSPM
; выше я по идее очистил страницу программной памяти, в которую буду писать

        ldi     R18, 0x20                       ; количество слов в странице (32)
        ldi     ZH, 0b00000000                 ;
        ldi     ZL, 0b00000000                 ;

     asddd:
; ниже 4 комманды которые прописуются в регистр r0:r1 и в итоге они должны быть записаны в страницу
        ldi     r16, 0xA0   
        mov     r1, r16
        ldi     r16, 0xBB   
        mov     r0, r16

        adiw ZH:ZL, 2 ; инкремент адресса позиции слов

        ldi     R17, (1<<SPMEN)    ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM     ; собственно запись во временую страницу

        dec     R18
        brne    asddd

;ниже идет запись временной страницы в память программы по адреессу начиная с 0x20

        ldi     ZH, 0b00000000
        ldi     ZL, 0b00010000

                                                ; PGERS – команда на очистку страницы флеша
        ldi     R17, (1<<PGWRT) | (1<<SPMEN)    ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM
        ldi     R17, (1<<RWWSRE) | (1<<SPMEN)   ; ре-инициализация страницы
        call    commandSPM




до записи в программе идет:

Код: Выделить всёРазвернуть
0000: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0020: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................

после стирания


Код: Выделить всёРазвернуть
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0020: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................


после записи


Код: Выделить всёРазвернуть
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................



вот как бы показывается что оно стирает, а моих данных не пишит, так же пробовал писать страницу не на 0х20 адресс, а на 0х00, затертый мною до этого.

Re: Не пишит страницы в avr bootloader (proteus)

wiskas » 12 мар 2012, 22:06

неужели никто не писал свой загрузчик?(

Re: Не пишит страницы в avr bootloader (proteus)

avr123.nm.ru » 12 мар 2012, 22:18

наверно надо архив с проектами приложить и версии ПО указать

Re: Не пишит страницы в avr bootloader (proteus)

wiskas » 12 мар 2012, 23:03

вот собственно проект, ISUS PROTEUS 7.7 SP2
Сам код находится в atmega8515.asm файле, то есть микроконтролер (U2 - atmega8515-2.asm ) передает информацию контроллеру U1 о том что нужно записать флеш.
Начало процедуры по адрессу 0x1828.
Вложения
ATMEGA8515.rar
(51.59 КиБ) Скачиваний: 0

Re: Не пишит страницы в avr bootloader (proteus)

Grofus » 12 мар 2012, 23:18

Не вижу инициализации стека, без неё вызовы не работают. И защиту надо прикрутить что бы бут на себя не писАл.

Re: Не пишит страницы в avr bootloader (proteus)

wiskas » 12 мар 2012, 23:26

1. ммм что за инициализация стека?))
ldi r16, low(RAMEND)
out spl, r16
ldi r16, high(RAMEND)
out sph, r16
если это, то вроде и без неё работали вызовы подпрограмм и возвращались обратно.
2. ну сначала бы просто мне чето кудато набрасать чтобы работало, а потом я и с делаю ограничения на запись)
Последний раз редактировалось wiskas 12 мар 2012, 23:29, всего редактировалось 1 раз.

Re: Не пишит страницы в avr bootloader (proteus)

Grofus » 12 мар 2012, 23:27

Ну вот стандартная процедура
Код: Выделить всёРазвернуть
 ldi R16, low(RAMEND)
out SPL, R16
ldi R16, high(RAMEND)
out SPH, R16

Re: Не пишит страницы в avr bootloader (proteus)

wiskas » 12 мар 2012, 23:44

все равно гад не пишет(


Rambler\'s Top100 Mail.ru counter