Перейти к содержанию

Bootloader Avr, Не Хочет Ничего Писать В Собственную Flash


squad_leader

Рекомендуемые сообщения

Имею проблему в силу невысоких знаний с bootloader'ом для AtMega168PA

В качестве основы использую http://www.siwawi.arubi.uni-kl.de/avr_projects/ проект Martin Thomas’a из Германии «AVRPROG compatible boot-loader»

Вообщем эта хрень почти работает.

Почти, потому что не пишет ничего в собственную флеш. Ошибок нет, просто отрабатывает с нулевым результатом.

Среда разработки - AtmelStudio7

МК - Atmega168PA

Исходники брал тут http://easyelectronics.ru/img/AVR_kurs/Bootloader/Bootloader.rar

Фьюзы настроил 8f4f02d95739.png

Линкеру указал LDFLAGS += -Wl,--section-start=.text=0x3800; То что ему нужно указывать адрес байтах, а не word'aх учел, умножил адрес на х2

Бутлоадер компилится без ошибок, шьется, отлично отрабатывает весь функционал, кроме одного.

Не шьет память.

Выгружал hex из МК, открывал в блокноте. Все адреса до секции бута заполнены как и положено FFFF.....

С первого адреса бута - идет код бута

Пробовал даже сразу в main()

руками задавать uint8_t gBuffer[128] ={0xAA,0xAB,0xAC,0xAE,0xAF,0xA1,0x2,0xA0,

........

0xAA,0xAB,0xAC,0xAE,0xAF,0xA1,0x2,0xA0,

};

Потом чистить флеш

eraseFlash();

Потом просто писать этот массив в первую ячейку флеша.

writeFlashPage(0x0000,gBuffer);

Не пишет.

Подскажите куда копать. 4 день сижу.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Ваша Мега168 поддерживается проектом?

169 поддерживается. 168 напрямую не заявлена, но *.h под нее переписал, переменные поправил.

Работают же все иные функции.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Почему Вы решили, что Мега с ближайшим номером является родней отсутствующей в списке?

168-я - это расширенная версия 8-й (16кб и более развитая периферия). Расширенный набор регистров, таблица векторов прерываний, есть различия в именах регистров и отдельных битов, начало области программ смещено до 0х100 (вместо 0х60 у Меги8).

Наверное корректировать только заголовочный файл .h маловато.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

8 заявлена, 16 заявлена, 164 заявлена, и все что рядом.

Я не только h поправил. Да и к тому же все же все порты работают, UART тоже, Ацп тоже. Вся сложная переферия в том числе.

Из флеша читать можно(читается норм), Во флеш писать можно, но изменений нету.

Такое ощущение что где-то стоит какая-то защита ,которая не позволяет функции п бутлоадера изменить флеш

Ссылка на комментарий
Поделиться на другие сайты

А как именно вы шьёте? Я к примеру использую загрузчик chip45boot2. И при каждом прошивании снимаю и подаю напряжение так как загрузчик работает первые 5 секунд после ресета проца а дальше управление передаётся основной программе. Можно и не выдёргивать питание а поставить кнопку ресет.

Ссылка на комментарий
Поделиться на другие сайты

Какие конкретно фузы выставлены?

Как определяете что бутлодырь ...

отлично отрабатывает весь функционал

Питание нормальное? Не из бутлодыря hex шьется и читается?

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

На скриншоте же видны фузы efuse=0xF8 ; hfuse=0xD7 ; lfuse=FD.

А вот содержимое лок-битов было бы интересно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Праздники закончились, возвращаюсь к проблеме.

-> Питание нормальное? Не из бутлодыря hex шьется и читается? Питание 3,3в через DCDC конвертер, все идеально.

ЧЕрез ISP и шьется и читается без каких либо проблем.

Фьюзы и локбиты

a06ed5e2edbc.jpg

2f83c1fbca1c.jpg

b5c1508347f3.jpg

Изменено пользователем squad_leader
Ссылка на комментарий
Поделиться на другие сайты

на всякий случай кину кусок кода который реализует запись

static inline uint16_t writeFlashPage(uint16_t waddr, pagebuf_t size)
{
uint32_t pagestart = (uint32_t)waddr<<1;
uint32_t baddr = pagestart;
uint16_t data;
uint8_t *tmp = gBuffer;

do
 {
 data = *tmp++;
 data |= *tmp++ << 8;
 boot_page_fill(baddr, data); // call asm routine.
 baddr += 2;   // Select next word in memory
 size -= 2;   // Reduce number of bytes to write by two
 }
while (size);    // Loop until all bytes written
rev_green; //reverse LED green
boot_page_write(pagestart);
boot_spm_busy_wait();
boot_rww_enable();  // Re-enable the RWW section
return baddr>>1;
}

Ссылка на комментарий
Поделиться на другие сайты

Нашел в интернете такое замечание

"На устройствах, которые имеют блок памяти загрузки (boot block), инструкция SPM имеет возможность записи во всю область памяти FLASH, но только в том случае, если она выполняется из области памяти загрузки. Выполнение SPM из секции приложения не дает никакого эффекта"

Вот прям задницей чую, что это из области моей пробелемы, но как проверить - не понятно

Ссылка на комментарий
Поделиться на другие сайты

Вообщем тему можно закрывать. Осилил.

Ошибка была в том, что линкеру нужно говорить LDFLAGS += -Wl,--section-start=.text=0x3800 даже если boot flash size уверен, что адрес 1С00

1С00 *2 = 3800

Изменено пользователем squad_leader
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...