среда, 10 октября 2018 г.
Прошивка USBasp

1. Подготовка Ардуино
В качестве программатора можно использовать любую имеющуюся плату Ардуино. Для этого подключаем ее к компьютеру и загружаем в нее скетч ArduinoISP из стандартных примеров:

2. Подключение USBasp к Ардуино
Микроконтроллеры семейства AVR, а значит и базирующиеся на них платы (как Ардуино, так и USBasp) поддерживают программирование по ISP-технологии с использованием линий связи SPI. Поэтому сейчас нам нужно:
- соединить выводы Ардуино MOSI, MISO, SCK GND и VCC (5В или 3.3В) с одноименными выводами USBasp;
- цифровой вывод 10 Ардуино подключить к выводу RESET USBasp;
- установить электролитический конденсатор на 10мкФ между RESET и GND Ардуино, чтобы предотвратить автоматическую перезагрузку. Хотя возможно будет работать и без конденсатора, зависит от используемой платы Ардуино.
Для подключения можете использовать как ICSP разъем Ардуино, так и цифровые выводы — не принципиально. Я, например, взял MOSI, MISO, SCK, GND и VCC с ICSP разъема:

На всякий случай приведу таблицу соответствия сигналов MOSI, MISO и SCK цифровым выводам различных плат Ардуино:
| Плата Ардуино | MOSI | MISO | SCK |
|---|---|---|---|
| Uno, Duemilanove | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 |
| Nano | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 |
| Pro Mini | 11 | 12 | 13 |
| Mega1280, Mega2560 | 51 или ICSP-4 | 50 или ICSP-1 | 52 или ICSP-3 |
| Leonardo | ICSP-4 | ICSP-1 | ICSP-3 |
| Due | ICSP-4 | ICSP-1 | ICSP-3 |
| Zero | ICSP-4 | ICSP-1 | ICSP-3 |
| 101 | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 |
3. Установка джампера JP2 на USBasp
На плате USBasp присутствуют 3 джампера, хотя распаян у вас, скорее всего, будет только JP1 — выбор напряжения питания программируемого микроконтроллера. Для прошивки USBasp (и любых других манипуляций с ним при помощи программатора) необходимо установить джампер JP2. Советую не мучиться с замыканием контактов подручными средствами и впаять пару штырьков, так будет надежней:

4. Скачивание прошивки
Заходим на страничку автора USBasp https://www.fischl.de/usbasp/ и скачиваем последнюю версию прошивки в разделе Download — Firmware and circuit. На момент написания данной статьи актуальной является версия от 28.05.2011. Файлы прошивки находятся внутри архива по пути usbasp.2011-05-28infirmware, их там три штуки, для каждого типа микроконтроллера (программатор USBasp может быть построен на базе ATmega8, ATmega48 или ATmega88). У меня в USBasp установлен микроконтроллер ATmega8, поэтому я буду использовать файл usbasp.atmega8.2011-05-28.hex.
Прошивать USBasp будем при помощи уже знакомого нам avrdude, входящего в состав IDE Arduino. Файл прошивки нужно поместить в каталог avrdude, чтобы потом не пришлось указывать полный путь к нему. Для этого запускаем Проводник Windows и переходим в каталог Arduino_dirhardware oolsavrin, где Arduino_dir — это путь к IDE Arduino. В моем случае он выглядит так: d:Arduinoarduino-1.6.12hardware oolsavrin, сюда я копирую файл usbasp.atmega8.2011-05-28.hex.
5. Прошивка USBasp
После копирования файла прошивки в каталог avrdude поместите курсор в адресную строку Проводника, удалите из нее путь, введите cmd и нажмите Enter.

Запустится интерпретатор командной строки. В нем нужно ввести команду:
avrdude -C ..etcavrdude.conf -p m8 -c arduino -P com18 -b 19200 -U flash:w:usbasp.atmega8.2011-05-28.hex
Не забудьте проверить и с корректировать ее параметры:
-C ..etcavrdude.conf — путь к конфигурационному файлу (без этого параметра avrdude иногда ругается: can’t open config file «»: Invalid argument)
-p m8 — определяет тип микроконтроллера. Значение m8 сообщает avrdude о том, что мы собираемся работать с ATmega8. Если у вас в USBasp установлен ATmega48 или ATmega88, то замените это значение на m48 или m88 соответственно.
-P com18 — определяет COM порт, присвоенный плате Ардуино. У меня это com18, вам нужно подставить свое значение.
-U flash:w:usbasp.atmega8.2011-05-28.hex — определяет действие, которое мы хотим выполнить. В данном случае мы хотим записать в FLASH память данные из файла usbasp.atmega8.2011-05-28.hex. При необходимости скорректируйте имя файла прошивки в соответствии с типом микроконтроллера в USBasp.
Убедитесь, что команда набрана верно и программатор правильно соединен с Ардуино. После этого подключаем Ардуино к компьютеру и нажимаем Enter в интерпретаторе командной строки. Должен отобразиться прогресс перезаписи содержимого FLASH памяти, а затем сообщение об успешном выполнении команды — avrdude done. Thank you:
Прошил первый Attiny через Arduino ISP (в роли которого Arduino nano)
Был полный комплект косяков:
1. avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
2. avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
Слёт при записи:
3. avrdude: writing flash (108 bytes):
Writing | | 0% 0.00s
4. avrdude: stk500_paged_write( (a) protocol error, expect=0x14, resp=0x11
5. avrdude: stk500_cmd( programmer is out of sync
сигнатура увиделась и и фьюзы прочитались, после того, как поменял местами проводки с D13 и D11 (MOSI и SCK) — при распайке перепутал, пытался поменять програмно в скетче — фиг, не помогло.
Светодиоды чрез 2К резисторы на 2 и 3 ноги attiny (PB3 и PB4 соответсвенно) — для использования как макетки.
Дальнейшее ушло после того, как был подвешен 10 мкФ конденсатор между ресетом и землей и, самое главное, предлагаемая убунтой по умолчанию среда Arduino IDE 1.0 была заменена на скачаную с Arduino IDE 1.0.5, c заливкой соответсвующего скетча.
ЗЫ
ардуина шьётся стандартным скетчем «ArduinoISP» при отключенном 10 мкФ конденсаторе, тинька прошивается через avrdude при подключенном командой
avrdude -p attiny13 -c arduino -P/dev/ttyUSB0 -b 19200 -U flash:w:blink.hex:i
-p — тип контроллера
-c — тип программатора
-P — порт (смотрится в Arduino IDE — меню — tools — serial port)
-U — что шить (blink.hex) — собран самостоятельно через avr-gcc
-b — скорость (можно менять, но только совместно с Serial.begin(19200); в районе 50 строки ArduinoISP).
avrdude, похоже, принимает только стандартные значения — типа 9600, 19200, 38400 и т.п.
4800 и ниже со скетчем из IDE 1.0 даже не пытается работать, в IDE 1.0.5 экспериментировать со скоростями не стал.
I have some boards with the atmega32u4 that they were working perfectly before. I’m using an unnoficial UNO board to program them via ICSP. To power the uC I’m using two lithium batteries and a step-down converter to drop it to 5 V.
This started happening when I tried to upload code via ISCP when the target chip was not powered by mistake.
This is my error message:
What I’ve already tried:
- Different programmer (another Uno board);
- Uploading to a proper Leonardo board via ICSP, it worked;
- Uploading to another of my boards via ICSP, it worked;
- Running with the portable Arduino version;
- Check if the chip is being powered with 5 V;
- Changed wires and checked the connections;
- The chip does not get hot;
I’ve been around this two days straight, any help would be much appreciated.
1 Answer 1
Mostly this error is due to connections/powering issues (as already mentioned in your output ).
Check connections, especially power and ground also check the resistance between Vcc and GND of your target MCU. (If it’s less than 100ohm that means something is off in your circuitry or your MCU is already fried.)
Check if your MCU is actually getting enough power (voltage and current) also check if it’s getting excess voltage.
Make sure there is proper «common grounding» done between devices.
If you are sure that the above points are checked and you still get the error try the override flag -F (avrdude through shell/command-line) and if you are still not able to upload try the manually changing the address (not recommended ) in your arduino’s library so that it matches with the signature it’s receiving.
Finally try using a direct USB interface with atmega32u4 as atmega32u4 supports it and upload the bootloader again through an old software called Flip after that try again.
After all this if you are not able to upload then probably your MCU is dead and it might be due to an unnoticed wrong power connection or short circuit or unintentional fuse reconfiguration (highly unlikely).