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

 
 
> Самопрограммирование FLASH-памяти ATMEGA8535, Очистка, запись данных во FLASH (SPM)
sna
сообщение Dec 16 2004, 12:09
Сообщение #1


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

Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502



Господа специалисты!!! Подскажите как выполнить стирание и запись данных во "Флеш" ATMEGA8535 при помощи команды SPM? Мне необходима память для хранения и дальнейших изменений данных. Я выполнил все необходимые инструкции (установка в Z-регистр адрес страницы>>установка в SPMCR 0x03>>активизация инсрукции SPM), но в режиме работы микроконтроллера стирание страницы не выполняется, а в "DEBUG" все чётко и запись тоже.
Может быть где-то нужно установить биты в "FUSE" согласно частоте процессора?
С МК C8051F12x я разобрался, а тут!!!!!
Заранее благодарен! cranky.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
IgorKossak
сообщение Dec 16 2004, 13:35
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Приведите фрагмент кода (желательно не слишком большой) для анализа.
Go to the top of the page
 
+Quote Post
sna
сообщение Dec 16 2004, 14:48
Сообщение #3


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

Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502



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

Спасибо за поддержку!!!
С нетерпением жду Вашего предложения!
Go to the top of the page
 
+Quote Post
sna
сообщение Dec 16 2004, 14:50
Сообщение #4


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

Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502



Извиняюсь! Вместо "0000 0101" делаю поправку "0000 0011"
Go to the top of the page
 
+Quote Post
framer
сообщение Dec 16 2004, 18:01
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 23-09-04
Пользователь №: 709



Может быть установлены биты FUSE, для проверки можно разрешить запись для всех областей памати. Может быть еще проблема в размещении кода который делает SPM (код должен быть в области bootloader), для этого тоже надо утановить соответствующие биты FUSE. Не знаю как с ATMEGA8535 но должно быть также как и в ATMEGA128. Может пригодиться http://www.mycgiserver.com/~edgp/arm/mm128_bootloader.zip поправил bootloader AVRBUTERFLY для работы с ATMEGA128. Сделано это в WINAVR но там есть асемблерный листинг процедур равоты с FLASH.
Go to the top of the page
 
+Quote Post
sna
сообщение Dec 17 2004, 06:37
Сообщение #6


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

Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502



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

Если есть какие нибудь коментарии или поправки к моим мыслям и рассуждениям, по возможности поправьте меня.
Go to the top of the page
 
+Quote Post
framer
сообщение Dec 17 2004, 07:14
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 23-09-04
Пользователь №: 709



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.
Go to the top of the page
 
+Quote Post
sna
сообщение Dec 17 2004, 10:35
Сообщение #8


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

Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502



Пока ничего не получается.
Я программирую через "Pony-Prog2000 Version 2.06c Beta Jul 27 2003"/
Установил и записал в "FUSE" бит "BOOTRST", а эффект тот же.
Помогите!!!
Go to the top of the page
 
+Quote Post
serg_am
сообщение Dec 17 2004, 11:07
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 22
Регистрация: 17-12-04
Из: С.-Петербург
Пользователь №: 1 516



Скорее всего дело действительно в задержках, там это критично...
Почему бы тебе не использовать стандартную процедуру от атмела (она есть в даташите на кристалл), я в свое время так и делал, заработала практически сразу...
Go to the top of the page
 
+Quote Post
framer
сообщение Dec 17 2004, 11:18
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 23-09-04
Пользователь №: 709



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"
Go to the top of the page
 
+Quote Post

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

 


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


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