Nichts lieber als das!
Aber vorsicht, das ist erstmal nur für einen Programmer gedacht (Arduino As ISP).
Und auf Optiboot gemünzt. Quasi meine Spielwiese, das ganze Prozedere mit dem avrdude zu verstehen.
Der nächste Schritt wäre dann zu unterscheiden, ob es mein Nano-Programmer ist oder direkt das passende Board. Die avrdude-Parameter variieren dann natürlich.
Ausgabe:
Available COM-Ports:
\Device\Serial2 : USB-SERIAL CH340 (COM5)
\Device\Silabser0 : Silicon Labs CP210x USB to UART Bridge (COM3)Enter the ComPort Number and press ENTER:
-> 3
1 - Connect Arduino (COM3)
2 - Read Flash (ArduinoBin\backup_flash.hex)
3 - Write Flash (ArduinoBin\backup_flash.hex)
4 - Get Lock Fuses (ArduinoBin\Fuses)
5 - Set Lock Fuses (l:0xFF, h:0xDA, e:0xFD, u:0x3F, lock:0x0F)
6 - Read EEPROM (ArduinoBin\backup_eeprom.hex)
7 - Write EEPROM (ArduinoBin\backup_eeprom.hex)
10 - Burn Bootloader (optiboot_atmega328.hex)
11 - Burn Sketch+Loader ("Sketches\Blink\Blink.ino")
ELSE - EXITSelect an action and press ENTER:
Und das Batch-Script:
ECHO OFF
SET BaudRate=115200
SET Programmer=stk500v1
SET Processor=m328p
::FUSES: http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p&LOW=FF&HIGH=DA&EXTENDED=FD&LOCKBIT=0F
SET low_fuses=0xFF
SET high_fuses=0xDA
SET extended_fuses=0xFD
SET unlock_bits=0x3F
SET lock_bits=0x0F
SET "ArduinoFolder=C:\Program Files (x86)\Arduino"
SET FileToBurn=%UserProfile%\Documents\Arduino\Blink\Blink.ino
SET AvrDudeExe="%ArduinoFolder%\hardware\tools\avr\bin\avrdude.exe"
SET AvrDudeConf="%ArduinoFolder%\hardware\tools\avr\etc\avrdude.conf"
SET BootLoaderFile="%ArduinoFolder%\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex"
SET BinaryAndBootloaderFile=%FileToBurn%.with_bootloader.arduino_standard.hex
SET BinFolder=ArduinoBin\
SET FlashFile=%BinFolder%backup_flash.hex
SET EepromFile=%BinFolder%backup_eeprom.hex
SET FusesFolder=%BinFolder%Fuses\
CLS
@echo off & setlocal enabledelayedexpansion
set _ports=0
set _key="HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM"
for /f "tokens=3 delims= " %%i in ('reg query !_key! ^| find /v "HKEY"') do (
set "ComPort=%%i" & set /a "_ports+=1")
IF %_ports% EQU 0 GOTO NoComAvailable
IF %_ports% EQU 1 GOTO LOOP
IF %_ports% GTR 1 GOTO SelectComPort
:NoComAvailable
ECHO No COM-Port found!
Pause
GOTO EXIT
:SelectComPort
ECHO Available COM-Ports:
@echo off & setlocal enabledelayedexpansion
set _key="HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM"
for /f "tokens=1,3 delims= " %%i in ('reg query !_key! ^| find /v "HKEY"') do (
set "_device=%%i" & set "_com#=%%j" & (for /f "tokens=*" %%a in ('wmic path win32_pnpentity get caption /format:table^| find "!_com#!"') do (set _desc=%%a)) & echo/ !_device! : !_desc!)
@ECHO,
SET /P P=Enter the ComPort Number and press ENTER:
SET ComPort=COM%P%
:LOOP
SET M=""
ECHO OFF
CLS
ECHO 1 - Connect Arduino (%ComPort%)
ECHO 2 - Read Flash (%FlashFile%)
ECHO 3 - Write Flash (%FlashFile%)
ECHO 4 - Get Lock Fuses (%FusesFolder%)
ECHO 5 - Set Lock Fuses (l:%low_fuses%, h:%high_fuses%, e:%extended_fuses%, u:%unlock_bits%, lock:%lock_bits%)
ECHO 6 - Read EEPROM (%EepromFile%)
ECHO 7 - Write EEPROM (%EepromFile%)
for %%F in (%BootLoaderFile%) do ECHO 10 - Burn Bootloader (%%~nxF)
ECHO 11 - Burn Sketch+Loader (%FileToBurn%)
ECHO ELSE - EXIT
ECHO.
SET /P M=Select an action and press ENTER:
IF %M%==1 GOTO CONNECT
IF %M%==2 GOTO READ_FLASH
IF %M%==3 GOTO WRITE_FLASH
IF %M%==4 GOTO GETLOCK
IF %M%==5 GOTO SETLOCK
IF %M%==6 GOTO READ_EEPROM
IF %M%==7 GOTO WRITE_EEPROM
IF %M%==10 GOTO BURN_BOOTLOADER
IF %M%==11 GOTO BURN_BOARD
GOTO EXIT
:CONNECT
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -v -F
Pause
GOTO LOOP
:SETLOCK
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -U lock:w:0x%lock_bits%:m -U lfuse:w:0x%low_fuses%:m -U hfuse:w:0x%high_fuses%:m -U efuse:w:0x%extended_fuses%:m
Pause
GOTO LOOP
:GETLOCK
IF NOT EXIST %FusesFolder% ( MD %FusesFolder%)
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -Ulfuse:r:%FusesFolder%lfuse.h:h -Uefuse:r:%FusesFolder%efuse.h:h -Uhfuse:r:%FusesFolder%hfuse.h:h -Ulock:r:%FusesFolder%lock.h:h
Pause
GOTO LOOP
:READ_FLASH
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -U flash:r:%FlashFile%:r
Pause
GOTO LOOP
:WRITE_FLASH
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -U flash:w:%FlashFile%:r
Pause
GOTO LOOP
:READ_EEPROM
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -U eeprom:r:%EepromFile%:r
Pause
GOTO LOOP
:WRITE_EEPROM
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -U eeprom:w:%EepromFile%:r
Pause
GOTO LOOP
:BURN_BOOTLOADER
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -F -e -U flash:w:%BootLoaderFile%:i
Pause
GOTO LOOP
:BURN_BOARD
%AvrDudeExe% -P %ComPort% -b %BaudRate% -c %Programmer% -p %Processor% -C %AvrDudeConf% -F -e -U flash:w:%BinaryAndBootloaderFile%:i -U lock:w:0x%lock_bits%:m -U lfuse:w:0x%low_fuses%:m -U hfuse:w:0x%high_fuses%:m -U efuse:w:0x%extended_fuses%:m
Pause
GOTO LOOP
:EXIT
Ist etwas "historisch gewachsen" ![]()