roboforum.ru

Технический форум по робототехнике.

Запись в FLASH - ATMega

Запись в 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

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

$ilent » 14 июл 2010, 15:32

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

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

blindman » 14 июл 2010, 15:39

Пишется, и самое странное то, что я это уже делал - [[Система голосового управления]], и функция записи практически аналогична функции из того проекта

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

=DeaD= » 14 июл 2010, 15:44

Может это опять бракованная АТМега64? Помнишь мы уже залипали с OR-AVR-M64-S планировавшимся?

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

blindman » 14 июл 2010, 17:06

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

Добавлено спустя 1 час 20 минут 8 секунд:
Во засада. Оказывается, недостаточно поместить код, пишущий в флэш, в NRWW - надо чтобы он был в области отведенной для бутлоадера через фьюзы.

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

blindman » 15 июл 2010, 03:08

Переделал бутлоадер, добавив по фиксированным адресам функции заполнения буфера и стирания/записи страницы.


Rambler\'s Top100 Mail.ru counter