Александр Терентьев (aterentiev) wrote in ru_radio_electr,
Александр Терентьев
aterentiev
ru_radio_electr

Category:

Баг в бутлоадере 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 для других чипов, не только для Ардуино, этот вопрос я не исследовал.
Tags: arduino, Гайд, Инструмент, МК, Негодую
Subscribe
  • Post a new comment

    Error

    Comments allowed for members only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 17 comments