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

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-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

    • Купил, вроде нормальный, но нужно мнение других
    • Потому что так положено. Указывать напряжение и ток. "Какие ваши доказательства" (C) ? Вы уверены, что от USB ток подаётся напрямую в аккумулятор? Если Вы не видите контроллер заряда, это не значит, что его нет. Он может быть в часах или  в одном из разъёмов провода.  
    • Правильнее : "Никто не признался, что с ним сделали" Пока за шкварник не поймаешь, у всех всегда "никто не в курсе"   Придется. Подобная деградация экранов необратима.
    • То-то я думаю,что надписи оригинальные, но ноги не блестять.
    • я вернулся 22 апреля. существенное влияние времени ожидания появляется только в полной версии программы, когда нужно при чтении памяти получить пакет данных (у меня 128 байт). если прием не идет, то на 128 байт получается большое время ожидания. а на весь объем чтения получится вообще до хрена секунд. а при записи программа передает пакеты без задержки. но там все равно появляется время ожидания, так как после выполнения операции МК дает ответ. у меня команда состоит из 4 байт, и МК в ответ отправляет эти же 4 байта команды. мне было просто лень делать на каждую команду сравнение ответа с отправленной командой. теперь я собираюсь сделать такую проверку для каждой команды. у меня, вот, стал плохой контакт конвертера в гнезде ноута, и я уже несколько раз наблюдал у себя разрыв соединения. но без контроля ответа приходилось долго ждать окончания операции. а с контролем ответа выполнение операции прервется сразу, если ответ не поступит. по поводу сигнатуры - такая возможность есть не у всех МК. поэтому чтение сигнатуры для определения типа МК я сделать не могу. у всех старых нет и у АТмега48/88/168 тоже нет. а у АТмега48Р/88Р/168Р и у АТмега48РА/88РА/168РА такая возможность уже есть. и у АТмега328/328Р тоже есть.
    • Ты  считай  под  нагрузкой  сколько  будет напряжение анодное а не  на ХХ  при 200 вольт обмотке  анодной  будет 240 - 245 вольт анодное а не 275 вольт.   Ток  обмотки  ТС  будет  не  180 ма и не 200ма а гораздо  больше!  Смотри  лабораторную работу  практическую,какой  ток и напряжение в выпрямителях в разных точках! Сколько мощности  потребляет от сети! Всё не так проста как ты  поумножал! У  тебя  будет  мостовой  выпрямитель  первый  рисунок!
    • @КЭС Мне такая  тема  тоже будет интрестна   
×
×
  • Создать...