- PVSM.RU - https://www.pvsm.ru -

Прошивка hex файлов при помощи Arduino и SinaProg

image

Приветствую всех пользователей хабра [1], в частности тех кто страдает темой Arduino [2] как собственно и я.

Меня уже давно спрашивают, можно ли прошивать hex файлы при помощи Arduino, изменять фьюзы, считывать прошивку и всякое такое… Ответ — да можно, и я сегодня вам расскажу, как я это делаю.


(Данное видео дублирует представленную ниже информацию, в текстовом формате )

Arduino, это как по мне отличный старт для новичка, но нужно расти дальше, мир микроконтроллеров прекрасен и дарит огромные возможности, но увы Arduino это довольно таки узкопрофильное направление.

Небольшая предыстория:
Одного прекрасного дня я наткнулся на отличный проект на ATtiny13, но увы автор выгрузил в сеть только hex файл и схему и конечно я так и не смог его попробовать в железе. Меня этот вопрос мучил всё больше и больше, и тут, я случайно наткнулся на одно видео в сети, где автор при помощи Arduino прошил другой микроконтроллер имея только hex файл, ну и схему разумеется, именно он мне подсказал что типа использую SinaProg но с Arduino'вскими файлами.

Загуглив на тему SinaProg я скачал SinaProg 2.1.1.RUS [3] но он работать отказывался с Arduino, потому я закинул парочку-тройку файлов из Arduino IDE в папку SinaProg 2.1.1data и всё заработало.

Пройдёмся коротко по возможностям софта, вот его скрин:

image

В блоке Hex-file выбираем hex или eep(первый прошивка второй содержимое энергонезависимой памяти).

А той части где кнопка ">" мы можем видеть всякие сообщения, типа OK прошилось, или ERROR, сама же кнопка ">" открывает логи.

В блоке Flash есть кнопки:

Program — запись hex-файла в микроконтроллер( возможно когда выбран Hex-file);
Verify — проверка прошивки что в микроконтроллере и hex-файла, проще говоря, их сравнение, если всё норм то программа говорит OK;
Read — считать hex-файл.

С блоком EEPROM всё аналогично.

Далее блок Device, тут можно выбрать нужный микроконтроллер, вот весь список поддерживаемых( не обращайте внимания цифры и буквы после названий микроконтроллеров, список выдрал из файла Device.txt который лежит в папке SinaProg 2.1.1data):

Тут их пара–тройка

Шутка, вон их сколько:

AT90CAN128
AT90CAN32
AT90CAN64
AT90PWM2
AT90PWM2B
AT90PWM3
AT90PWM3B
AT90USB1286
AT90USB1287
AT90USB162
AT90USB646
AT90USB647
AT90USB82
AT90s1200
AT90s2313
AT90s2323
AT90s2333
AT90s2343
AT90s4414
AT90s4433
AT90s4434
AT90s8515
AT90s8535
ATmega103
ATmega128
ATmega1280
ATmega1281
ATmega1284P
ATmega128RFA1
ATmega16
ATmega161
ATmega162
ATmega163
ATmega164P
ATmega168
ATmega169
ATmega2560
ATmega2561
ATmega32
ATmega324P
ATmega325
ATmega3250
ATmega328P
ATmega329
ATmega3290
ATmega3290P
ATmega329P
ATmega48
ATmega64
ATmega640
ATmega644
ATmega644P
ATmega645
ATmega6450
ATmega649
ATmega6490
ATmega8
ATmega8515
ATmega8535
ATmega88
ATtiny11
ATtiny12
ATtiny13
ATtiny15
ATtiny22 2343
ATtiny2313
ATtiny24
ATtiny25
ATtiny26
ATtiny261
ATtiny44
ATtiny45
ATtiny461
ATtiny84
ATtiny85
ATtiny861
ATtiny88
ATxmega64A1
ATxmega128A1
ATxmega128A1D
ATxmega192A1
ATxmega256A1
ATxmega64A3
ATxmega128A3
ATxmega192A3
ATxmega256A3
ATxmega256A3B
ATxmega16A4
ATxmega32A4
ATxmega64A4
ATxmega128A4

Как видите есть всё популярные микроконтроллеры фирмы ATmel, в частности ATmega328P, ATmega8, ATtiny13, ATtiny2313 и всякие другие.

Далее — кнопка Search, если её нажать то программа попытается прочитать сигнатуры того микроконтроллера который подключен к программатору, проще говоря поищет микроконтроллер. Потом может ответить OK, или ERROR в информационном блоке, если всё норм или когда нет соответственно.

В блоке Fuses есть предустановки для ATmega8 для работы на разных частотах, но увы только для ATmega8 и ATmega32, можно добавить в файле Fuse.txt [4] (который лежит в папке SinaProg 2.1.1data).

Есть кнопка Program — записать предустановки, смотри на абзац выше.

А так же Advanced… лихая кнопка, после её нажатия можно увидеть вот такое окно:

image

Device signature — какие-то циферки, я так понял это идентификатор микроконтроллера, по им программа опознаёт что за микроконтроллер мы ей суём.

Информационная часть, всё как выше.

Чуть ниже идут фьюзы… если уж зачешется то не забывай их сначала считать кнопкой Read, записать фьюзы — кнопка Write, кнопка Chip Erase стирает микроконтроллер, аналогия — форматирование флешки к примеру на компьютере(но фьюзы не устанавливаются по умолчанию, так что забывать об этом не стоит).

Пару слов о фьюзах, фьюзы это такие как бы тонкие подстройки микроконтроллера, то частоту поднять то убавить, то вкл/выкл тактирование от внутренней RC цепочки то ещё что-то… вообщем туда лезть только в крайнем случае, иначе можно заблокировать(нашаманить так что перестанет работать, серьёзно) микроконтроллер, и без Atmega fusebit doctor [5] уже никак.

Вот первая ссылка [6] с гугла по запросу «калькулятор фьюзов», но предупреждаю, тыкать что-то там, не зная зачем оно — ни к чему хорошему не приведёт, я то знаю.

Далее ещё какой-то информационный блок, не вникал особо, ну и кнопка выход, но я думаю вы уже об этом догадались, даже если и не знаете английский.

Итак, последний блок основного окна программы — Programmer, тут выбирается тип программатора, если вы используете Arduino в качестве программатора, то ставьте всё как у меня на скрине, только не COM19, это у меня такой, у тебя будет другой, в любом случае точно не COM1, первый это системный, на ноутбуке может не быть, а на компьютерах как правило есть, особенно тех, что постарше. Можно использовать и другой программатор, к примеру, USBASP [7], только не забудьте выбрать его в списке.

Список поддерживаемых программаторов:

Маловато будет

Gromov
USBtiny
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP 2
AVRISP mkII
AVRISP v2
Bascom
Blaster
BSD
Butterfly
C2N232I
DAPA
DASA
DASA 3
Dragon_DW
Dragon_HVSP
Dragon_ISP
Dragon_JTAG
Dragon_PP
DT006
ERE-ISP-AVR
Frank-STK200
Futurlec
JTAG 1
JTAG 1Slow
JTAG 2Slow
JTAG 2
JTAG 2Fast
JTAG 2ISP
JTAG 2dW
JTAG mkI
JTAG mkII
MIB510
pAVR
Picoweb
Pony-STK200
ponyser
SI Prog
SP12
STK200
STK500
STK500 HVSP
STK500 PP
STK500 v1
STK500 v2
STK600
STK600 HVSP
STK600 PP
USBasp
Xil

Лично я тестировал только на программаторах AVRISP(Arduino с прошитым скетчем ArduinoISP) и USBasp, на контроллерах ATmega8 и ATtiny13.

Чтобы можно было шить/читать/изменять фьюзы убить микроконтроллер при помощи Arduino, предварительно нужно зашить скетч ArduinoISP, подключив всё, как я писал, например вот тут:

Прошивка и программирование ATtiny13 при помощи Arduino [8].

Если в двух словах то суть такая, подключаем пины Reset, MOSI, MISO, SCK микроконтроллера которого будем прошивать/считывать прошивку/изменять фьюзы так, как указано в скетче в комментариях, а именно:

...
// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
...

Вот пример подключения к ардуинке для ATmega8:

image

Ну и по аналогии, ищем карту пинов, например в даташите(подробная инструкция что к чему и как) интересующего нас микроконтроллера, вот [9] к примеру первая ссылка из гугла по запросу «ATmega8 pdf».

Ладно, не буду больше томить, вот ссылка на программу с файлами из Arduino IDE [10].

Ссылка на ветку на русскоязычном форуме Arduino [11];

Калькулятор фьюзов [6];

Прошивка и программирование ATtiny13 при помощи Arduino [8].

PS у меня было такое, что ATtiny13 перестала прошиваться и реагировать, на попытки её программирования после того, как я попробовал запустить её на частоте 128 kHz, откопал где-то вот такой, слегка модифицированный код ArduinoISP [12] который заставляет прошивку/изменение фьюзов происходить медленнее в несколько раз и может ещё какая-то магия, не разбирался если честно.

Автор: HWman

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/arduino/78693

Ссылки в тексте:

[1] хабра: http://habrahabr.ru/

[2] Arduino: http://habrahabr.ru/hub/arduino/

[3] SinaProg 2.1.1.RUS: https://www.google.com.ua/search?q=SinaProg+2.1.1.RUS&oq=SinaProg+2.1.1.RUS&aqs=chrome..69i57.478j0j4&sourceid=chrome&es_sm=93&ie=UTF-8

[4] можно добавить в файле Fuse.txt: http://easyelectronics.ru/sinaprog-graficheskaya-obolochka-dlya-avrdude.html

[5] Atmega fusebit doctor: http://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atmega-fusebit-doctor/

[6] первая ссылка: http://payalo.at.ua/c_fuse/calc.html

[7] USBASP: http://www.fischl.de/usbasp/

[8] Прошивка и программирование ATtiny13 при помощи Arduino: http://habrahabr.ru/post/234477/

[9] вот: http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf

[10] вот ссылка на программу с файлами из Arduino IDE: https://vk.com/doc256435878_344306532

[11] Ссылка на ветку на русскоязычном форуме Arduino: http://arduino.ru/forum/programmirovanie/proshivka-hex-failov-pri-pomoshchi-arduino-i-sinaprog

[12] слегка модифицированный код ArduinoISP: http://pastebin.com/Aw5BD0zy

[13] Источник: http://habrahabr.ru/post/247329/