Запись в FLASH - ATMega

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Запись в FLASH - ATMega

Сообщение blindman » 14 июл 2010, 15:17

Надо записать 16-битное чисто в flash. Написал вот такую фукцию:
Код: Выделить всё
void config_int(uint16_t address, uint16_t value)
{
   uint16_t page_addr, page_end;
   page_addr = (address & ~(SPM_PAGESIZE - 1));
   page_end = ((address + 2) & ~(SPM_PAGESIZE - 1)) + SPM_PAGESIZE;
   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
      eeprom_busy_wait();
      while (page_addr < page_end) {
         uint16_t w;
         if (page_addr == address) {
            w = value;
         } else if (page_addr == address - 1) {
            w = pgm_read_word(page_addr);
            w = (w & 0xFF) | (value << 8);
         } else if (page_addr == address + 1) {
            w = pgm_read_word(page_addr);
            w = (w & 0xFF00) | (value >>8);
         } else {
            w = pgm_read_word(page_addr);
         }
         boot_page_fill(page_addr, w);
         if ((page_addr & (SPM_PAGESIZE - 1)) == (SPM_PAGESIZE - 2)) {
            boot_page_erase(page_addr & ~(SPM_PAGESIZE-1));
            boot_spm_busy_wait();
            boot_page_write (page_addr & ~(SPM_PAGESIZE-1));
            boot_spm_busy_wait();
         }
         page_addr += 2;
      }
        boot_rww_enable ();
   }
}

Функцию поместил в NRWW секцию (с адреса 0xE000). При вызове ничего не пишется. Что я делаю не так?

Добавлено спустя 36 минут 42 секунды:
Забыл указать контроллер - ATMega64
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Запись в FLASH - ATMega

Сообщение $ilent » 14 июл 2010, 15:32

А вообще пишется ли?
Я когда использовал конструкцию PROGMEM и писал во флэш шрифт 5*7 размером в пол килобайта, то компилилось всё без проблем, а память не жрало :pardon: . Соответственно и выводился мусор.
Вообщем плюнул пока на это и писал в раму.
Но к вопросу присоединяюсь.
$ilent
 

Re: Запись в FLASH - ATMega

Сообщение blindman » 14 июл 2010, 15:39

Пишется, и самое странное то, что я это уже делал - [[Система голосового управления]], и функция записи практически аналогична функции из того проекта
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Запись в FLASH - ATMega

Сообщение =DeaD= » 14 июл 2010, 15:44

Может это опять бракованная АТМега64? Помнишь мы уже залипали с OR-AVR-M64-S планировавшимся?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Запись в FLASH - ATMega

Сообщение blindman » 14 июл 2010, 17:06

Нет, мега рабочая, бутлоадером код заливаю

Добавлено спустя 1 час 20 минут 8 секунд:
Во засада. Оказывается, недостаточно поместить код, пишущий в флэш, в NRWW - надо чтобы он был в области отведенной для бутлоадера через фьюзы.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Запись в FLASH - ATMega

Сообщение blindman » 15 июл 2010, 03:08

Переделал бутлоадер, добавив по фиксированным адресам функции заполнения буфера и стирания/записи страницы.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12