Какие есть альтернативы загрузчику Optiboot?

12

Почти все современные платы Arduino используют загрузчик Optiboot . По сравнению с ранее использовавшимся ATmegaboot, он меньше по флэш-памяти (примерно на 1,5 КБ) и быстрее по скорости загрузки (115,2 К против 57,6 КБ) и запускает ваш эскиз быстрее (задержка во время ожидания после сброса короче).

Есть ли альтернативы загрузчику Optiboot? В частности, есть ли более мелкие (в терминах flash) загрузчики? Какие у них различия?

Cybergibbons
источник

Ответы:

8

Optiboot - это самый маленький из доступных загрузчиков.

Но есть гораздо более мощный (со встроенной консолью для тестирования оборудования, проверки ОЗУ и флэш-содержимого и т. Д.) Загрузчик с более развитым и надежным протоколом связи stk500v2 между avrdude и загрузчиком AVR.

Я использовал его на ATmega2560 и ATmega1284p. Работает как для 3-х байтового, так и для 2-х байтового счетчика программ MCU.

У меня есть версия загрузчика STK500v2 на Sourceforge .

Этот загрузчик основан на загрузчике Peter Fleury STK500v2, обновленном Марком Спроулом. Я внес изменения, чтобы он поддерживал плату Goldilocks (ATmega1284p).

Ключевой особенностью является использование протокола STK500v2 для загрузки изображения Flash в Arduino. Этот протокол является более надежным и дает лучшие возможности по ошибкам, чем протокол avr109 . Кроме того, протокол avr109 называется «Arduino» в мире Arduino, потому что он переключает DTR (для сброса платы и автоматического входа в загрузчик), а протокол STK500v2 называется «Wiring» в мире Arduino из-за того же причина.

Загрузчик Fleury / Sproul STK500v2 предназначен для работы с ATmega2560, который имеет 3-байтовый программный регистр из-за большего размера Flash. Но он также поддерживает нормальные 2-байтовые платы (все остальное на самом деле).

Для плат с большим количеством Flash (например, Goldilocks 1284p) существует аппаратный монитор, который можно использовать для запроса Flash, SRAM и аппаратного обеспечения; Вы можете проверять соединения без дополнительного кода и проверять фактическое содержимое Flash и EEPROM. Поскольку 1284p поддерживает 2 USART, я добавил возможность отладки на USART1 , чтобы процесс загрузки через USART0 не нарушался.

feilipu
источник
Похоже, это часть FreeRTOS, этот загрузчик полностью независим от FreeRTOS?
jfpoilpret
1
Это совершенно независимо. Загрузчик используется для записи флэш-памяти с чем угодно. FreeRTOS появляется позже после запуска main (). Я просто храню его в том же хранилище. Я не писал это, просто изменил для моих целей.
Feilipu
Это кажется интересным; было бы полезно, если бы вы суммировали в своем ответе важные характеристики вашего загрузчика: размер во Flash, максимальную скорость загрузки, хряки Arduino, с которыми он может работать, и некоторые дополнительные сведения о тестировании оборудования).
jfpoilpret
Это (на основе) загрузчик Peter Fleury STK500v2, обновленный Марком Спроулом. Я внес изменения, чтобы он поддерживал плату Goldilocks (ATmega1284p). Ключевой особенностью является использование протокола STK500v2 для загрузки флеш-изображения в Arduino. Этот протокол является более надежным и дает лучшие возможности по ошибкам, чем протокол avr109. Кроме того, протокол avr109 называется «Arduino» в мире Arduino, потому что он переключает DTR (для сброса платы и автоматического входа в загрузчик), а протокол STK500v2 называется «Wiring» в мире Arduino из-за того же причина.
Feilipu
1
Спасибо за информацию, я обновил ваш пост, так как считаю, что эта информация должна быть частью вашего ответа. Не стесняйтесь добавлять больше информации, если вы считаете нужным!
jfpoilpret
3

TinySafeBoot является альтернативой для устройств ATtiny и ATmega.

  • Совместим с большим количеством ATtinys и ATmegas (см. Ниже)

  • Доступ для чтения / записи к Flash и EEPROM.

  • Все IO доступны для последовательной связи

  • Однопроводный, также с несколькими AVR на одной линии

  • Автободинг, надежный протокол.

  • Активируется сбросом + пароль (необязательно)

  • Пароль и время ожидания пользователя могут быть изменены в любое время.

  • «Emergency Erase» для преодоления утерянного пароля - убивает все данные, но оставляет загрузчик без изменений.

  • ATtinys: ~ 550 байт,

  • ATmegas: <512 байт (!)

  • ТСБ для ATtiny может обновляться сам.

  • Исходный код является свободным программным обеспечением (GPL)

Эшлин Блэк
источник
Кто-нибудь знает, как БСЭ сравнивается с Optiboot? Последнее обновление, по крайней мере, 2 года назад ...
Джонни, почему
1

Есть ли альтернативы загрузчику Optiboot?

Эээ ... не совсем. На самом деле есть [неофициальная] модификация Optiboot для ускорения загрузки .

Чтобы установить высокие скорости передачи данных…

  • Убедитесь, что Arduino IDE не работает
  • Скачайте 7-Zip архив по ссылке выше
  • Извлеките три файла в следующий каталог: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Откройте файлboards.txt, расположенный в следующем каталоге: {Arduino Installation Root}\hardware\arduino\

Найти этот раздел внутри него:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Добавьте следующий раздел ...

uno_uf.name=Arduino Uno / Upload Fast
uno_uf.upload.protocol=arduino
uno_uf.upload.maximum_size=32256
uno_uf.upload.speed=250000
uno_uf.bootloader.low_fuses=0xff
uno_uf.bootloader.high_fuses=0xde
uno_uf.bootloader.extended_fuses=0x05
uno_uf.bootloader.path=optiboot
uno_uf.bootloader.file=optiboot_atmega328_250000.hex
uno_uf.bootloader.unlock_bits=0x3F
uno_uf.bootloader.lock_bits=0x0F
uno_uf.build.mcu=atmega328p
uno_uf.build.f_cpu=16000000L
uno_uf.build.core=arduino
uno_uf.build.variant=standard
  • Измените два выделенных значения на скорость передачи, которую вы планируете использовать: 250000, 500000 или 1000000. Сохраните и закройте файлboards.txt.
  • Используя ваш любимый ISP-программист, установите новый загрузчик. Не забудьте: Убедитесь, что выбрана плата Arduino Uno / Upload Fast (Инструменты / Доска) , Если необходимо, убедитесь, что выбран последовательный порт вашего программатора (Инструменты / Последовательный порт) , Убедитесь, что выбран программатор (Инструменты / Программист ) , После установки загрузчика, измените последовательный порт на последовательный порт вашего Arduino Uno .

Над текстом немного доработан для совместимости с сайтом. Оригинальный пост


Кроме того, и загрузчика ATmegaboot, вы не можете найти никакой альтернативы. Я полагаю, что если Arduino загрузит его на все когда-либо производимые Unos, он будет довольно оптимизирован. Вышеуказанный хак ускоряет загрузку, но не уменьшает размер загрузчика. Вы также можете удалить время ожидания в загрузчике, чтобы он быстрее запускался.

Если вы заинтересованы в максимизации флэш-памяти, посмотрите: Как действительно уменьшить эскиз, и этот ответ [ вкл. Что я могу сделать, если у меня заканчивается флэш-память или SRAM? ].

Анонимный пингвин
источник