Как стать автором
Обновить

Загрузка контроллеров без использования консоли Arduino IDE

Время на прочтение7 мин
Количество просмотров18K
Введение

При работе с контроллерами распределенной системы довольно часто приходится перезагружать контроллеры. Использование консоли 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.

image
Рисунок 2. Размещение файлов загрузчика и hex файла в отдельной папке.

image
Рисунок 3. Запуск загрузчика avrdude утилитой Command Prompt.

Загрузка контроллера Teensy загрузчиком teensy_post_compile.exe
После установки программного обеспечения Teensyduino контроллеров Teensy, в списке устройств консоли Arduino IDE появляются соответствующие контроллеры (см. Рисунок 4).

image
Рисунок 4. Список контроллеров Teensy в консоли Arduino IDE.

Образец написания команды загрузки hex кода в контроллер Teensy можно получить, выполнив последовательность, показанную выше для контроллеров Arduino. В окне вывода необходимо найти образец загрузчика — команду teensy_post_compile. Для автономной загрузки нужные файлы можно скопировать в отдельную папку, например, как показано ниже. Файлы teensy_post_compile, teensy_post_compile.exe и teensy.exe можно взять из пакета Arduino дополненного приложением Teensy.

image

Ниже показаны примеры команд загрузки 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 указан в списке диспетчера устройств, например.

image

При открытии виртуального СОМ порта контроллера 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.

image
Рисунок 5. Выполнение команды mode в Command Prompt. Команда устанавливает для порта СОМ15 частоту передачи 1200 бод, что вызывает сброс контроллера и запуск загрузчика, а также временно изменяет номера виртуального порта контроллера в списке устройств.

После закрытия порта (команда fclose(s)) загрузчик контроллера создает свой виртуальный (CDC) порт, который отображается в списке диспетчера устройств с новым номером примерно на 8 секунд.

image

По прошествии времени существования нового виртуального порта (8 сек.), в список диспетчера устройств возвращается СОМ порт с исходным номером.

image

Во время существования нового СОМ порта, через него в контроллер можно самостоятельно загрузить программу пользователя, используя образец команды avrdude консоли Arduino IDE. Получение образца команды загрузчика avrdude в среде Arduino IDE аналогично варианту, приведенному выше для микроконтроллеров Atmega328. Созданный виртуальный порт исчезает из списка устройств после перезагрузки платы и в список возвращается СОМ порт с исходным номером.

Загрузчик также можно запустить, подключением контакта RST платы Arduino на землю GND.
Если автоматический сброс контроллера (через создание и отключение СОМ порта на частоте 1200 бод) не работает, загрузку устройств (Arduino Leonardo, Arduino Pro Micro) на базе на микроконтроллера ATmega32U4 можно выполнить через консоль Arduino IDE в следующей последовательности.

1. Нажмите и удерживайте кнопку «Reset» (или замкните контакт RST на землю). Последовательное USB соединение разрывается. Из списка диспетчера устройств исчезает СОМ порт контроллера.

2. Нажмите кнопку image Upload (Ctrl+U) Arduino IDE. На Рисунок 6 показано начальное состояние диспетчера устройств (слева) и Arduino IDE (справа) на этом этапе
image
Рисунок 6. Номер СОМ порта в диспетчере устройств и индикация процесса компиляции программы в консоли Arduino IDE.

3. Дождитесь когда индикатор статуса закончит компиляцию «Compiling» и перейдет на загрузку «Uploading», как показано на Рисунок 7.

image
Рисунок 7. Номер нового временного СОМ порта в диспетчере устройств и индикация процесса загрузки программы в консоли Arduino IDE.

4. Отпустите кнопку «Reset» (разомкните контакт RST). USB соединение восстанавливается. Выполняется загрузка. Окончание загрузки индикатор обозначает фразой Done uploading (см. Рисунок 8)

image
Рисунок 8. Номер СОМ порта в диспетчере устройств и индикация завершения загрузки программы в консоли Arduino IDE.

Загрузка контроллеров через пакетный (командный) bat файл

Автономную загрузку (без использования консоли Arduino IDE) можно выполнить при помощи пакетного (командного) файла. Пример пакетного файла (с расширением bat) для загрузки HEX файлов в два контроллера Arduino Pro Micro (Atmega32u4), подключенных к компьютеру через первый хаб, в два контроллера Teensy, подключенных к компьютеру через второй хаб, и в контроллер Arduino UNO (Atmega328) приведен ниже. Загружаемые HEX файлы и все необходимые для этого программы были предварительно помещены в общую папку, показанную на Рисунок 9.

image
Рисунок 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.
Теги:
Хабы:
+13
Комментарии8

Публикации