Anschluss, für jedes Signal einen 2k2…5k6 Widerstand in Reihe verwenden:
RPi -> Ziel MCU
----------------
IO25 -> Reset
IO11 -> SCK
IO10 -> MOSI
IO9 -> MISO
GND -> GND
AVRdude installieren (wenn nötig):
$ sudo apt-get install avrdude
Die Datei avrdude.conf
bearbeiten und folgende Zeilen unter dem Abschnitt PROGRAMMER DEFINITIONS
hinzufügen oder hier herunterladen:
$ sudo nano /usr/local/etc/avrdude.conf
Wenn die Datei leer ist, dann /etc/avrdude.conf
verwenden.
programmer
id = "pi_isp";
desc = "GPIO bitbang";
type = "linuxgpio";
reset = 25;
sck = 11;
mosi = 10;
miso = 9;
;
Bootloader herunterladen:
$ wget https://github.com/watterott/RPi-UNO-HAT/raw/master/software/bloader.hex
Bootloader programmieren:
$ sudo avrdude -c pi_isp -p m328p -e -U flash:w:bloader.hex:i -U lfuse:w:0xFF:m -U hfuse:w:0xD6:m -U efuse:w:0x05:m -U lock:w:0x0F:m
Wenn der Programmer nicht gefunden wird, kann die Ursache an mehreren avrdude Versionen liegen. In diesem Fall die Konfigurationsdatei als Parameter hinzufügen: -C /usr/local/etc/avrdude.conf
Eine Warnung 0xFD != 0x05
bei der eFuse kann ignoriert werden (nein auswählen). Beide Werte sind die gleiche Einstellung, jedoch mit einer unterschiedlichen Schreibweise nicht verwendeter Bits.
Wenn als Devicesignatur 1E 95 14
angezeigt wird, dann m328
als Typ (-p) verwenden (nicht m328p).
Anschluss (Arduino Uno mit RPi über USB verbunden):
RPi -> Ziel MCU
----------------
D10 -> Reset
D13 -> SCK
D11 -> MOSI
D12 -> MISO
GND -> GND
AVRdude installieren (wenn nötig):
$ sudo apt-get install avrdude
Bootloader und ISP-Firmware herunterladen:
$ wget https://github.com/watterott/RPi-UNO-HAT/raw/master/software/bloader.hex
$ wget https://github.com/watterott/RPi-UNO-HAT/raw/master/software/isp.hex
ISP-Firmware auf Arduino Uno programmieren (USB-Device ttyACM0
or ttyUSB0
):
$ avrdude -c arduino -P /dev/ttyUSB0 -b 115200 -p m328p -e -U flash:w:isp.hex:i
Bootloader mit Arduino Uno programmieren (USB-Device ttyACM0
or ttyUSB0
):
$ avrdude -c stk500v1 -P /dev/ttyUSB0 -b 19200 -p m328p -e -U flash:w:bloader.hex:i -U lfuse:w:0xFF:m -U hfuse:w:0xD6:m -U efuse:w:0x05:m -U lock:w:0x0F:m
Eine Warnung 0xFD != 0x05
bei der eFuse kann ignoriert werden (nein auswählen). Beide Werte sind die gleiche Einstellung, jedoch mit einer unterschiedlichen Schreibweise nicht verwendeter Bits.
Wenn als Devicesignatur 1E 95 14
angezeigt wird, dann m328
als Typ (-p) verwenden (nicht m328p).
Auto-Reset für AVRdude wird benötigt, siehe hier. Die Devicesignatur eines ATmega328 lautet 0x1e950f.
Ausführen:
$ avrdude -c arduino -P /dev/ttyAMA0 -b 57600 -p m328p -v
oder (abhängig vom System):
$ avrdude -c arduino -P /dev/ttyS0 -b 57600 -p m328p -v