Avrdude, 2 linijki; ot cały skrypt. No chyba, że coś źle zrozumiałem
Avrdude, 2 linijki; ot cały skrypt. No chyba, że coś źle zrozumiałem
Rozmnaża się toto po kątach i muszę programować coraz więcej AVR. A dokładniej M2561. No i mam pytanie :
Używam Atmel Studio 6.2 z Atmel ICE na ISP. Wszystko fajnie. Tyle, że program zajmuje cały flash i przy domyślnej prędkości ISP 125 kHz trwa to wieczność. A bez wcześniejszego przeprogramowania fusów szybciej nie pójdzie.
Jak przestawię fusy na docelowe to mogę programować np. na 3MHz i gitara. Tyle, że jak to robię "jednoklikowo" korzystając z production file no to tak się nie da bo oczywiście nie wpadli na to, żeby móc ustawić prędkość po zaprogramowaniu fusów.
Czyli trzeba najpierw ręcznie na 125kHz zaprogramować fusy, przestawić prędkość i dopiero wtedy programować resztę.
No to jest do dupy.
Jest jakieś narzędzie proste żeby mi najpierw zaprogramowało fusy a potem na większej szybkości resztę ( czyli flash + lock ) ? Żebym się nie musiał doktoryzować z tego pisząc jakieś skrypty ?
Użyj avrdude. Przykład z głowy:
avrdude -B 125kHz -p atmega2561 -c usbasp -e -U lfuse:w:0xaa:m -U hfuse:w:0xbb:m avrdude -B 3MHz -p atmega2561 -c usbasp -U flash:w:file.hex -U lock:w:0xcc:m
Za 0xaa i 0xbb podstaw wartości fusebitów, za 0xcc wartości lockbitów, za file.hex plik do zaprogramowania. Za usbasp podstaw swój programator, możesz też potrzebować -p (port) lub -i zamiast -B (jeśli programator to jakiś bitbang, parametrem -i jest opóźnienie w mikrosekundach między każdą zmianą bitu.
Jak nie zadziała, to dodaj jakiegoś sleepa między tymi komendami (np. sleep .1 żeby poczekać 100 ms).
panowie, ja nie mam czasu na eksperymenty - potrzebne mi rozwiązanie dla debila. Klikam i działa.
Ponoć było GUI dla atprogram do ściągnięcia od microchipa. Ale nie mogę znaleźć.
Toto się nazywało AVR_massproduction_programming_tool_with_atmelice.zip
Ktoś ma ?
To nie są eksperymenty tylko poprawne, proste i działajace rozwiązanie.
Jesli jesteś na windowsie, możesz sobie plik bat z tymi poleceniam też
2x kliknąć i masz automat. A potem dodać pętlę w środku, która czeka na pacnięcie klawisza i programuje nastepny.Nie da się nic prostszego, w szczególniości jeśli potrzebujesz dla debili, zrobić.
W czasie kiedy szukałes jakeigoś bezuzytecznego programu z GUI, mogłeś stworzyć plik bat, wkleić, co dostałeś na grupie i używać.
Przecież dostałeś praktycznie gotowca. Jak się tak upierasz, to podaj:
- nazwę programatora
- ścieżkę do pliku hex
- wartości fusebitów
- wartości lockbitów
A podam ci zawartość pliku .bat z poleceniami avrdude. Klikasz .bat i masz zaprogramowany AVR. Nie sądzę, żeby dało się prościej.
No spróbujmy. Programator to Atmel ICE na USB rzecz jasna. Kąkuter z WIN7 jeśli to ma jakieś znaczenie.
Fusy : EXT : FC HI : D8 LO : FF Lock : FC
ścieżka niech będzie C:\FOLDER to sobie zmienię
szybkość programowania fusów 125kHz szybkość programowania flash 3MHz
Poproszę ślicznie :)
wziąłem tego AVRDUDE. Oczywiście zaczyna się zabawa : ani Dragon ani AtmelICE nie jest widoczny.
Pamiętam tą walkę, że jak programator jest widoczny pod AS to nie ma go pod avrdude i odwrotnie. I to jest właśnie to o co mi chodziło - trzeba spędzać godziny nad tym.
Oczywiście już nie pamiętam teraz, muszę odkopywać...
No dobra, zwalczyłem. Niestety jak przewidywałem największy problem z drajwerami do programatora żeby go AVRDUDE widział...
A sam skrypt to jednak ciut więcej niż 2 linijki, żeby toto sensownie działało i żeby mieć sygnalizację błędów, bo śledzenie tego czy coś tam się nie wykrzaczyło to nie jest dobra rzecz przy 100 procesorach
Wrzucam ku pamięci potomnych :
@echo off
REM Ustawienie ścieżki do AVRDUDE set AVRDUDE_PATH=C:\AVRDUDE_6
REM Funkcja sprawdzająca kod błędu i przerywająca skrypt w razie błędu setlocal enabledelayedexpansion
REM Programowanie fuse bitów z prędkością 125 kHz %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 8 -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U
efuse:w:0xFC:m IF ERRORLEVEL 1 ( echo ****************** FUSE PROGRAMMING ERROR ***************** pause exit /b 1 )
REM Odczekaj pół sekundy timeout /T 1 >nul
REM Programowanie pamięci flash z prędkością 3 MHz bez wstępnego kasowania pamięci %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -D -U flash:w:C:\HEX\program.hex:i IF ERRORLEVEL 1 ( echo ****************** FLASH PROGRAMMING ERROR ***************** pause exit /b 1 )
REM Programowanie pamięci EEPROM %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -U eeprom:w:C:\HEX\eeprom.eep:i IF ERRORLEVEL 1 ( echo ****************** EEPROM PROGRAMMING ERROR ***************** pause exit /b 1 )
REM Ustawienie Lock bit na FC %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -U lock:w:0xFC:m IF ERRORLEVEL 1 ( echo ****************** LOCK PROGRAMMING ERROR ***************** pause exit /b 1 )
echo >>>>>>>>> SUCCESS ! <<<<<<<< pause exit /b 0
zobaczcie, do czego mnie doprowadziliście... dodałem jeszcze melodyjkę w przypadku błędu, żeby nie przeoczyć. Kurła mać.
@echo off
REM Ustawienie ścieżki do AVRDUDE set AVRDUDE_PATH=C:\AVRDUDE_6
REM Funkcja sprawdzająca kod błędu i przerywająca skrypt w razie błędu setlocal enabledelayedexpansion
REM Funkcja do generowania melodyjki w przypadku błędu set playMelody=powershell -c "[console]::beep(659,300); Start-Sleep
-Milliseconds 100; [console]::beep(523,300); Start-Sleep -Milliseconds
100; [console]::beep(587,300); Start-Sleep -Milliseconds 100; [console]::beep(784,500)"REM Programowanie fuse bitów z prędkością 125 kHz %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 8 -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U efuse:w:0xFC:m IF ERRORLEVEL 1 ( echo **************** FUSE ERROR ! **************** FOR /L %%i IN (1,1,10) DO (%playMelody%) pause exit /b 1 )
REM Odczekaj pół sekundy timeout /T 1 >nul
REM Programowanie pamięci flash z prędkością 3 MHz bez wstępnego kasowania pamięci %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -D -U flash:w:C:\HEX\program.hex:i IF ERRORLEVEL 1 ( echo **************** FLASH ERROR ! **************** FOR /L %%i IN (1,1,10) DO (%playMelody%) pause exit /b 1 )
REM Programowanie pamięci EEPROM %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -U eeprom:w:C:\HEX\eeprom.eep:i IF ERRORLEVEL 1 ( echo **************** EEPROM ERROR ! **************** FOR /L %%i IN (1,1,10) DO (%playMelody%) pause exit /b 1 )
REM Ustawienie Lock bit na FC %AVRDUDE_PATH%\avrdude -c atmelice_isp -P usb -p m2561 -B 0.33 -U lock:w:0xFC:m IF ERRORLEVEL 1 ( echo **************** LOCK ERROR ! **************** FOR /L %%i IN (1,1,10) DO (%playMelody%) pause exit /b 1 )
echo ===================== PROGRAMMING SUCCESS !! ===================== pause exit /b 0
A tak się z ciekawości zapytam; czy z poziomu powershell można jakie GUI robić, jakieś proste, coś a’la dialog/xdialog z basha?
Łoo panie, ile razy ja wychodzę z roboty o 7 rano... Inna rzecz, że czasem wstaję o 18 :)
No dom wariatów literalnie.
też mnie to zainteresowało ( znaczy zmusiliście mnie w sumie ) i wyszło mi , że cinszko bedzie (
Podobno wykorzystuje się biblioteki .NET dostępne w PowerShell ( Windows Forms lub WPF) ). Przy ich użyciu można podobno stworzyć okno z przyciskami, polami tekstowymi itp.
Ale mnie się nie udało na szybko. Pewnie docelowo zrobię jakieś GUI w VB.NET bo tak mi będzie najłatwiej.
cd c:\folder avrdude -B 125kHz -p ATmega2561 -c atmelice_isp -e -U efuse:w:0xfc:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m avrdude -B 3MHz -p ATmega2561 -c atmelice_isp -U flash:w:plik.hex -U lock:w:0xfc:m
Nigdy nie używałem Atmel ICE, widzę że avrdude obsługuje takie:
atmelice atmelice_pdi atmelice_updi atmelice_dw atmelice_isp atmelice_tpi
Czyli atmelice w różnych trybach. Jak nie zadziała z atmelice_isp to spróbuj może samo atmelice.
Chyba nie czytałeś co napisałem ostatnio, ale dzięki za dobre chęci :) Pozdrowienia
W dniu 2024-10-12 o 23:20, sundayman pisze:
W pliku 133k masz sampla
Have something to add? Share your thoughts — no account required.
Ask the community — no account required