Problem z przesyłaniem szkicu do Arduino - avrdude: stk500_recv (): programator nie odpowiada


133

Mam Arduino Duemilanove z ATmega328 . Pracuję na Ubuntu 12.04 (Precise Pangolin), a wersja Arduino IDE to 1.0. Niedawno próbowałem załadować do niego kilka przykładowych szkiców, takich jak Blink. Jednak żadna z moich prób nie działa i za każdym razem skutkuje tym samym błędem:

avrdude: stk500_recv (): programista nie odpowiada.

Włączyłem /dev/ttyUSB0w menu NarzędziaPort szeregowy . Z listy wybrałem również właściwą płytkę (Duemilanove z ATmega328). Jednak nie jestem w stanie rozwiązać tego problemu. Szukałem również w Internecie i żadna z innych odpowiedzi dotyczących tego problemu nie wydaje mi się skuteczna. Dlaczego napotykam ten problem i jak go rozwiązać?

Spróbowałem też przekręcić pokładową ATmegę i zamontować ją w innym kierunku. Teraz nie mam problemów z przesyłaniem, ale potem nic się nie dzieje. Wygląda na to, że wbudowana dioda LED również nie miga.


Odłącz RST od GND na płycie Arduino uno. Postępowałem zgodnie z tym samouczkiem i zapomniałem Cofnąć to.
ArtiomLK

Może to być spowodowane ustawieniem szybkości transmisji na niewłaściwą (prawdopodobnie zbyt wysoką) wartość.
Konrad Gajewski

Odpowiedzi:


108

Miałem ten problem z Crowduino, uruchomionym Arduino IDE na OS X. Rozwiązaniem dla mnie było włączenie wyjścia w trybie verbose podczas przesyłania (w panelu preferencji Arduino IDE).

Następnie podczas przesyłania możesz zobaczyć, jak AVRDUDE wysyła trzy pakiety avrdude: Send: 0 [30] [20](z odpowiednimi błyskami RX na płycie) tuż przed avrdude: ser_recv(): programmer is not respondingbłędem.

Sztuczka polega na wciśnięciu przycisku resetowania na tablicy bezpośrednio przed wysłaniem tych trzech pakietów. Następnie program zostanie pomyślnie przesłany.


2
Cóż, to przynajmniej rozwiązało problem dla mnie. Jak to wymyśliłeś?
SlackOverflow

8
@daniele Inni ludzie zauważyli, że jeśli resetujesz po X sekundach, to działa. Pomyślałem, że paczki były próbą uścisku dłoni. Więc w zasadzie rozwiązałem to za pomocą Google, cierpliwości i szaleństwa z tablicą!
hoipolloi

próbowałem zresetować i raz to zadziałało, ale dopóki tego nie przeczytałem, nie wiedziałem, kiedy to zrobić, dzięki
Ulises Layera

4
FYI - musiałem zainstalować najnowsze sterowniki FTDI, aby trwale rozwiązać ten problem
Scott Silvi

2
Aktualizacja sterownika FTDI i ponowne uruchomienie Arduion pomogło mi (MacOS 10.9.4, Arduino Nano 328)
peetonn

79

Upewnij się, że na pinach Tx / Rx nie ma wejścia. Wtedy zadziała.


To zadziałało dla mnie! Miałem moduł bluetooth podłączony do pinów RX / TX.
johngreen

To zadziałało dla mnie. Musiałem też odpiąć kabel usb i zrestartować arduino, bo po wypięciu pinów dostałem kolejny błąd (i zasilanie, tak dla pewności)
oneindelijk

68

Miałem ten sam problem - dlatego znalazłem to pytanie.

Musiałem tylko zmienić procesor z „ATmego328P” na „ATmego328P (stary program ładujący)”

Problem rozwiązany - przynajmniej dla mnie.

wprowadź opis obrazu tutaj


Hej, gdzie mogę znaleźć panel wyboru procesorów w nowym IDE?
Muhammad Ali

3
@MuhammadAli: Właśnie dodałem zrzut ekranu, aby odpowiedzieć na twoje pytanie
Edgar

Na szczęście to też był mój problem.
ofekp

2
Ten problem może się pojawić, jeśli używasz płyty ELEGOO NANO. To samo rozwiązanie jest również wspomniane w dokumencie FAQ.
chetan92

Jeśli płyta jest Arduino nano i została wyprodukowana wcześniej do stycznia 2018 r., Wystarczy wybrać Procesor> „ATmega328P (stary program ładujący)” załatwi sprawę ( arduino.cc/en/Guide/ArduinoNano#toc4 )
Bit-Man

48

Wśród dobrych pomysłów jest tu mowa o voodoo. Spróbujmy być bardziej realistyczni w kwestii tego, co się dzieje i podsumujmy dobre rzeczy do sprawdzenia:

Zasadniczo, gdy tak się stanie, dobrym pomysłem jest włączenie trybu pełnego dla AVRDUDE , aby uzyskać lepszy obraz tego, co się dzieje. Aby to zrobić, wystarczy przejść do preferencji i zaznaczyć pole trybu pełnego. Dobrym pomysłem jest również odejście od Arduino IDE i uruchomienie konsoli, aby wygodniej było odczytać wyjście AVRDUDE, które otrzymasz po kliknięciu uploadprzycisku.

Ważne jest tutaj wstawienie 3 lub 4 -vdo wywołania polecenia. Oto jak wyglądają takie polecenia AVRDUDE, z utworzonymi parametrami, ponieważ są one całkowicie zależne od sposobu zainstalowania Arduino:

avrdude -v -v -v -v -C /path/to/avrdude.conf -patmega328 -P/dev/usbport -U flash:w:/path/to/firmware.hex

Dobrym sposobem na uzyskanie prawidłowego wiersza poleceń do użycia jest skopiowanie go z pełnego wyjścia dziennika wyjściowego Arduino IDE, gdy włączona jest szczegółowość.

Kiedy otrzymasz avrdude: stk500_recv(): programmer is not responding, oznacza to w zasadzie, że dzieje się coś złego, zanim flashowanie się zacznie.

Zasadniczo musisz sprawdzić (od sprzętu po oprogramowanie, poziom niski do wysokiego):

  • jeśli kabel i / lub złącza nie mają mikroszczelin;
  • jeśli żadne punkty lutownicze nie są zwarte (tj. dotykają czegoś metalowego wokół), oznacza to:
    • czy nie ma zwarcia na płytce drukowanej pomiędzy Rxi Tx(zwykle piny 1i 0);
    • jeśli nie ma kontaktu z metalowym elementem pod płytą lub drobnymi kawałkami między nogami elementu (jak FTDI, układ ATmega lub jakikolwiek inny);
  • jeśli układ ATmega nie jest rozładowany ( skrót lub odcięcie GND / V CC lub wejście V CC jest martwe…);
  • jeśli styki 1i 0Arduino nie są używane przez jakąś tarczę lub niestandardowy projekt ( /!\nie dotyczy Leonardo, ponieważ ma niezależną obsługę USB);
  • czy konwerter USB na UART nie ma problemu ( FTDIna starszym Duemilanove lub ATmega16U2 na nowszym Arduino Unos);
  • jeśli układ ATmega328 jest smażony lub nieprawidłowo zainstalowany;
  • jeśli bootloader został nadpisany lub nie działa;
  • czy przy wejściu do bootloadera zastosowano odpowiednią prędkość transmisji;
  • czy są ustawione odpowiednie ustawienia dla docelowego mikrokontrolera i płytki;

Zwykle avrdude -v -v -v -vmoże bardzo pomóc w ustaleniu, na jakim etapie zawodzi. Niezależnie od tego, czy w ogóle nie może nawiązać połączenia USB (awaria kabla, USB / UART, PCB…), czy jest to problem z bootloaderem.

Aktualizacja : Próbowałem przekręcić pokładową ATmegę i zamontować ją w innym kierunku. Teraz nie mam problemów z przesyłaniem, ale potem nic się nie dzieje. Wydaje się, że wbudowana dioda LED również nie miga.

Obawiam się, że jeśli odwrócisz położenie ATmega, a potem nie działa, to fakt, że umieściłeś źródło zasilania na pinach cyfrowych, mógł spalić twój chip.


BTW, wyjście Arduino ma jako ostatnią linię (przed rozpoczęciem przesyłania) ścieżkę do avrdude, ścieżkę do konfiguracji i ścieżkę do pliku flash. Można to łatwo skopiować i wkleić do wiersza poleceń i dodać -v.
powtac

Rzeczywiście, iirc (prawie nigdy nie używam okropnego interfejsu użytkownika), musisz włączyć szczegółowe wyjście w preferencjach
zmo

1
U mnie stało się tak, ponieważ ustawiłem nieprawidłową prędkość transmisji w konfiguracji eclipse avrdude. Zrozumiałem to, gdy zobaczyłem wiersz poleceń w arduino IDE.
Tejas Kale

avrdude: no programmer has been specified on the command line or the config file Specify a programmer using the -c option and try again
K - Toksyczność SO rośnie.

Naprawiono:avrdude -v -v -v -v -C/etc/avrdude.conf -patmega328 -carduino -P/dev/ttyACM0 -U flash:w:~/Arduino/WebServer/WebServer.ino.standard.hex
K - Toksyczność w SO rośnie.

21

Spróbuj sprawdzić, czy Twoja tablica została wybrana poprawnie. Kliknij menu Narzędzia -> Tablica i sprawdź, czy wybrano właściwą tablicę.


1
To było to dla mnie. Używałem Uno, dopóki go nie usmażyłem i nie dostałem nowej Mega. Zupełnie nowa Mega widziała ten problem. Nawet nie wiedziałem, że to menu istnieje. Dzięki!
Mike

Nie to, ale nie wybrano prawidłowego numeru seryjnego … Coś do przemyślenia! Dzięki!
heltonbiker

skąd mam wiedzieć, która płyta jest kompatybilna z moim Arduino?
turmuka

12

Możesz sprawdzić, czy masz jakieś przewody połączeniowe podłączone do pinów 0 i 1. Te piny są używane do komunikacji szeregowej, a podłączone przewody mogą uniemożliwić załadowanie kodu na płytkę.

Jeśli nic nie jest podłączone, może to być błąd w AVRDUDE , możesz spróbować go zaktualizować.


3
Nie ma absolutnie nic związanego z 0 i 1. avrdudejest również aktualizowana i jest najnowszą wersją.
Pastafarianin

Nie mam innej tablicy. :( Chociaż podobny błąd wydaje się występować w systemie Windows, może to oznaczać problem z płytą.
Pastafarian

Tak, to właśnie bym powiedział ... Możesz spróbować na Serial.println()przykładzie, aby sprawdzić, czy to nie tylko led 13.
ladislas

10

Spotkałem również ten problem i rozwiązałem go, ponownie instalując sterownik szeregowy USB. Pls zobacz także: http://arduino.cc/en/Guide/Howto i http://www.ftdichip.com/Drivers/VCP.htm


1
Za każdym razem, gdy używam mojego Arduino Duemilanove ATMega328, zawsze zapominam o tym, a także sprawdzam, czy wybrana jest właściwa płytka w aplikacji Arduino (w menu Narzędzia od 1.0.6.
Andrew

1
Jeśli właśnie zainstalowałeś arduino IDE, ta odpowiedź jest (najprawdopodobniej) tym, czego szukasz!
Zaxter,

5

Powyższy błąd występuje w 3 etapach

  1. Jeśli program rozruchowy uległ awarii
  2. jeśli nie wybrałeś odpowiedniego portu i właściwej płyty z IDE
  3. Jeśli komunikujesz się z innym portem szeregowym, to znaczy, że GND i pin Tx są połączone z innym urządzeniem komunikacyjnym

W moim przypadku wybrałem złą tablicę. Dziękuję AMPS!
Jamshaid Kamran


3

Miałem ten sam problem podczas pierwszej próby Arduino Uno.

Moje rozwiązanie było dość proste. Po prostu odłącz, a następnie podłącz kabel USB.


3

W systemie Windows 7 miałem ten problem wiele razy, za każdym razem z różnymi komunikatami o błędach. Zasadniczo IDE wysyła do niewłaściwego portu.

Aby to naprawić, po prostu przejdź do menu NarzędziaPorty → [wybierz port COM, na którym znajduje się twoja płyta].

Upewnij się, że dokładnie sprawdziłeś port swojej płyty:

  1. Uruchom Menedżera urządzeń

    Menu Start

  2. Upewnij się, że sterownik Arduino jest wymieniony pod portem odpowiadającym ustawieniom portu IDE (wspomnianym powyżej)

    Menadżer urządzeń

  3. Moja płyta jest wymieniona pod portem COM1. Jeśli chcesz, możesz po prostu zmienić port w zaawansowanych ustawieniach sterownika:

    Tutaj wprowadź opis obrazu


2

Mam ten problem również na moim Arduino działającym na Macu. Dzieje się tak na dwóch moich Arduino (A Arduino Uno i Arduino Pro połączone z FTDI).

W przypadku Uno podłączam kabel do komputera i wciskam przycisk wysyłania, a następnie zaczynam liczyć, aż dioda „TX” zacznie migać. Następnie powtórz przesyłanie, ale tuż przed miganiem diody TX, naciśnij przycisk resetowania i przesyłanie powiedzie się.

Później ustaliłem, że zmiana kabla USB rozwiązała ten problem.


1
Zmiana kabla USB naprawionego dla mnie
Paul Bailey,

2

Publikuję to, ponieważ nie znalazłem tej odpowiedzi gdzie indziej. Wszystkie moje klony Arduino nano chińskie (CH340) miały ten problem po aktualizacji do Arduino IDE do wersji 1.8.9. To, co zadziałało dla mnie, to użycie zapasowego oficjalnego Arduino Uno, który muszę wypalić bootloader na wadliwych nanosach, używając nagłówków ICSP w nano. W tym celu wszystko, co zrobiłem, to postępować zgodnie z instrukcjami tutaj: chiński-klon-arduino-nano-z-chipem-ch340g-jak to naprawić . JEDYNĄ rzeczą, którą zrobiłem inaczej, było zawsze ustawianie opcji „Old Bootloader”, jak powiedziałem wcześniej w tym wątku. Poza tym całkowicie postępowałem zgodnie z instrukcją na tym łączu i uratowałem moje nanos przed tym irytującym problemem. Mam nadzieję, że to komuś pomoże.


1

Najpierw upewnij się, że / dev / ttyUSB0 działa. Np. Podłącz mysz i sprawdź, czy działa. Po drugie, spróbuj wybrać inną tablicę. Często zdarza się, że nieoryginalne tablice nie są poprawnie rozpoznawane pod ich nazwami. Po trzecie, spróbuj ręcznie nacisnąć przycisk resetowania podczas przesyłania szkicu. Prawdopodobnie automatyczny reset jest uszkodzony.


1

Rozwiązałem problem w moim przypadku, pobierając i instalując stare sterowniki FDTM stąd .

Spróbuj zainstalować FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg, a następnie uruchom ponownie Arduino.


w większości nie ma to związku z problemem OP, a sterownik FTDI jest przydatny tylko jeśli masz Arduino 328.
zmo

1

Pomyślałem, że zwróciłbym uwagę, że moja nowa płyta Arduino Uno Rev3 używa następującego sterownika LInux:

Device Drivers    
|-USB Drivers
  |-USB Modem (CDC ACM) support

Jest to znane jako CONFIG_USB_ACM:opcja : w najnowszym jądrze LInux 3.x.

To urządzenie pojawia się wtedy jako: /dev/ttyACM0lub podobne.


1

Czy masz coś podłączonego do RESETpinu w Arduino?

Napotkałem ten problem z graficznym wyświetlaczem LCD, który wymagał połączenia z RESETpinem. Odłączenie przewodu połączeniowego między wyświetlaczem LCD a RESETpinem podczas wgrywania kodu naprawiło to za mnie, wszystko, co musisz zrobić, to ponownie połączyć się po zakończeniu przesyłania kodu.


1

Znalazłem przyczynę tego ...

Zmiana portu szeregowego na /dev/tty.usbmodem2131 naprawiła to. Okazuje się, że cały czas korzystałem z niewłaściwego portu szeregowego!


1

Możesz spróbować:

  • Sprawdź preferencje.txt serial.debug_rate: serial.debug_rate=9600
  • W przeciwnym razie spróbuj nacisnąć przycisk resetowania Arduino właśnie podczas przesyłania.
  • W przeciwnym razie spróbuj wybrać inną kartę w menu Narzędzia Arduino IDE, a następnie ponownie wybierz kartę z listy.

1

To połączenie powyższych odpowiedzi rozwiązało problem:

  • wykonał aktualizację Java:

    sudo apt-get install default-jdk

  • następnie zabił Arduino IDE i zrestartował go

  • pokazała się moja prawidłowa płyta (Arduino Mega 2560, gdzie przed Mega 1280 była tylko opcja)

  • dla kierowców zrobiłem to:

    sudo chmod a+rw /dev/serial/by-id/usb-Arduino__www.arduino.cc__(a bunch of numbers)

Następnie moje Arduino IDE pojawia się /dev/ttyACM0w menu narzędzi / portu szeregowego.

Teraz wszystko działa świetnie!


Dzięki! JDK nie powodował problemów w moim przypadku, ale sudo chmod a + rw / dev / serial / by-id / usb-Arduino ********** wykonało zadanie.
Artur Barseghyan

1

Oto rozwiązanie, które działało u mnie na MacBooku Pro (stacjonarnym).

Otrzymałem ten sam błąd i okazuje się, że to dlatego, że miałem USB podłączone do urządzenia peryferyjnego (mojego monitora), a nie USB na samym komputerze. Od razu zatrzymał wszelkie błędy i jest prostym rozwiązaniem.


1

Dzięki @hoipolloi za właściwy kierunek w znalezieniu rozwiązania.

W każdym razie musiałem zrobić trochę inne kroki, aby rozwiązać problem.

W moim przypadku Arduino Uno działało dobrze, ale nagle przestało działać po kilku zabawach ze szkicami. stk500_recv(): programmer is not respondingCały czas otrzymywałem i nic nie działało. Następnie zwróciłem uwagę, że dioda 13 na mojej płycie zawsze się świeci. Wyglądało na to, że po tablicy w kółko biegał jakiś zapętlony szkic, który blokował jakiekolwiek wejście do tablicy. Nie jestem pewien, to tylko moje przypuszczenia.

Próbowałem kliknąć RESET we wszystkich możliwych momentach bez powodzenia i nagle spróbowałem wykonać następujące czynności:

  1. Odłącz płytę.
  2. Kliknij i przytrzymaj RESET.
  3. Podłącz ponownie.
  4. Poczekaj kilka sekund.
  5. Zwolnij przycisk RESET.

Po tym zauważyłem, że na pokładzie 13 diod LED zgasło na sekundę, a potem włączyło się ponownie. Wyglądało na to, że podczas resetowania płyty było krótkie okno resetowania. Następnie, podobnie jak w rozwiązaniu @ hoipolloi, złapałem moment "resetowania" tuż przed wysłaniem trzech pakietów i to zadziałało.

Mam nadzieję, że pomoże ci to rozwiązać problem, jeśli żadne inne rozwiązanie nie zadziała.

WSKAZÓWKA . Jeśli nie widzisz tych trzech Send: 0 [30] [20]linii podczas przesyłania szkicu do konsoli, wykonaj następujące czynności:

  1. Kliknij „Prześlij” w swoim Arduino IDE.
  2. Spójrz na okno dziennika. Będziesz mógł znaleźć taką linię:

    E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CE:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
    
  3. Wygląda na to, że połyka symbole końca linii lub spacji, jak tutaj -CE:\Program Files.... Tak powinno być -C E:\Program Files. Skopiuj to jak do Notatnika, dodaj brakujące spacje, aby wiersz wyglądał tak:

    E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -v -v -v -v -C "E:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -patmega328p -carduino -PCOM3 -b115200 -D -U flash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
    
  4. Dodaj 4 -vinstrukcje, tak jak powyżej.

  5. Otwórz wiersz poleceń, wklej do niego polecenie i uruchom.

Teraz dzięki 4 -vargumentom zobaczysz znacznie więcej informacji . Początkowo Arduino Studio używa tylko jednego.


0

Czy zainstalowałeś / zaktualizowałeś sterownik kabla FTDI? (Krok trzeci na http://arduino.cc/en/Guide/Howto ). Uruchomienie Arduino IDE z mojego Raspberry Pi działało dobrze bez jawnej instalacji sterowników (albo były one wstępnie zainstalowane, albo instalator Arduino IDE się tym zajął). Na moim Macu tak nie było i oprócz IDE musiałem zainstalować sterowniki kabli.


0

Właśnie spędziłem kilka ostatnich godzin nad tym samym problemem ... Po prostu przejdź tutaj " http://www.ftdichip.com/Drivers/VCP.htm ", pobierz najnowsze sterowniki i uruchom ponownie. Po tym powinno działać dobrze. Ściągnąłem też co wieczór oprogramowanie Arduino, ale nie robię różnicy.


0

Spróbuj załadować program bez -b (opcja szybkości transmisji). W ~ / .arduino15 / preferences.txt ustaw build.verbose = true, gdy arduino.cc nie jest uruchomiony. W szczegółowym wyjściu znajdziesz plik hex, który powinieneś załadować z konsoli:

avrdude -v -v -v -v -C/usr/share/arduino/hardware/tools/avr/etc/avrdude.conf -patmega328p -carduino -P/dev/ttyUSB2  -D -Uflash:w:/tmp/build2314497724350388190.tmp/sketch_nov13b.cpp.hex:i

Po prostu wymieniam chip 128 na wersję 328 iz Decimile nazwa mojej płyty została zmieniona na Uno lub Ethernet z powodu nowej szybkości transmisji 115200.


0

Jeśli łączysz Arduino przez koncentrator USB, spróbuj podłączyć go bezpośrednio do jednego z portów USB na komputerze Mac.
To zadziałało dla mnie.


0

W moim przypadku problem pojawił się, gdy próbowałem zrobić jakieś „dziwne” wyrażenia arytmetyczne

np. (3,14 / 4) / 5 lub 3,15% 2,55

Sugerowałbym więc sprawdzenie wszystkich wyrażeń arytmetycznych na wypadek, gdyby niektóre z nich nie mogły zostać obliczone przez Arduino.

Mam nadzieję, że to pomoże.


0

W moim przypadku (Mini Pro) rozwiązanie było tak proste, że nie wiem, jak to przegapiłem. Potrzebowałem skrzyżować przewody rx / tx.

Rozwiązanie:

  • Pin Arduino Rx łączy się z pinem FTDI Tx.
  • Pin Arduino Tx idzie do pinu FTDI Rx.

0

W moim przypadku była to zła szybkość transmisji. Nazywa to polecenie:

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM4 **-b57600** -D -Uflash:w:C:\Users\Vahid\AppData\Local\Temp\arduino_build_527841/AnalogReadSerial.ino.hex:i 

Jak widać, prędkość transmisji jest ustawiona na 57600. Po usunięciu tego argumentu (-b57600) i uruchomieniu go w wierszu poleceń, działa dobrze.


0

Mój problem polegał na tym, że zaktualizowałem Arduino IDE do nowej wersji i nie podłączyłem ponownie przewodu. Wygląda na to, że to był problem

Po prostu odłącz kabel i podłącz ponownie. Dzięki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.