Почти все современные платы Arduino используют загрузчик Optiboot . По сравнению с ранее использовавшимся ATmegaboot, он меньше по флэш-памяти (примерно на 1,5 КБ) и быстрее по скорости загрузки (115,2 К против 57,6 КБ) и запускает ваш эскиз быстрее (задержка во время ожидания после сброса короче).
Есть ли альтернативы загрузчику Optiboot? В частности, есть ли более мелкие (в терминах flash) загрузчики? Какие у них различия?
Optiboot - это самый маленький из доступных загрузчиков.
Но есть гораздо более мощный (со встроенной консолью для тестирования оборудования, проверки ОЗУ и флэш-содержимого и т. Д.) Загрузчик с более развитым и надежным протоколом связи stk500v2 между avrdude и загрузчиком AVR.
Я использовал его на ATmega2560 и ATmega1284p. Работает как для 3-х байтового, так и для 2-х байтового счетчика программ MCU.
Этот загрузчик основан на загрузчике 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 не нарушался.
Похоже, это часть 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)
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, он будет довольно оптимизирован. Вышеуказанный хак ускоряет загрузку, но не уменьшает размер загрузчика. Вы также можете удалить время ожидания в загрузчике, чтобы он быстрее запускался.
TinySafeBoot является альтернативой для устройств ATtiny и ATmega.
Совместим с большим количеством ATtinys и ATmegas (см. Ниже)
Доступ для чтения / записи к Flash и EEPROM.
Все IO доступны для последовательной связи
Однопроводный, также с несколькими AVR на одной линии
Автободинг, надежный протокол.
Активируется сбросом + пароль (необязательно)
Пароль и время ожидания пользователя могут быть изменены в любое время.
«Emergency Erase» для преодоления утерянного пароля - убивает все данные, но оставляет загрузчик без изменений.
ATtinys: ~ 550 байт,
ATmegas: <512 байт (!)
ТСБ для ATtiny может обновляться сам.
Исходный код является свободным программным обеспечением (GPL)
источник
Эээ ... не совсем. На самом деле есть [неофициальная] модификация Optiboot для ускорения загрузки .
Над текстом немного доработан для совместимости с сайтом. Оригинальный пост
Кроме того, и загрузчика ATmegaboot, вы не можете найти никакой альтернативы. Я полагаю, что если Arduino загрузит его на все когда-либо производимые Unos, он будет довольно оптимизирован. Вышеуказанный хак ускоряет загрузку, но не уменьшает размер загрузчика. Вы также можете удалить время ожидания в загрузчике, чтобы он быстрее запускался.
Если вы заинтересованы в максимизации флэш-памяти, посмотрите: Как действительно уменьшить эскиз, и этот ответ [ вкл. Что я могу сделать, если у меня заканчивается флэш-память или SRAM? ].
источник