|
Самопрограммирование FLASH-памяти ATMEGA8535, Очистка, запись данных во FLASH (SPM) |
|
|
|
Dec 16 2004, 12:09
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502

|
Господа специалисты!!! Подскажите как выполнить стирание и запись данных во "Флеш" ATMEGA8535 при помощи команды SPM? Мне необходима память для хранения и дальнейших изменений данных. Я выполнил все необходимые инструкции (установка в Z-регистр адрес страницы>>установка в SPMCR 0x03>>активизация инсрукции SPM), но в режиме работы микроконтроллера стирание страницы не выполняется, а в "DEBUG" все чётко и запись тоже. Может быть где-то нужно установить биты в "FUSE" согласно частоте процессора? С МК C8051F12x я разобрался, а тут!!!!! Заранее благодарен!
|
|
|
|
|
 |
Ответов
(1 - 9)
|
Dec 16 2004, 14:48
|
Частый гость
 
Группа: Участник
Сообщений: 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 МГц.
Спасибо за поддержку!!! С нетерпением жду Вашего предложения!
|
|
|
|
|
Dec 16 2004, 18:01
|
Участник

Группа: Свой
Сообщений: 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.
|
|
|
|
|
Dec 17 2004, 06:37
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 16-12-04
Из: Украина, г. Комсомольск
Пользователь №: 1 502

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

Группа: Свой
Сообщений: 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.
|
|
|
|
|
Dec 17 2004, 11:18
|
Участник

Группа: Свой
Сообщений: 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"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|