...

понедельник, 5 января 2015 г.

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

image

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


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




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



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


Небольшая предыстория:

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


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


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


image


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


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


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


Program — запись hex-файла в микроконтроллер( возможно когда выбран Hex-file);

Verify — проверка прошивки что в микроконтроллере и hex-файла, проще говоря, их сравнение, если всё норм то программа говорит OK;

Read — считать hex-файл.


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


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


Тут их пара–тройка
Шутка, вон их сколько:

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 (который лежит в папке SinaProg 2.1.1\data\).


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


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


image


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


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


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


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


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


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


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


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


Маловато будет
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.


Если в двух словах то суть такая, подключаем пины 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


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


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


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


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


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


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


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий