?

Log in

Баг в бутлоадере Arduino Mega 2560 R3 - Cообщество любителей Arduino [entries|archive|friends|userinfo]
Cообщество любителей Arduino

[ website | Официальный сайт Arduino ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Баг в бутлоадере Arduino Mega 2560 R3 [Aug. 22nd, 2014|10:20 am]
Cообщество любителей Arduino

ru_arduino

[aterentiev]
[Tags|]

Оригинал взят у aterentiev в Баг в бутлоадере Arduino Mega 2560 R3
Эта информация может быть интересна как тем, кто использует всю платформу Ардуино, так и тем, кто купил у китайцев и использует только саму плату с МК и "родным" бутлоадером. Ардуино Мега, как известно, имеет на борту бутлоадер STK500v2, что позволяет использовать для прошивки не только родной софт Ардуино, но и любой другой, поддерживающий этот протокол, а таких предостаточно.

Вчера прямо в процессе отладки софта через бутлоадер перестал шиться микроконтроллер. При этом компиляция была без проблем, программатор начинал шить и где-то ближе к концу внезапно прекращал мигать светодиодиками Rx/Tx, при этом avrdude на компе уходил в бесконечный цикл и выдавал что-то типа avrdude: stk500_2_ReceiveMessage(): timeout, зависая на многие минуты, так, что помогало только убить его процесс. Другие программы на тот же МК прошивались беспроблемно. Подобный баг я уже наблюдал пару месяцев назад, помогло немного изменить код программы, после чего я о нем забыл.

Исследования в verbose-mode показали, что в какой-то момент бутлоадер внезапно переходит в интерактивный режим и выдает в порт что-то типа командной строки и ждет:
bootloader>

Это показалось странным. Поиск в интернетах показал, что проблема известна, но мало кто знает пути ее решения. Причина оказалась в хитром баге бутлоадера, который при получении через порт трех восклицательных знаков подряд "!!!" переходит в интерактивный режим командной строки прямо в середине процесса заливки софта...

У многих на форумах проблема возникала при определении текстовых констант всяких предупреждений с этими восклицательными знаками и лечилось удалением хотя бы одного из них или делением констант на части. У меня же три байта с кодом 0х21 просто случайно оказались рядом в бинарном коде (проверил, посмотрев HEX и сделав поиск по "212121").

К сожалению, практически все "девственные" платы Arduino Mega 2560 на рынке имеют этот баг, т.к. несмотря на то, что проблема известна с момента начала массовых поставок плат из Китая, поставляемые вместе с Ардуино бутлоадеры до сих пор (а это уже несколько лет, примерно со времен Ардуино 0019) не изменялись...

Очевидное решение - заменить бутлоадер. Для тех, кто это делает не каждый день: для этого, конечно, потребуется внешний программатор, но на сегодняшний момент это не проблема, так как наши китайские друзья наладили массовый выпуск usbasp-клонов за копейки. HEX без вышеупомянутого бага здесь:

https://code.google.com/p/arduino/issues/detail?id=459

Линк в конце страницы (нашел гуглением, проверил, работает), как прошивать HEX - находится в интернетах очень быстро.

Возможно, этот баг присутствует и в других реализациях STK500v2 для других чипов, не только для Ардуино, этот вопрос я не исследовал.

LinkReply

Comments:
[User Picture]From: elchupanibrei
2014-09-04 11:00 pm (UTC)
советую еще 16u2 прошить. китайцы льют в него какую то древнюю версию.
(Reply) (Thread)