Работаю с микроконтроллером атмега2560, плата собственной разработки. Скетч пишу в ардуино ide, формирую hex, зашиваю через avrdude. Естественно, в процессе участвует MegaCore. Общее количество строк кода перевалило за 8тыс.
Если скетч занимает, допустим, менее 110кб, проблем нет. Всë шьётся, работает. Если более 135кб (более 51% памяти), при отправке из ардуино вылетает ошибка в конце прошивки что-то типа 01f ! = 0x00. Ничего не работает. Если лью через avrdude hex, после завершения прошивки вылетает, что невозможно прочитать, возможно, установлены lock-биты. И тоже ничего не работает.
Лил и через Usbasp, и отдавал человеку с дорогущим программатором - результат одинаков. Перепаивал микроконтроллер - та же реакция.
С фьюзами дружу, всë перепробовал. Ощущение, что в меге вместо 256кб памяти только 128кб. Чо за на?
Тут же лью и блинки, и lcd1602 примеры - всë шьётся, работает, мигает.
В любом HEX редакторе генеришь псевдослучайную последовательность байт размером 256-1 кб. Записываешь этот кампот в мегу и считываешь обратно. Сравниваешь. Это проверка на память.
По поводу размера: в меге не 256 кб, в ней ЧЕТЫРЕ СТРАНИЦЫ по 64 кб!!! Это есть в датащах, нюансы там то-же описаны. Читай.
В этом и проблема скорее всего. В меге есть PROGMEM PROGMEM1 PROGMEM2 PROGMEM3 … разберитесь с этим …
Загрузка данных, вызовы/переходы между сегментами 64К - всё имеет свои правила …
То что не прошивается - HEX неверно формируется, пробуйте BIN …
В старом форуме была тема - там девочка делала глобус из вращающегося обруча со светодиодами на МЕГЕ и там была похожая хренотень с сегментами в 64К и HEX …
Интересно, конечно . Неплохо было бы, чтобы ТС отписался о результатах.
У меня такого не было, но я Мегу очень мало юзал.
Обычно, если надо отслеживать страницы, это специально оговаривается, что да как…
Так, прошивку для Usbasp скачал, пока не обновлялся.
Чуть подрезал код, уменьшил количество progmem (progmem у меня используется исключительно для вывода текста на lcd1602, больше ни для чего), включил LTO. Скетч стал 122кб. Льётся что из иде, что через avrdude одинаково без ошибок, но код, считай, не выполняется. Плата ведёт себя, как умалишëнная.
Тебя не понял.
Я ,наоборот, о том, что считать страницы флеша - не проблема того, кто пишет в среде Ардуино. Ведь в 328р тоже страничная память, и никто не парится