Ви не увійшли.
Сторінки 1
Файл з розширенням .hex - це вже готова скомпільована прошивка для мікроконтролера, її залишається лише завантажити в флеш-память мікроконтролера і вона одразу почне працювати.
Розберемося, як це зробити під віндою найпростіше, як то кажуть "без SMS і реєстрації".
1. Єдина програма, яка нам для цього знадобиться - avrdude, вона портована під вінду, скачати її можна звідси (x64 - 64бітна версія).
2. Інсталювати нічого не потрібно, архів просто розпаковуєм в якийсь каталог, в ньому знаходиться лише три файли. Для прикладу, я розпакував в C:/Users/honey/Downloads/avrdude
3. Переходим в командний рядок. Натискаєм Win+R, в полі для вводу вводим "cmd" (три літери без лапок) і натискаєм Enter. Відкриється вікно, в якому можна вводити команди, це і є "командний рядок".
4. Потрібно перейти в каталог, в який ми розпакували avrdude в п.2 такою командою (тут і далі команди вводяться в командному рядку і натискається Enter):
cd C:/Users/honey/Downloads/avrdude
Середовище готове, в цей же каталог скачуєм або переносим файли .hex
5. Я розгляну найпростіший варіант з Arduino NANO, яка може прошиватися за допомогою бутлоадера через послідовний порт. При підключенні NANO в порт USB в системі створиться COM-порт (він відповідає USB-UART перетворювачу CH340, який напаяний на платі NANO). Необхідно визначити номер цього COM-порта і швидкість, на якій працює бутлоадер в NANO. Для цього пробуєм виконати команду:
avrdude -P COM3 -b 115200 -c arduino -p m328p -U sig:r:-:h
Замість COM3 пробуєм COM4, COM5, ... Замість 115200 пробуєм 57600. Запамятовуєм варіант, який спрацював.
6. Нарешті прошиваєм нашу прошивку (підставляєм правильний COM-порт і швидкість):
avrdude -P COM3 -b 115200 -c arduino -p m328p -U flash:w:example.hex:i
Неактивний
7. Якщо прошивка має щось виводити в послідовний порт, то вивід можна переглянути ось таким скриптом (підставляєм COM-порт із п.5 і швидкість, на якій виводить прошивка):
powershell "$p=new-Object System.IO.Ports.SerialPort COM3,9600;$p.Open();while($p.IsOpen){Write-Host -NoNewLine $p.ReadExisting();if([Console]::KeyAvailable){$p.Write([Console]::ReadKey($true).KeyChar)}}"
Вихід з цього режиму по Ctrl+C.
Оскільки не завжди доводиться прошивати лише NANO, тому потрібно розглянути і інший спосіб прошивки AVR мікроконтролерів - через ISP-інтерфейс. На фізичному рівні ISP-інтерфейс це SPI-інтерфейс, в якому сигнал CS підключається до входу RST мікроконтролера. Для цього знадобиться пристрій, який з одного боку підключається до ПК (наприклад по USB), а з іншого має виводи SPI-інтерфейса: CS,SCK,MISO,MOSI. Мікроконтролер, в який будемо заливати прошивку, називають target (ціль), а пристрій-посередник - programmer (програматор). Програматори можуть бути апаратними (наприклад на FT2232), але більшість з них програмні (наприклад USBasp). Я розгляну найбільш універсальний варіант, який відноситься до програмного типу.
Плата Arduino NANO в якості програматора для іншого мікроконтролера
Пункти 1-5 попередньої інструкції залишаються без змін, а далі так:
6. Прошиваєм в NANO прошивку, яка перетворить Arduino NANO в програматор (підставляєм COM-порт і швидкість із п.5):
avrdude -P COM3 -b 115200 -c arduino -p m328p -U flash:w:ArduinoISP.hex:i
Вже скомпільовану прошивку ArduinoISP.hex можна взяти звідси (а ось тут її вихідний код), зберігаєм в той же каталог, що був у п.2, а щоб не додавало додаткове розширення .txt, вибираєм Тип файла: Всі файли (*.*) і в Імені файла видаляєм .txt залишаючи лише .hex
Після використання NANO в якості програматора, в неї потім можна прошити будь-яку іншу прошивку.
7. Підключаємо ціль до програматора за схемою (призначення виводів цільового мікроконтролера можна знайти в його даташиті, а для готових плат в їх схемі):
8. Нарешті прошиваєм нашу прошивку в ціль (підставляєм COM-порт із п.5 і швидкість 19200):
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U flash:w:example.hex:i
якщо ціль, наприклад, ATtiny13A, тоді відповідно так:
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U flash:w:example.hex:i
Корисні приклади:
а) Прошити в іншу Arduino NANO бутлоадер:
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U flash:w:optiboot_atmega328.hex:i -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0xfd:m
Вже скомпільовану прошивку бутлоадера можна взяти звідси.
б) Відключити використання бутлоадера:
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xdf:m -U efuse:w:0xfd:m
в) Прочитати і змінити ф'юзи на ATtiny13A:
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U lfuse:r:-:h -U hfuse:r:-:h
avrdude -P COM3 -b 19200 -c avrisp -p t13a -U lfuse:w:0x7a:m -U hfuse:w:0xff:m
Значення ф'юзів можна підставити і обчислити нові на калькуляторі ф'юзів.
Розгляну ще один цікавий приклад програматора. Уявіть, що в попередній схемі програматора SPI-інтерфейс є окремою фізичною частиною програматора, якою Arduino NANO може керувати, і цю частину можна розмістити десь далеко. Це могло б, наприклад, спростити процес розробки і відлагодження ПЗ, "не відходячи від ПК".
Віддалена прошивка і віддалений монітор порта
Пункти 1-5 попередньої інструкції залишаються без змін, а далі так:
6. Прошиваєм в NANO прошивку, яка перетворить Arduino NANO в віддалений програматор (підставляєм COM-порт і швидкість із п.5):
avrdude -P COM3 -b 115200 -c arduino -p m328p -U flash:w:ArduinoOWISP.hex:i
Вже скомпільовану прошивку ArduinoOWISP.hex можна взяти звідси (а ось тут її вихідний код).
7. Підключаємо ціль до програматора за схемою:
7а. Оскільки транспортом для SPI в даному випадку буде 1-wire шина і таких slave-пристроїв на шині може бути багато, то потрібно програматору повідомити адресу slave-пристрою, це можна зробити такими командами (підставляєм COM-порт із п.5):
mode COM3 baud=19200 data=8 parity=n dtr=off rts=off
set /p x="[2044420F" <nul >\\.\COM3
set /p x="484E59A2]" <nul >\\.\COM3
Тут 2044420F484E59A2 - розбита на дві частини адреса slave-пристрою (ціла чомусь не проходить), а ідея, як передати дані, щоб не додавався символ нового рядка, взята звідси.
Є й інший, інтерактивний спосіб. Запускаєм такий скрипт (підставляєм COM-порт із п.5):
powershell "$p=new-Object System.IO.Ports.SerialPort COM3,19200;$p.Open();$p.Write('0 0 ');while($p.IsOpen){Write-Host -NoNewLine $p.ReadExisting();if([Console]::KeyAvailable){$p.Write([Console]::ReadKey($true).KeyChar)}}"
В запущеному скрипті доступні такі команди (повний список з прикладами і поясненнями знаходиться тут):
[2044420F484E59A2] (1-wire адреса в квадратних дужках, Enter не натискаємо) - встановити поточну адресу slave-пристрою;
? (знак питання, Enter не натискаємо) - отримати список адрес доступних slave-пристроїв на шині 1-wire і показати поточну адресу;
Ctrl+C - вихід.
8. Доступні всі ті ж самі команди avrdude, що і в п.8 попередньої інструкції.
9. Якщо прошивка має щось виводити в OWSerial (віртуальний послідовний порт для такого типу підключення), то вивід можна переглянути, запустивши скрипт із п.7а і натиснувши при його роботі Enter.
Остання редакція Honey (2023-12-07 09:05:12)
Неактивний
А якщо у мене виникнуть проблеми з драйверами або я не зможу знайти правильний COM-порт, що мені робити? Чи є якісь утиліти, які можуть допомогти мені в цьому?
Ось так за допомогою командного рядка можна отримати список COM-портів, підключених через USB:
powershell "Get-PnPDevice | Where-Object{$_.DeviceID -cmatch '^USB'} | Where-Object{$_.Name -cmatch 'COM\d+'} | Where-Object{$_.Present -in 'True'} | Select-Object Name,Description,Manufacturer,PNPClass,Service,Present,Status,DeviceID | Sort-Object Name"
Приклад виводу:
Name : USB-SERIAL CH340 (COM4)
Description : USB-SERIAL CH340
Manufacturer : wch.cn
PNPClass : Ports
Service : CH341SER_A64
Present : True
Status : OK
DeviceID : USB\VID_1A86&PID_7523\5&202ECBB1&0&1
Неактивний
Добрий день. Скажіть чи працює avrdude на windows 10?
У мене віндовс 10 і на ній працює. Драйвер USB-UART CH340 версії 3.5.2019.1
Можливо знадобиться такий лайфхак, коли будете використовувати avrdude з ключиком "-c avrisp"
Конденсатор (між RST і GND, або RST і VCC) чи перемичка (між RST і VCC) використовуються як лайфхак, якщо драйвер USB-UART (CH340) неправильно керує сигналом DTR, в мене в віндовс 10 з цим проблем немає, в лінуксі пробема зникла коли перейшов на ядро 5.4.х (на 4.х ще була така проблема).
Неактивний
Сторінки 1