Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Самопрограммирование FLASH-памяти ATMEGA8535
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sna
Господа специалисты!!! Подскажите как выполнить стирание и запись данных во "Флеш" ATMEGA8535 при помощи команды SPM? Мне необходима память для хранения и дальнейших изменений данных. Я выполнил все необходимые инструкции (установка в Z-регистр адрес страницы>>установка в SPMCR 0x03>>активизация инсрукции SPM), но в режиме работы микроконтроллера стирание страницы не выполняется, а в "DEBUG" все чётко и запись тоже.
Может быть где-то нужно установить биты в "FUSE" согласно частоте процессора?
С МК C8051F12x я разобрался, а тут!!!!!
Заранее благодарен! cranky.gif
IgorKossak
Приведите фрагмент кода (желательно не слишком большой) для анализа.
sna
Привожу фрагмент кода для стирания страницы FLASH-памяти:

;загружаю адрес страницы
LDI R31,0X04
LDI R30,0X00
;запрещаю прерывания и сохраняю SREG
CLI
IN R17,$3F
;загружаю в SPMCR '0000 0101'
LDI R16,0X03
OUT $37,R16
;выполняю активизацию режима стирания
SPM
;востанавливаю SREG и прерывания
OUT $3F,R17
SEI

Вот такой простой код. Запись почти ничем не отличается, единственно, сначало необходимо загрузить в буфер NRWW данные, а потом выполнить операцию аналогично операции стирания.
При выполнении иммитации работы программы в "DEBUG" все работает отлично, а реально игнорируется. Частота кварца 7,3728 МГц.

Спасибо за поддержку!!!
С нетерпением жду Вашего предложения!
sna
Извиняюсь! Вместо "0000 0101" делаю поправку "0000 0011"
framer
Может быть установлены биты FUSE, для проверки можно разрешить запись для всех областей памати. Может быть еще проблема в размещении кода который делает SPM (код должен быть в области bootloader), для этого тоже надо утановить соответствующие биты FUSE. Не знаю как с ATMEGA8535 но должно быть также как и в ATMEGA128. Может пригодиться http://www.mycgiserver.com/~edgp/arm/mm128_bootloader.zip поправил bootloader AVRBUTERFLY для работы с ATMEGA128. Сделано это в WINAVR но там есть асемблерный листинг процедур равоты с FLASH.
sna
Спасибо за ответ, скачал, буду разбираться. Я подозреваю, что при выполнении кода программы микроконтроллером, время прожигания FLASH-памяти очень мало (ведь код программы в Debug выполняется четко). Может быть необходимо калибровать внутренний генератор, который в принципе и служит также для работы с FLASH и EEPROM, а на счет FUSE, то я их не трогаю, так как по умолчанию (я так понял) они не блокируют доступ.

Если есть какие нибудь коментарии или поправки к моим мыслям и рассуждениям, по возможности поправьте меня.
framer
kaliblovat' nie nado. vremia gotovnosti pered kajdoj operacyjej prowieriajet'sa na bitah
> _WAIT_FOR_SPM();
> 1f6b2: 80 91 68 00 lds r24, 0x0068
> 1f6b6: 80 fd sbrc r24, 0
> 1f6b8: fc cf rjmp .-8 ; 0x1f6b2
> while(!eeprom_is_ready());
> 1f6ba: e1 99 sbic 0x1c, 1 ; 28
> 1f6bc: fe cf rjmp .-4 ; 0x1f6ba

na sciot FUSE to po umolchaniju nie ustanowlen bootloader.
sna
Пока ничего не получается.
Я программирую через "Pony-Prog2000 Version 2.06c Beta Jul 27 2003"/
Установил и записал в "FUSE" бит "BOOTRST", а эффект тот же.
Помогите!!!
serg_am
Скорее всего дело действительно в задержках, там это критично...
Почему бы тебе не использовать стандартную процедуру от атмела (она есть в даташите на кристалл), я в свое время так и делал, заработала практически сразу...
framer
luchshe vsego vziat' datasheet ot Atmel doc2502. procedura raboty s FLASH na stranice 231. obrati vnimanie na razdel Boot-Loader Support - Read-While-Write Self programing. Nie dostatochno ustanowit' bit BOOTRST. pri ustanowkie bita procesor startujet iz oblasti bootloadera. adres zavisit ot velechiny bootloader. v programie nago ukazat' pod kakim adresom budet bootloader -
".org ADRESBOOTLOADER"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.