Arduino Sketch上传问题 - avrdude:stk500_recv():程序员未响应

172
我有一个带有ATmega328的Arduino Duemilanove。我正在使用Ubuntu 12.04(Precise Pangolin)操作系统,Arduino IDE的版本是1.0。最近,我尝试上传一些示例代码,例如Blink。然而,我的所有尝试都失败了,并且每次尝试时都会出现相同的错误:

avrdude: stk500_recv(): programmer is not responding.

我已在菜单工具串口下启用了/dev/ttyUSB0。我也从列表中选择了正确的板子(ATmega328的Duemilanove)。但是,我仍然无法解决问题。我也在网上搜索了一些解决方案,但似乎都不适用于我。为什么会出现这个问题,如何解决?
我还尝试了翻转板载ATmega并插入另一个方向。现在,上传没有问题,但之后什么也没发生。板载LED也似乎没有闪烁。

将Arduino uno板上的RST与GND断开连接。我按照这个教程操作,忘记撤销了这个步骤。 - ArtiomLK
这可能是因为波特率设置为错误的值(可能太高)。 - Konrad Gajewski
40个回答

127

我遇到了同样的问题- 这就是我找到这个问题的原因。

我只需要将处理器从“ATmega328P”更改为“ATmega328P(旧的引导程序)”

问题解决了- 至少对我来说是这样。

在此输入图像描述


2
如果您正在使用ELEGOO NANO板,可能会出现此问题。相同的解决方案也在FAQ文档中提到。 - kchetan
1
如果板子是Arduino Nano,并且在2018年1月之前制造的,只需选择处理器>“ATmega328P(旧引导程序)”即可解决问题(https://www.arduino.cc/en/Guide/ArduinoNano#toc4)。 - Bit-Man
1
您的建议解决了我在OSX + Arduino Nano上遇到的相同问题。 - maestr0
这对我也起作用了,谢谢。 - Anirudh R.Huilgol.
这个答案应该在第一页。我花了一段时间阅读所有其他的回答... - Dávid Molnár
显示剩余4条评论

121

我在使用OS X上的Arduino IDE时遇到了Crowduino的问题。对于我来说解决方案是在上传时打开详细输出(在Arduino IDE首选项窗格中)。

然后,在上传时,您可以看到AVRDUDE发送三个数据包avrdude: Send: 0 [30] [20](与板子上相应的RX闪光)就在avrdude: ser_recv(): programmer is not responding错误之前。

诀窍是在发送这三个数据包之前立即按下板子上的复位按钮,然后程序将会成功上传。


3
好的,那至少解决了我的问题。你是怎么想出来的? - SlackOverflow
8
其他人注意到,如果在X秒后重置,那么它就可以使用。我认为这些数据包是一种握手尝试。因此,基本上,我使用了Google、耐心和调试板子来解决它! - hoipolloi
5
FYI - 我不得不安装最新的FTDI驱动程序才能永久解决这个问题。 - Scott Silvi
2
更新FTDI驱动程序并重新启动Arduion对我有帮助(MacOS 10.9.4,Arduino Nano 328)。 - peetonn
1
我花了很多时间尝试修复这个问题,包括之前尝试重置,但是按照这些精确的指示并将其放入详细模式后,第一次就解决了!太棒了,非常感谢! - Foxichu
显示剩余9条评论

94

确保 Tx/Rx 引脚没有输入。然后它就可以正常工作。


2
这对我有用!我连接了一个蓝牙模块到RX/TX引脚。 - johngreen
这对我起作用。我不得不拔掉USB电缆并重新启动Arduino,因为在拔掉引脚(和电源,只是为了确保)后我收到另一个错误。 - oneindelijk
是的,我在我的Uno上将引脚0拉到地上,这导致了问题。 - Elijah Mock
这对我也起作用了,谢谢。 在上传代码草图之前,我已经连接了HC-05,所以遇到了这个问题。此外,在之前,当我没有从工具->板中选择Arduino Uno时,我也遇到了类似的错误。 - mrtechmaker
为什么会出现这个问题呢?它不知道是否需要作为中间件来将草图刷入TX/RX模块还是实际的Arduino? - Ari

53

这里有一些关于编程的好主意,但也有一些术语。让我们试着更加真实地了解发生了什么,并总结一下要检查的好东西:

基本上,当这种情况发生时,启用AVRDUDE的详细模式是一个好主意,以便更好地了解正在发生的事情。要这样做,您只需要进入首选项并勾选详细模式框。同时,远离Arduino IDE,启动控制台以更舒适地阅读AVRDUDE的输出,您可以通过单击上传按钮来获取。

在这里重要的是将3或4个-v放入命令调用中。以下是这样的AVRDUDE命令,其中包含虚构的参数,因为它们完全取决于Arduino的安装方式:

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

一个获取正确命令行的好方法是从启用了详细输出的Arduino IDE输出日志中复制它。
当你收到“avrdude: stk500_recv():程序员没有响应”时,基本上意味着在闪存实际开始之前发生了一些错误。
基本上,您必须检查(从硬件到软件,从低级到高级):
  • 如果电缆和/或连接器没有微断;
  • 如果没有焊点短路(即接触到周围金属物体),那么意味着:
    • 如果PCB上的RxTx之间没有短路(通常是引脚10);
    • 如果与板下的金属元素或组件引脚之间没有微小的碎屑(例如FTDI、ATmega芯片或其他任何元件);
  • 如果ATmega芯片没有停电(GND/VCC短路或切断或VCC输入死亡…);
  • 如果Arduino的10引脚没有被某个扩展板或自定义设计使用(/!\不适用于Leonardo,因为它具有独立的USB处理);
  • 如果USB转UART转换器没有问题(旧版Duemilanove上的FTDI或新版Arduino Uno上的ATmega16U2);
  • 如果ATmega328芯片烧毁或安装错误;
  • 如果引导加载程序已被覆盖或失败;
  • 如果输入引导加载程序的正确波特率已应用;
  • 如果为目标微控制器和板设置了正确的设置;
通常使用avrdude -v -v -v -v可以帮助找到失败的阶段,无论是完全无法进行USB连接(电缆故障、USB/UART、PCB...),还是引导加载程序问题。

更新:我尝试了反转板载ATmega并将其放在另一个方向。现在,我上传没有遇到任何问题,但之后什么也没发生。板上LED也似乎没有闪烁。

如果您反转了ATmega的位置,然后它不起作用,那么您将电源放在数字引脚上的事实可能已经烧坏了芯片。

顺便提一下,Arduino输出的最后一行(在开始上传之前)是avrdude的路径、配置文件的路径和闪存文件的路径。这可以轻松地复制粘贴到命令行中,并添加-v。 - powtac
实际上,我几乎从不使用糟糕的用户界面,但是如果我没记错的话,您需要在首选项中启用详细输出。 - zmo
2
这对我来说发生的原因是我在Eclipse avrdude配置中设置了错误的波特率。当我在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 - basickarl
固定的:avrdude -v -v -v -v -C/etc/avrdude.conf -patmega328 -carduino -P/dev/ttyACM0 -U flash:w:~/Arduino/WebServer/WebServer.ino.standard.hex - basickarl
一般来说,使用-c参数时,您应该指定您正在使用的程序员工具的类型(如果直接使用,则为arduino,如果使用avrispjtagice等,则为相应的工具)。这在avrdude的手册中有说明;-) - zmo

24

尝试查看您的板子是否已正确选择。点击菜单工具-->板子,检查是否选择了正确的板子。


2
这就是我的经历。我一直在使用 Uno,直到它坏了,然后买了一个新的 Mega。全新的 Mega 出现了这个问题。我甚至不知道这个菜单存在。谢谢! - Mike
不是那个,而是正确的“串行”没有被选中……确实值得思考!谢谢! - heltonbiker
我怎样知道哪个板子与我的Arduino兼容? - Ahmed Can Unbay
这个可行。我正在从Uno切换到Nano Every。首先,我必须下载一个新的库。然后我必须选择正确的板子(通过这个答案),然后选择正确的“寄存器仿真”(在工具>板子下方找到)。 - Charity

14

您可以检查一下是否在引脚0和1上插了跳线。这些引脚用于串行通信,而连接的导线可能会阻止代码上传到板子上。

如果没有任何连接,那么可能是 AVRDUDE 的错误,您可以尝试更新它。


3
0和1之间绝对没有任何联系。avrdude 也已更新为最新版本。 - Pastafarian
我没有另一个板子。:( 不过在Windows上似乎出现了类似的错误,所以可能是板子的问题。 - Pastafarian
没错,这就是我想说的...你可以尝试使用Serial.println()示例来检查它是否仅限于led 13 - ladislas
谢谢!我完全忘记了跳线。 - Berit Larsen

10

1
每当我使用我的Arduino Duemilanove ATMega328时,我总是忘记做这件事,并且还要检查在Arduino应用程序中选择了正确的板(在1.0.6版本下的工具中)。 - Andrew
1
如果您刚刚安装了Arduino IDE,那么这个答案(很可能)就是您要找的! - Zaxter

7

以上错误分为三个阶段:

  1. 如果引导加载程序已崩溃
  2. 如果您没有从IDE中选择正确的端口和正确的板子
  3. 如果您正在与其他串行端口通信。即GND和Tx引脚连接到其他通信设备

在我的情况下,我选择了错误的板子。谢谢AMPS! - Jamshaid K.

6
我发布这篇文章是因为我在其他地方没有找到答案。所有我的Arduino nano中国克隆版(CH340)在升级到Arduino IDE 1.8.9后都出现了这个问题。对于我来说,解决办法是使用我有的备用官方Arduino Uno,通过nano上的ICSP标头烧录不良的nano上的引导程序。我所做的只是按照这里的说明操作:chinese-clone-of-arduino-nano-with-chip-ch340g-how-to-fix-it。唯一不同的是,我总是设置“Old Bootloader”选项,如本帖中所述。除此之外,我完全按照那个链接上的说明操作,并使我的纳米从这个令人恼火的问题中得救。我希望这能帮助到某些人。

这对我有用。我有点不舒服从一个陌生的网页下载和安装exe文件。但我冒了险。希望我的电脑不会被黑客攻击 - 很可能会... 唉..我现在会断开我的Arduino开发PC与互联网的连接。 - Sungsoo Koh
安装驱动程序后,选择“旧引导程序”对我很有帮助! - mayo

4

我在第一次尝试使用Arduino Uno时也遇到了同样的问题。

我的解决方法非常简单。只需拔下USB电缆,然后再插回去即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接