Перейти к содержанию
    

Самопрограммирование FLASH-памяти ATMEGA8535

Господа специалисты!!! Подскажите как выполнить стирание и запись данных во "Флеш" ATMEGA8535 при помощи команды SPM? Мне необходима память для хранения и дальнейших изменений данных. Я выполнил все необходимые инструкции (установка в Z-регистр адрес страницы>>установка в SPMCR 0x03>>активизация инсрукции SPM), но в режиме работы микроконтроллера стирание страницы не выполняется, а в "DEBUG" все чётко и запись тоже.

Может быть где-то нужно установить биты в "FUSE" согласно частоте процессора?

С МК C8051F12x я разобрался, а тут!!!!!

Заранее благодарен! :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приведите фрагмент кода (желательно не слишком большой) для анализа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привожу фрагмент кода для стирания страницы 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 МГц.

 

Спасибо за поддержку!!!

С нетерпением жду Вашего предложения!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть установлены биты FUSE, для проверки можно разрешить запись для всех областей памати. Может быть еще проблема в размещении кода который делает SPM (код должен быть в области bootloader), для этого тоже надо утановить соответствующие биты FUSE. Не знаю как с ATMEGA8535 но должно быть также как и в ATMEGA128. Может пригодиться http://www.mycgiserver.com/~edgp/arm/mm128_bootloader.zip поправил bootloader AVRBUTERFLY для работы с ATMEGA128. Сделано это в WINAVR но там есть асемблерный листинг процедур равоты с FLASH.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ, скачал, буду разбираться. Я подозреваю, что при выполнении кода программы микроконтроллером, время прожигания FLASH-памяти очень мало (ведь код программы в Debug выполняется четко). Может быть необходимо калибровать внутренний генератор, который в принципе и служит также для работы с FLASH и EEPROM, а на счет FUSE, то я их не трогаю, так как по умолчанию (я так понял) они не блокируют доступ.

 

Если есть какие нибудь коментарии или поправки к моим мыслям и рассуждениям, по возможности поправьте меня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока ничего не получается.

Я программирую через "Pony-Prog2000 Version 2.06c Beta Jul 27 2003"/

Установил и записал в "FUSE" бит "BOOTRST", а эффект тот же.

Помогите!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего дело действительно в задержках, там это критично...

Почему бы тебе не использовать стандартную процедуру от атмела (она есть в даташите на кристалл), я в свое время так и делал, заработала практически сразу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...