ProMicro и bootloader
- Войдите на сайт для отправки комментариев
Ср, 30/03/2022 - 16:26
Добрый день камрады.
Назрел вопросец по поводу бута в ПроМикро. Значится имеет вшитый по умолчанию usb-бут, который при замыкании reset на землю, определяется в системе как компорт через который с помощью usbasp прошиваем. Допустим прошили что-то типа hid устройства, всё красиво, при следующем подключении по usb стартует основная программа и для следующей прошивки надо снова замыкать ресет. Так вот собсно вопрос, можно ли каким-то способом программно ресентнутся в бут? Пробовал watchdog, не помогает - стартует основной флеш.
программно с какой целью? Бутлоадер имеет смысл запускать только в случае, если у вас есть какое-то внешнее устройство, готовое прошивать про микру. Если оно есть - пусть оно за РЕСЕТ и дергает.
программно с какой целью? Бутлоадер имеет смысл запускать только в случае, если у вас есть какое-то внешнее устройство, готовое прошивать про микру. Если оно есть - пусть оно за РЕСЕТ и дергает.
Ну как с какой целью, чтобы я из своей программы смог прошить.
Вся ж прелесть именно atmega32u4 что там аппаратный usb и бутлоадер создает по юсб виртуальный компорт, по которому и прошивается. т.е. не надо никаких внешних программаторов.
Пробовал watchdog, не помогает - стартует основной флеш.
ну перепиши загрузчик, чтобы не стартовал
ну перепиши загрузчик, чтобы не стартовал
Загрузчик трогать нельзя, эти платы ардуино идут по умолчанию с загрузчиком, который создает в системе ком-порт по которому заливается основная программа. Но загрузчик выполняется только после нажатия ресет, т.е. когда просто воткнуть в юсб, то система сброса это "нюхает" и загрузчик не вызывает, а стартует с основной программы. Для прошивки надо снова нажимать ресет или сделать это программно. Внизу картинка одной программы, которая так и делать, т.е. программно это реально, хочу только узнать куда копать. Может как-то вызвать функцию, с указателем на адрес загрузчика. Надо попробовать.
как-то несколько лет назад Дракула подробно обьяснял, как сбросить статус загрузки еще до исполнения загрузчика, возможно это именно то, что вы ищете (хотя не уверен)
ща попробую найти
вот как-то так
http://arduino.ru/forum/apparatnye-voprosy/ne-mogu-vylechit-vatchdog-na-goloi-atmege328r-s-vnutr-taktirovaniem-8-mgts#comment-339435
по состоянию регистра MCUSR можно определить, что вызвало перезагрузку и, вероятно, сэмулировать реакцию загрузчика как на хард-ресет
Хотя это лучше у Дракулы спросить
Исходники загрузчиков есть в IDE - что мешает шагнуть в нужную точку загрузчика (0x785E для Caterina)???
__Alexander, IDE при прошивке не дёргает ресет. Тыц. Теоритически можно выехать в бут и из тела программы, но подозреваю, что желающий такого изврата куда то не той дорогой пошёл...)
__Alexander, IDE при прошивке не дёргает ресет. Тыц. Теоритически можно выехать в бут и из тела программы, но подозреваю, что желающий такого изврата куда то не той дорогой пошёл...)
Именно это и надо, стартонуть загрузчик из основной программы.
Загрузчик трогать нельзя, эти платы ардуино идут по умолчанию с загрузчиком, который создает в системе ком-порт по которому заливается основная программа.
первое из второго никак не следует
для загрузчика Caterina
для загрузчика Caterina
"святая катерина пошли мне армянина"... )))
Короче получилось вызвав загрузчик как функцию по адресу.
Главный нюанс был в том, чтобы устройство переинициализировалось, надо текущее прибить.
Короче, создаем указатель на функцию, даем функции имя и адрес и вызываем.
Загрузчик начинается с адреса 0x7000 в байтах, поэтому в словах это 0x3800;
Если использовать асм вставку, как привел Komandir, то адрес указывать в байтах.