sna 0 16 декабря, 2004 Опубликовано 16 декабря, 2004 · Жалоба Господа специалисты!!! Подскажите как выполнить стирание и запись данных во "Флеш" ATMEGA8535 при помощи команды SPM? Мне необходима память для хранения и дальнейших изменений данных. Я выполнил все необходимые инструкции (установка в Z-регистр адрес страницы>>установка в SPMCR 0x03>>активизация инсрукции SPM), но в режиме работы микроконтроллера стирание страницы не выполняется, а в "DEBUG" все чётко и запись тоже. Может быть где-то нужно установить биты в "FUSE" согласно частоте процессора? С МК C8051F12x я разобрался, а тут!!!!! Заранее благодарен! :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 16 декабря, 2004 Опубликовано 16 декабря, 2004 · Жалоба Приведите фрагмент кода (желательно не слишком большой) для анализа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sna 0 16 декабря, 2004 Опубликовано 16 декабря, 2004 · Жалоба Привожу фрагмент кода для стирания страницы 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 0 16 декабря, 2004 Опубликовано 16 декабря, 2004 · Жалоба Извиняюсь! Вместо "0000 0101" делаю поправку "0000 0011" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
framer 0 16 декабря, 2004 Опубликовано 16 декабря, 2004 · Жалоба Может быть установлены биты FUSE, для проверки можно разрешить запись для всех областей памати. Может быть еще проблема в размещении кода который делает SPM (код должен быть в области bootloader), для этого тоже надо утановить соответствующие биты FUSE. Не знаю как с ATMEGA8535 но должно быть также как и в ATMEGA128. Может пригодиться http://www.mycgiserver.com/~edgp/arm/mm128_bootloader.zip поправил bootloader AVRBUTERFLY для работы с ATMEGA128. Сделано это в WINAVR но там есть асемблерный листинг процедур равоты с FLASH. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sna 0 17 декабря, 2004 Опубликовано 17 декабря, 2004 · Жалоба Спасибо за ответ, скачал, буду разбираться. Я подозреваю, что при выполнении кода программы микроконтроллером, время прожигания FLASH-памяти очень мало (ведь код программы в Debug выполняется четко). Может быть необходимо калибровать внутренний генератор, который в принципе и служит также для работы с FLASH и EEPROM, а на счет FUSE, то я их не трогаю, так как по умолчанию (я так понял) они не блокируют доступ. Если есть какие нибудь коментарии или поправки к моим мыслям и рассуждениям, по возможности поправьте меня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
framer 0 17 декабря, 2004 Опубликовано 17 декабря, 2004 · Жалоба 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 0 17 декабря, 2004 Опубликовано 17 декабря, 2004 · Жалоба Пока ничего не получается. Я программирую через "Pony-Prog2000 Version 2.06c Beta Jul 27 2003"/ Установил и записал в "FUSE" бит "BOOTRST", а эффект тот же. Помогите!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serg_am 0 17 декабря, 2004 Опубликовано 17 декабря, 2004 · Жалоба Скорее всего дело действительно в задержках, там это критично... Почему бы тебе не использовать стандартную процедуру от атмела (она есть в даташите на кристалл), я в свое время так и делал, заработала практически сразу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
framer 0 17 декабря, 2004 Опубликовано 17 декабря, 2004 · Жалоба 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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться