1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/alicedodo-arduino-nrf2401-bootloader

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Ботлоадер для Arduino UNO/Nano/Pro Mini с использованием NRF24L01+

Описание

Этот ботлоадер предназначен специально для Arduino UNO/Nano/Pro Mini и позволяет загружать программы через модуль NRF24L01+. Поддерживает протокол STK500V2, совместим с avrdude и Arduino IDE. Объём памяти флэш-чипа составляет 2 КБ. Поддерживается частотная хоппинг передача данных, а также включены необходимые скрипты для программатора.

Примечание 1: В проекте включён упрощённый вариант кода для программатора, полная версия доступна по ссылке: https://gitee.com/alicedodo/arduino-nrf2401-programmer

Примечание 2: Может ли этот ботлоадер считаться просто игрушкой?

На первый взгляд это действительно может показаться игрушкой, так как при попытках обновления прошивки через радио невозможно автоматически сбросить устройство (что невозможно сделать без использования проводной связи). Это требует ручного сброса устройства, что приведёт к тому, что ботлоадер выйдет из режима ожидания и загрузка будет прервана. Однако если использовать специальную прошивку, которая поддерживает эту возможность, то ситуация может измениться:

  • Arduino установлен на беспроводном управляемом автомобиле или маленьком квадрокоптере;
  • Arduino используется как беспроводной узел, закреплённый на стене, внешней террасе, крыше здания или опоре освещения;При необходимости обновления прошивки можно отправить команду старой прошивке, чтобы она активировала watchdog, который затем вызовет сброс устройства после истечения времени. После этого bootloader выполнит загрузку новой прошивки.

Если процесс загрузки прерывается, bootloader имеет механизмы восстановления. Bootloader имеет два режима работы: NORMAL и CRITICAL. Режим выбирается в зависимости от источника сброса устройства:

  • При включении питания или ручном сбросе устройства — переход в режим NORMAL; если за секунду не получено сигналов загрузки, устройство переходит к работе с текущей прошивкой;
  • При сбросе устройства через watchdog — немедленный переход в режим CRITICAL;
  • В режиме NORMAL, если за секунду получен сигнал загрузки, bootloader автоматически переходит в режим CRITICAL;
  • В режиме CRITICAL, watchdog остаётся включен, время срабатывания watchdog равно одной секунде; во время загрузки прошивки необходимо регулярно "кормить" watchdog, чтобы он не сработал;
  • При прерывании загрузки, устройство переходит в режим CRITICAL, где беспроводной модуль сбрасывается и ждет новых сигналов загрузки.Поэтому, если загрузка была прервана, достаточно сбросить беспроводного программатора и повторить загрузку. ## Основные характеристики:

1. Поддержка протокола STK500V2 для загрузки прошивки

Реализованы общие команды протокола и подмножество ISP-команд: чтение/запись флэш-памяти, чтение/запись EEPROM, чтение только сбросовых бит.
Связь между беспроводным программатором и avrdude осуществляется через радиомодуль NRF24L01+. Программатор передает команды от PC, не расшифровывая их, а затем отправляет ответ ACK обратно в avrdude.
Тестировалось с версиями avrdude 5.10 и 6.3; гарантий корректной работы других версий нет. Версия 5.10 входит в состав winAVR2010, а 6.3 — это последняя официальная версия.### 2. Два способа загрузки: SPI с модулем NRF24L01P или последовательный порт Bootloader по умолчанию использует беспроводной модуль для приема данных. При отсутствии сигнала от беспроводного модуля используется последовательный порт (скорость 115200 бод).
Проверка наличия беспроводного модуля производится один раз при запуске системы, после чего переключение между портами больше не происходит.

3. Поддержка простого частотного хоппинга

При запуске bootloader начинает прослушивание сигнала рукопожатия на канале с базовой скоростью, адресом и каналом по умолчанию. Программатор передает новый набор значений (скорость, случайный канал и адрес) в сообщении рукопожатия. После успешного рукопожатия конфигурация меняется, и дальнейшая связь продолжается на новом канале.
Команды частотного хоппинга реализованы на основе протокола STK500V2 и выглядят как обычные команды для bootloader, поэтому теоретически можно несколько раз менять канал связи.

Как подключить:

По умолчанию используется следующий схемный лист: Схема подключения по умолчанию

Как скомпилировать:1. Измените порт устройства в Makefile, заменив DEVICE_PORT на ваш порт.

  1. Скомпилировать: make
  2. Для записи используйте usbasp: make upload (команда upload сначала записывает fuses, затем bootloader)
  3. Поскольку пин SPI-CLK подключен к светодиоду на плате, то загрузка bootloader'а через радиочастоту не будет мигать LED, как это делает официальный bootloader Arduino. После завершения записи рекомендуется проверить работоспособность по инструкциям ниже.(Если вы используете старую версию WinAVR2010, лучше не компилировать самостоятельно. WinAVR не обновлялся почти десять лет, а компилятор avr-gcc имеет версию 4.3, что приводит к низкой производительности при сборке. Bootloader точно превысит размер 2 КБ. Я использую версию 5.4.)(Для тех, кто не может сам скомпилировать, я загрузил скомпилированный HEX файл. Подключите плату согласно схеме выше. Файлы находятся в директории bin. Перед записью вам потребуется настроить fuses: lfuse:0xFF / hfuse:0xDA / efuse:0xFD.)## Как тестировать bootloader:
  4. Отключите модуль nrf24l01+, затем подключите USB-кабель от целевой платы к компьютеру и найдите соответствующее устройство COM.
  5. Введите команду тестирования avrdude -cstk500v2 -pm328p -P COMx/ttyUSBx/ttyACMx -U flash:r:test_read.hex:i.
  6. Если вы видите, что команда успешно завершилась выполнением, то поздравляем вас — bootloader успешно запущен.
  7. Обратите внимание, здесь есть проблема: Когда вы в первый раз подключаете Arduino с установленным этим bootloader'ом к компьютеру, тестовая команда выполняется корректно. Однако если повторно использовать эту команду без переподключения USB-кабеля, Arduino не будет реагировать, а команда приведёт к ошибке времени ожидания. Причина заключается в том, что при вторичном использовании команды автоматический процесс сброса микроконтроллера не активируется, что препятствует запуску bootloader'а. Это, конечно, не является багом bootloader'а; любое программное обеспечение на Arduino не отключает автоматический процесс сброса. Реальная причина связана с багом avrdude (версия 6.3, другие версии не проверялись): 1.Используйте любой консольный монитор порта, многократно открывайте и закрывайте соединение COM с Arduino; каждый раз Arduino будет перезапускаться.
  8. После каждого закрытия соединения COM в консольном мониторе попробуйте снова выполнить тестовую команду; Arduino будет перезапускаться, и команда выполнится корректно.## Как использовать bootloader для загрузки программы через Arduino IDE:
  9. Проверьте подключение проводов на каждой из двух плат, чтобы они были правильными (если вы не меняли код, проводка между двумя платами и модулем NRF24L01 должна быть одинаковой).
  10. Откройте проект arduino-nrf2401-programmer в директории arduino-nrf2401-programmer.ino через Arduino IDE.
  11. Скомпилируйте этот проект и загрузите его на плату Arduino, которая будет работать как беспроводной программатор.
  12. Откройте проект, который вы хотите загрузить на целевую плату, и скомпилируйте его.
  13. Настройте IDE перед загрузкой (в качестве примера используется встроенный пример Blink):
  14. Загрузите: "Проект" => "Загрузить через программатор".

Примечание: Этот шаг отличается от обычной загрузки программы: Беспроводной программатор не имеет доступа к целевой плате, поэтому он не может вызвать её сброс так же, как это делает последовательный порт. Поэтому требуется ручной сброс целевой платы. Для этого после начала загрузки следите за сообщениями состояния в нижнем левом углу IDE. Если появилось сообщение типа "Загрузка...", немедленно выполните ручной сброс целевой платы. Позднее начало загрузки может привести к её провалу, так как после сброса микроконтроллера bootloader ждет сигнал для загрузки всего одну секунду; при пропуске этого времени он переходит к выполнению firmware в области APP.## Результаты тестирования скорости потери пакетов:

  1. Отсутствие помех от устройств Wi-Fi 2.4 ГГц

  2. Незначительные помехи от устройств Wi-Fi 2.4 ГГц

  3. Ощутимые помехи от устройства программатора Wi-Fi 2.4 ГГц

  4. Ощутимые помехи от устройства bootloader'а Wi-Fi 2.4 ГГц

Конец:

По причине ограничения времени, я остановлюсь здесь. Если вас заинтересовала данная тема, оставьте комментарий, и я дополню документацию по конкретной реализации кода.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Беспроводной загрузчик, созданный специально для Arduino UNO/Nano/Pro Mini, может быть запрограммирован через модуль NRF24L01+ или последовательный порт. Объём Flash-памяти — 2 Кб. Загрузчик совместим с протоколом STK500V2, поддерживает avrdude, среду разработки Arduino IDE, а также передачу данных с использованием скачкообразной перестройки час... Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/alicedodo-arduino-nrf2401-bootloader.git
git@api.gitlife.ru:oschina-mirror/alicedodo-arduino-nrf2401-bootloader.git
oschina-mirror
alicedodo-arduino-nrf2401-bootloader
alicedodo-arduino-nrf2401-bootloader
master