Странное поведение атмега2560

Мужики, нужен совет.

Работаю с микроконтроллером атмега2560, плата собственной разработки. Скетч пишу в ардуино ide, формирую hex, зашиваю через avrdude. Естественно, в процессе участвует MegaCore. Общее количество строк кода перевалило за 8тыс.

Если скетч занимает, допустим, менее 110кб, проблем нет. Всë шьётся, работает. Если более 135кб (более 51% памяти), при отправке из ардуино вылетает ошибка в конце прошивки что-то типа 01f ! = 0x00. Ничего не работает. Если лью через avrdude hex, после завершения прошивки вылетает, что невозможно прочитать, возможно, установлены lock-биты. И тоже ничего не работает.

Лил и через Usbasp, и отдавал человеку с дорогущим программатором - результат одинаков. Перепаивал микроконтроллер - та же реакция.

С фьюзами дружу, всë перепробовал. Ощущение, что в меге вместо 256кб памяти только 128кб. Чо за на?

Тут же лью и блинки, и lcd1602 примеры - всë шьётся, работает, мигает.

шьешь через программатор?

если у китайцев покупал - ничего странного, перемаркировка

не, там косяк в программаторе usbasp, точнее в его прошивке
надо обновится на прошивку 1.5.+

читать тут

1 лайк

Да. Через свисток. И через профессиональный

Китайцы, куда без них

Да, и понижал скорость прошивки перемычкой jp3 и программно - ничо не меняется

А #4 читал?

А почему при таком огромном коде всё еще авр? Дешевле на stm перейти будет ))

PROGMEM используется ?

В любом HEX редакторе генеришь псевдослучайную последовательность байт размером 256-1 кб. Записываешь этот кампот в мегу и считываешь обратно. Сравниваешь. Это проверка на память.

По поводу размера: в меге не 256 кб, в ней ЧЕТЫРЕ СТРАНИЦЫ по 64 кб!!! Это есть в датащах, нюансы там то-же описаны. Читай.

4 читал. Принял к сведению, завтра обновлю прошивку усбасп

Да, пора уже на стм

Используется, причём нехило так

В этом и проблема скорее всего. В меге есть PROGMEM PROGMEM1 PROGMEM2 PROGMEM3 … разберитесь с этим …

Загрузка данных, вызовы/переходы между сегментами 64К - всё имеет свои правила …

То что не прошивается - HEX неверно формируется, пробуйте BIN …

В старом форуме была тема - там девочка делала глобус из вращающегося обруча со светодиодами на МЕГЕ и там была похожая хренотень с сегментами в 64К и HEX …

Так ТС ведь не на асме же пишет. Компилятор С++ и линкер, сами должны позаботиться ИМХО

1 лайк

Ну если даже HEX кривой … я уже конкретные моменты не помню, но точно помню что косяки вылезали именно на границах, кратных 16 битным адресам …

Интересно, конечно . Неплохо было бы, чтобы ТС отписался о результатах.
У меня такого не было, но я Мегу очень мало юзал.
Обычно, если надо отслеживать страницы, это специально оговаривается, что да как…

Так, прошивку для Usbasp скачал, пока не обновлялся.

Чуть подрезал код, уменьшил количество progmem (progmem у меня используется исключительно для вывода текста на lcd1602, больше ни для чего), включил LTO. Скетч стал 122кб. Льётся что из иде, что через avrdude одинаково без ошибок, но код, считай, не выполняется. Плата ведёт себя, как умалишëнная.

О, он прям голый С в мегу задувает? А чё, так можно было чтоле?

И используется так, что не хватает 128К ? Вы на экран “Войну и Мир” выводите? это точно двухстрочный ЛСД с 16 символами? :slight_smile:

Тебя не понял.
Я ,наоборот, о том, что считать страницы флеша - не проблема того, кто пишет в среде Ардуино. Ведь в 328р тоже страничная память, и никто не парится