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

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

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

[embedded content](Данное видео дублирует представленную ниже информацию, в текстовом формате)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\):

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

Как видите есть всё популярные микроконтроллеры фирмы 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, только не забудьте выбрать его в списке.

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

Маловато будет GromovUSBtinyALFArduinoAT ISPAVR109AVR910AVR911AVRISPAVRISP 2AVRISP mkIIAVRISP v2BascomBlasterBSDButterflyC2N232IDAPADASADASA 3Dragon_DWDragon_HVSPDragon_ISPDragon_JTAGDragon_PPDT006ERE-ISP-AVRFrank-STK200FuturlecJTAG 1JTAG 1SlowJTAG 2SlowJTAG 2JTAG 2FastJTAG 2ISPJTAG 2dWJTAG mkIJTAG mkIIMIB510pAVRPicowebPony-STK200ponyserSI ProgSP12STK200STK500STK500 HVSPSTK500 PPSTK500 v1STK500 v2STK600STK600 HVSPSTK600 PPUSBaspXil Лично я тестировал только на программаторах 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 который заставляет прошивку/изменение фьюзов происходить медленнее в несколько раз и может ещё какая-то магия, не разбирался если честно.

© Habrahabr.ru