Введение
При работе с контроллерами распределенной системы довольно часто приходится перезагружать контроллеры. Использование консоли Arduino IDE для перезагрузки заказчиком не очень удобно, поскольку для каждого типа контроллеров необходимо настраивать (или проверять) тип платы и номера СОМ портов, эту работу должен выполнять персонал, знакомый с IDE, да и не каждый заказчик желает знать, что система построена на контроллерах Arduino.
В этой работе рассматриваются варианты загрузки контроллеров (Arduino на Atmega328 и Atmega32u4 и совместимого контроллера Teensy) отдельными командами и через командный файл, без использования среды IDE.
Организация USB СОМ связи плат Arduino
По организации канала последовательной связи платы Arduino можно разделить на платы с преобразователем USB — UART и платы с микроконтроллерами, которые поддерживают USB связь без внешних преобразователей. К первым относятся платы Arduino UNO, Arduino NANO, Arduino Mini, Arduino UNO Ethernet, Arduino UNO WiFi на базе микроконтроллеров Atmega328. Ко вторым – платы Arduino Leonardo, Arduino Micro, Arduino Yun Mini, Arduino Industrial 101, Arduino Leonardo Ethernet с контроллерами Atmega32u4 [1].
Загрузка контроллера Arduino (Atmega328) программой avrdude.exe
Загрузку hex файла в контроллер Arduino можно выполнить программой avrdude.exe. Эта программа входит в состав пакета консоли IDE, например, версии Arduino 1.8.5. Загрузчик avrdude.exe запускается утилитой cmd или Command Prompt, которые запускаются как показано на Рисунок 1.
Рисунок 1. Пример запуска утилиты Command Prompt.
Чтобы получить образец написания команды загрузки hex кода в контроллер Arduino на вашем компьютере выполните следующую последовательность.
• Подключите Arduino
• Загрузите Arduino IDE
• Выберите тип платы Arduino из меню >Tools > Board >
• Выберите СОМ порт платы из меню > Tools > Port >
• Установите флажок upload в закладке Preferences: меню Arduino IDE > File > Preferences > Show verbose output during > upload
• Запустите меню >Sketch > Upload
• После завершения загрузки, в окне вывода Arduino IDE консоли найдите команду с avrdude, она выглядит, например, так:
Для выполнения команды avrdude утилитой Command Prompt в команду необходимо ввести двойные кавычки, как показано ниже.
Приведенная команда может использоваться для загрузки hex программ в контроллер Arduino с чипом Atmega328 и отдельным преобразователем USB – UART. Для контроллеров с Atmega32u4, поддерживающим USB связь без аппаратного преобразователя, для выполнения команды нужны дополнительные действия, которые описаны ниже в соответствующем разделе.
Поскольку откомпилированная программа — hex файл хранится в папке временных файлов пока открыта консоль IDE (..\AppData\Local\Temp\..), то hex файл лучше скопировать в отдельную папку, туда же скопировать загрузчик avrdude.exe и файл avrdude.conf.
После перемещения файлов (Рисунок 2), например, в папку C:\ArdIDE команда загрузки с обновленными путями доступа к файлам принимает вид, как показано на Рисунок 3.
Рисунок 2. Размещение файлов загрузчика и hex файла в отдельной папке.
Рисунок 3. Запуск загрузчика avrdude утилитой Command Prompt.
Загрузка контроллера Teensy загрузчиком teensy_post_compile.exe
После установки программного обеспечения Teensyduino контроллеров Teensy, в списке устройств консоли Arduino IDE появляются соответствующие контроллеры (см. Рисунок 4).
Рисунок 4. Список контроллеров Teensy в консоли Arduino IDE.
Образец написания команды загрузки hex кода в контроллер Teensy можно получить, выполнив последовательность, показанную выше для контроллеров Arduino. В окне вывода необходимо найти образец загрузчика — команду teensy_post_compile. Для автономной загрузки нужные файлы можно скопировать в отдельную папку, например, как показано ниже. Файлы teensy_post_compile, teensy_post_compile.exe и teensy.exe можно взять из пакета Arduino дополненного приложением Teensy.
Ниже показаны примеры команд загрузки hex файлов Blink_1.ino и Blink_2.ino в два контроллера Teensy, подключенных к компьютеру через USB хаб.
В этих записях порты хаба обозначены как usb:0/1A0000/0/1/1/1 и usb:0/1A0000/0/1/1/2.
Загрузка контроллера Arduino (Atmega32U4) программой avrdude.exe
Платы Arduino UNO, Leonardo, Micro и др. построены на базе микроконтроллера ATmega32U4. Этот микроконтроллер имеет встроенный USB-канал (full speed USB 2.0), поэтому загрузка программ в него отличается от рассмотренной загрузки в микроконтроллеры ATmega328 через дополнительный USB — UART преобразователь.
Номер СОМ порта контроллера Arduino указан в списке диспетчера устройств, например.
При открытии виртуального СОМ порта контроллера Arduino pro Micro (с любой частотой передачи 1200, …, 9600, … 115200 бод) происходит сброс контроллера и запуск программы пользователя. В среде МАТЛАБ программа создания виртуального порта выглядит следующим образом.
После закрытия виртуального СОМ порта с частотой не равной 1200 бод, например, как показано ниже
происходит выполнение пользовательской программы контроллера.
Сброс контроллера и запуск загрузчика контроллера выполняется после открытия и закрытия СОМ порта с частотой 12000 бод внешней средой, например, МАТЛАБ, как показано ниже.
Эту же операцию можно выполнить командой mode, как показано на Рисунок 5.
Рисунок 5. Выполнение команды mode в Command Prompt. Команда устанавливает для порта СОМ15 частоту передачи 1200 бод, что вызывает сброс контроллера и запуск загрузчика, а также временно изменяет номера виртуального порта контроллера в списке устройств.
После закрытия порта (команда fclose(s)) загрузчик контроллера создает свой виртуальный (CDC) порт, который отображается в списке диспетчера устройств с новым номером примерно на 8 секунд.
По прошествии времени существования нового виртуального порта (8 сек.), в список диспетчера устройств возвращается СОМ порт с исходным номером.
Во время существования нового СОМ порта, через него в контроллер можно самостоятельно загрузить программу пользователя, используя образец команды avrdude консоли Arduino IDE. Получение образца команды загрузчика avrdude в среде Arduino IDE аналогично варианту, приведенному выше для микроконтроллеров Atmega328. Созданный виртуальный порт исчезает из списка устройств после перезагрузки платы и в список возвращается СОМ порт с исходным номером.
Загрузчик также можно запустить, подключением контакта RST платы Arduino на землю GND.
Если автоматический сброс контроллера (через создание и отключение СОМ порта на частоте 1200 бод) не работает, загрузку устройств (Arduino Leonardo, Arduino Pro Micro) на базе на микроконтроллера ATmega32U4 можно выполнить через консоль Arduino IDE в следующей последовательности.
1. Нажмите и удерживайте кнопку «Reset» (или замкните контакт RST на землю). Последовательное USB соединение разрывается. Из списка диспетчера устройств исчезает СОМ порт контроллера.
2. Нажмите кнопку Upload (Ctrl+U) Arduino IDE. На Рисунок 6 показано начальное состояние диспетчера устройств (слева) и Arduino IDE (справа) на этом этапе
Рисунок 6. Номер СОМ порта в диспетчере устройств и индикация процесса компиляции программы в консоли Arduino IDE.
3. Дождитесь когда индикатор статуса закончит компиляцию «Compiling» и перейдет на загрузку «Uploading», как показано на Рисунок 7.
Рисунок 7. Номер нового временного СОМ порта в диспетчере устройств и индикация процесса загрузки программы в консоли Arduino IDE.
4. Отпустите кнопку «Reset» (разомкните контакт RST). USB соединение восстанавливается. Выполняется загрузка. Окончание загрузки индикатор обозначает фразой Done uploading (см. Рисунок 8)
Рисунок 8. Номер СОМ порта в диспетчере устройств и индикация завершения загрузки программы в консоли Arduino IDE.
Загрузка контроллеров через пакетный (командный) bat файл
Автономную загрузку (без использования консоли Arduino IDE) можно выполнить при помощи пакетного (командного) файла. Пример пакетного файла (с расширением bat) для загрузки HEX файлов в два контроллера Arduino Pro Micro (Atmega32u4), подключенных к компьютеру через первый хаб, в два контроллера Teensy, подключенных к компьютеру через второй хаб, и в контроллер Arduino UNO (Atmega328) приведен ниже. Загружаемые HEX файлы и все необходимые для этого программы были предварительно помещены в общую папку, показанную на Рисунок 9.
Рисунок 9. Пример содержимого папки для автономной загрузки 5 контроллеров: Arduino Pro Micro (Atmega32u4), Teensy и Arduino UNO (Atmega328)
Пакетный файл mcLoad.bat для автономной загрузки пяти контроллеров показан ниже. Задержки по одной секунде (TIMEOUT /T 1 /NOBREAK) добавлены перед загрузкой контроллеров Arduino Pro Micro. Задержка 2 секунды введена перед загрузкой второго контроллера Teensy. После окончания загрузки всех контроллеров закрывается окно программы Teensy.exe.
Отсоединение контроллера от USB линии не влияет на загрузку остальных контроллеров.
Для исключения имени Arduino из списка диспетчера устройств, например, “Arduino UNO (COMX)”, можно использовать программы, например, RegOwnersahipEx, или аппаратные клоны контроллеров Arduino, например, WAVGAT, который обозначается в списке устройств как “USB-SERIAL CH340 (COMX)”.
Библиографический список
1. Сравнение плат Arduino (таблица) digitrode.ru/arduino-comparison.html
2. Arduino Micro, shop.pimoroni.com/products/arduino-micro
3. Dr. Bob Davidov. Компьютерные технологии управления в технических системах portalnp.ru/author/bobdavidov.
При работе с контроллерами распределенной системы довольно часто приходится перезагружать контроллеры. Использование консоли Arduino IDE для перезагрузки заказчиком не очень удобно, поскольку для каждого типа контроллеров необходимо настраивать (или проверять) тип платы и номера СОМ портов, эту работу должен выполнять персонал, знакомый с IDE, да и не каждый заказчик желает знать, что система построена на контроллерах Arduino.
В этой работе рассматриваются варианты загрузки контроллеров (Arduino на Atmega328 и Atmega32u4 и совместимого контроллера Teensy) отдельными командами и через командный файл, без использования среды IDE.
Организация USB СОМ связи плат Arduino
По организации канала последовательной связи платы Arduino можно разделить на платы с преобразователем USB — UART и платы с микроконтроллерами, которые поддерживают USB связь без внешних преобразователей. К первым относятся платы Arduino UNO, Arduino NANO, Arduino Mini, Arduino UNO Ethernet, Arduino UNO WiFi на базе микроконтроллеров Atmega328. Ко вторым – платы Arduino Leonardo, Arduino Micro, Arduino Yun Mini, Arduino Industrial 101, Arduino Leonardo Ethernet с контроллерами Atmega32u4 [1].
Загрузка контроллера Arduino (Atmega328) программой avrdude.exe
Загрузку hex файла в контроллер Arduino можно выполнить программой avrdude.exe. Эта программа входит в состав пакета консоли IDE, например, версии Arduino 1.8.5. Загрузчик avrdude.exe запускается утилитой cmd или Command Prompt, которые запускаются как показано на Рисунок 1.
Рисунок 1. Пример запуска утилиты Command Prompt.
Чтобы получить образец написания команды загрузки hex кода в контроллер Arduino на вашем компьютере выполните следующую последовательность.
• Подключите Arduino
• Загрузите Arduino IDE
• Выберите тип платы Arduino из меню >Tools > Board >
• Выберите СОМ порт платы из меню > Tools > Port >
• Установите флажок upload в закладке Preferences: меню Arduino IDE > File > Preferences > Show verbose output during > upload
• Запустите меню >Sketch > Upload
• После завершения загрузки, в окне вывода Arduino IDE консоли найдите команду с avrdude, она выглядит, например, так:
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i
Для выполнения команды avrdude утилитой Command Prompt в команду необходимо ввести двойные кавычки, как показано ниже.
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/<b>avrdude</b>" -"CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i
Приведенная команда может использоваться для загрузки hex программ в контроллер Arduino с чипом Atmega328 и отдельным преобразователем USB – UART. Для контроллеров с Atmega32u4, поддерживающим USB связь без аппаратного преобразователя, для выполнения команды нужны дополнительные действия, которые описаны ниже в соответствующем разделе.
Поскольку откомпилированная программа — hex файл хранится в папке временных файлов пока открыта консоль IDE (..\AppData\Local\Temp\..), то hex файл лучше скопировать в отдельную папку, туда же скопировать загрузчик avrdude.exe и файл avrdude.conf.
После перемещения файлов (Рисунок 2), например, в папку C:\ArdIDE команда загрузки с обновленными путями доступа к файлам принимает вид, как показано на Рисунок 3.
Рисунок 2. Размещение файлов загрузчика и hex файла в отдельной папке.
Рисунок 3. Запуск загрузчика avrdude утилитой Command Prompt.
Загрузка контроллера Teensy загрузчиком teensy_post_compile.exe
После установки программного обеспечения Teensyduino контроллеров Teensy, в списке устройств консоли Arduino IDE появляются соответствующие контроллеры (см. Рисунок 4).
Рисунок 4. Список контроллеров Teensy в консоли Arduino IDE.
Образец написания команды загрузки hex кода в контроллер Teensy можно получить, выполнив последовательность, показанную выше для контроллеров Arduino. В окне вывода необходимо найти образец загрузчика — команду teensy_post_compile. Для автономной загрузки нужные файлы можно скопировать в отдельную папку, например, как показано ниже. Файлы teensy_post_compile, teensy_post_compile.exe и teensy.exe можно взять из пакета Arduino дополненного приложением Teensy.
Ниже показаны примеры команд загрузки hex файлов Blink_1.ino и Blink_2.ino в два контроллера Teensy, подключенных к компьютеру через USB хаб.
"C:\TnsIDE/teensy_post_compile" -file=Blink_2.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy
"C:\TnsIDE/teensy_post_compile" -file=Blink_1.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy
В этих записях порты хаба обозначены как usb:0/1A0000/0/1/1/1 и usb:0/1A0000/0/1/1/2.
Загрузка контроллера Arduino (Atmega32U4) программой avrdude.exe
Платы Arduino UNO, Leonardo, Micro и др. построены на базе микроконтроллера ATmega32U4. Этот микроконтроллер имеет встроенный USB-канал (full speed USB 2.0), поэтому загрузка программ в него отличается от рассмотренной загрузки в микроконтроллеры ATmega328 через дополнительный USB — UART преобразователь.
Номер СОМ порта контроллера Arduino указан в списке диспетчера устройств, например.
При открытии виртуального СОМ порта контроллера Arduino pro Micro (с любой частотой передачи 1200, …, 9600, … 115200 бод) происходит сброс контроллера и запуск программы пользователя. В среде МАТЛАБ программа создания виртуального порта выглядит следующим образом.
% create port.
s=serial('COM15','Baudrate',9600); % 115200
fopen(s);
После закрытия виртуального СОМ порта с частотой не равной 1200 бод, например, как показано ниже
fclose(s);
delete(s);
clear s
происходит выполнение пользовательской программы контроллера.
Сброс контроллера и запуск загрузчика контроллера выполняется после открытия и закрытия СОМ порта с частотой 12000 бод внешней средой, например, МАТЛАБ, как показано ниже.
% create port.
s=serial('COM15','Baudrate',1200); % 115200
fopen(s);
pause(1.5);
fclose(s);
delete(s);
clear s
Эту же операцию можно выполнить командой mode, как показано на Рисунок 5.
Рисунок 5. Выполнение команды mode в Command Prompt. Команда устанавливает для порта СОМ15 частоту передачи 1200 бод, что вызывает сброс контроллера и запуск загрузчика, а также временно изменяет номера виртуального порта контроллера в списке устройств.
После закрытия порта (команда fclose(s)) загрузчик контроллера создает свой виртуальный (CDC) порт, который отображается в списке диспетчера устройств с новым номером примерно на 8 секунд.
По прошествии времени существования нового виртуального порта (8 сек.), в список диспетчера устройств возвращается СОМ порт с исходным номером.
Во время существования нового СОМ порта, через него в контроллер можно самостоятельно загрузить программу пользователя, используя образец команды avrdude консоли Arduino IDE. Получение образца команды загрузчика avrdude в среде Arduino IDE аналогично варианту, приведенному выше для микроконтроллеров Atmega328. Созданный виртуальный порт исчезает из списка устройств после перезагрузки платы и в список возвращается СОМ порт с исходным номером.
Загрузчик также можно запустить, подключением контакта RST платы Arduino на землю GND.
Если автоматический сброс контроллера (через создание и отключение СОМ порта на частоте 1200 бод) не работает, загрузку устройств (Arduino Leonardo, Arduino Pro Micro) на базе на микроконтроллера ATmega32U4 можно выполнить через консоль Arduino IDE в следующей последовательности.
1. Нажмите и удерживайте кнопку «Reset» (или замкните контакт RST на землю). Последовательное USB соединение разрывается. Из списка диспетчера устройств исчезает СОМ порт контроллера.
2. Нажмите кнопку Upload (Ctrl+U) Arduino IDE. На Рисунок 6 показано начальное состояние диспетчера устройств (слева) и Arduino IDE (справа) на этом этапе
Рисунок 6. Номер СОМ порта в диспетчере устройств и индикация процесса компиляции программы в консоли Arduino IDE.
3. Дождитесь когда индикатор статуса закончит компиляцию «Compiling» и перейдет на загрузку «Uploading», как показано на Рисунок 7.
Рисунок 7. Номер нового временного СОМ порта в диспетчере устройств и индикация процесса загрузки программы в консоли Arduino IDE.
4. Отпустите кнопку «Reset» (разомкните контакт RST). USB соединение восстанавливается. Выполняется загрузка. Окончание загрузки индикатор обозначает фразой Done uploading (см. Рисунок 8)
Рисунок 8. Номер СОМ порта в диспетчере устройств и индикация завершения загрузки программы в консоли Arduino IDE.
Загрузка контроллеров через пакетный (командный) bat файл
Автономную загрузку (без использования консоли Arduino IDE) можно выполнить при помощи пакетного (командного) файла. Пример пакетного файла (с расширением bat) для загрузки HEX файлов в два контроллера Arduino Pro Micro (Atmega32u4), подключенных к компьютеру через первый хаб, в два контроллера Teensy, подключенных к компьютеру через второй хаб, и в контроллер Arduino UNO (Atmega328) приведен ниже. Загружаемые HEX файлы и все необходимые для этого программы были предварительно помещены в общую папку, показанную на Рисунок 9.
Рисунок 9. Пример содержимого папки для автономной загрузки 5 контроллеров: Arduino Pro Micro (Atmega32u4), Teensy и Arduino UNO (Atmega328)
Пакетный файл mcLoad.bat для автономной загрузки пяти контроллеров показан ниже. Задержки по одной секунде (TIMEOUT /T 1 /NOBREAK) добавлены перед загрузкой контроллеров Arduino Pro Micro. Задержка 2 секунды введена перед загрузкой второго контроллера Teensy. После окончания загрузки всех контроллеров закрывается окно программы Teensy.exe.
echo OFF
echo UPLOAD: Arduino Pro Micro 1
mode COM42 BAUD=12000
TIMEOUT /T 1 /NOBREAK
avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM45 -b57600 -D -Uflash:w:micro.ino.hex:i
echo UPLOAD: Arduino Pro Micro 2
mode COM43 BAUD=12000
TIMEOUT /T 1 /NOBREAK
avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM44 -b57600 -D -Uflash:w:micro.ino.hex:i
echo UPLOAD: Arduino UNO
avrdude -Cavrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w: BlinkUNO.ino.hex:i
echo UPLOAD: Teensy 1
"C:\mcLOAD/teensy_post_compile" -file=Blink_1_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy
REM Delay 2 seconds:
TIMEOUT /T 2 /NOBREAK
echo UPLOAD: Teensy 2
"C:\mcLOAD/teensy_post_compile" -file=Blink_2_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy
REM Close Teensy.exe
taskkill /f /IM Teensy.exe
Отсоединение контроллера от USB линии не влияет на загрузку остальных контроллеров.
Для исключения имени Arduino из списка диспетчера устройств, например, “Arduino UNO (COMX)”, можно использовать программы, например, RegOwnersahipEx, или аппаратные клоны контроллеров Arduino, например, WAVGAT, который обозначается в списке устройств как “USB-SERIAL CH340 (COMX)”.
Библиографический список
1. Сравнение плат Arduino (таблица) digitrode.ru/arduino-comparison.html
2. Arduino Micro, shop.pimoroni.com/products/arduino-micro
3. Dr. Bob Davidov. Компьютерные технологии управления в технических системах portalnp.ru/author/bobdavidov.
Комментарии (8)
safari2012
24.01.2019 14:47Поскольку откомпилированная программа — hex файл хранится в папке временных файлов пока открыта консоль IDE
меню/скетч/экспорт бинарного файла и тогда бинарник будет создан рядом с *.ino
sav13
24.01.2019 15:34А в Makefile все настроить и запускать make вместе с загрузкой?
Ох уж эти пользователи Windows! )))
AndyKorg
24.01.2019 17:43Сообщение для заказчиков: «Если подрядчик использует Arduino IDE для загрузки проверьте рекомендации подрядчика у предыдущих заказчиков» :)
lisovsky1
26.01.2019 19:51Как ни крути, без Arduino IDE никуда, ну по крайней мере на начальном этапе. Вот например в Mac OS может меняться название порта, от раза к разу, хотя вставляешь один и тот же преобразователь. Постоянно приходится переписывать makefile. И я вот недавно задумался, если в этой IDE можно спокойно компилировать код на Си, то зачем эти костыли? Хоть мне VS code очень нравится, но она наверно более удобна для многофайловых проектов, а для однофайловых, я все-таки склоняюсь к IDE.
Punk_Joker
Ардуинщики познают мир вне Arduino IDE)
PKav
Если бы познавали — купили бы программатор — они в системе не нумеруются :)
Punk_Joker
Это уже познавание мира вне платформы Ардуино)
juray
Они разные бывают. Некоторые всё-таки как COM-порт видны. STK500, например.