AVRDUDE:stk500v2_ReceiveMessage():超时

38

这是我运行 ARDUINO 程序时遇到的主要错误。完整的错误列表如下:

avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

我的代码如下:

int led=13;
void setup()
{
    pinMode(13,OUTPUT);
}

void loop()
{
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(13,LOW);
    delay(1000);
}

我已经尝试更新驱动程序(它们已经完全更新)并下载了一些程序。 我使用的是Windows 7,我的Arduino是MEGA 2560型号。 它出现在设备管理器中,所有连接都正确。 绿色的PWR灯和闪烁的L灯都亮着。 当我更新时,RX和TX指示灯会闪烁。 我已经尝试了网上几乎所有的方法。 问题出在哪里?


1
虽然这个问题在这里也许还可以,但是你在EE.SE会得到更多专业的答复和观点。 - Nick T
当我尝试将sketch上传到连接到我的Arduino(mega 2560)的esp8266上时,我遇到了同样的问题,它连接到3.3V、GRD、Rx和Tx。断开连接后,它正常工作了。 - fnc12
16个回答

24

如果您的代码中有三个感叹号并排,可能会导致Mega 2560出现此错误。可能是在最近添加的字符串中。

连续三个感叹号会使Mega 2560引导加载程序进入监视器模式,导致无法完成编程。

"!!!" <--- 这会破坏Mega 2560引导加载程序。

解决方法是先拔掉Arduino USB以重置COM端口,然后只使用两个感叹号或在它们之间加上空格等方式重新编译。然后重新连接Arduino并像往常一样进行编程。

是的,这让我头疼了一整天,今天我终于找到罪魁祸首了。以下是一个包含更多信息的链接:http://forum.arduino.cc/index.php?topic=132595.0


3
谢谢!!!这个节省了我很多个小时的头痛。 - Andrew Guy
难以置信,但确实是我遇到的问题。谢谢。 - JYelton
谢谢,谢谢,谢谢。我遇到了这个问题,但只有两个感叹号。无论如何,从现在开始我不会再通过串行监视器发出任何感叹了... - Connor Fuhrman

15

该错误信息基本上意味着程序员无法联系设备上的 bootloader;您尝试上传的代码与问题无关。

引起此问题的原因可能有很多,例如:

  1. UART 通信

    • 闪烁灯正在工作,所以希望您没有使用错误的端口。但是仍然值得再次检查,因为有时 USB COM 设备会安装在奇怪的端口号上。

    • 将 TX 连接到 RX(如果可能,从 AVR 断开连接),然后在 COM 端口上打开终端,如果键入字符,则应看到其被回显。 如果没有,请检查芯片上游是否出现问题,可能是通信芯片(我认为 Arduino 2560 由于某种原因使用了辅助 AVR 而不是 FTDI,因此可能损坏,无论是软件还是硬件)。

  2. ATmega* bootloader

    • 由于某种原因,AVR 没有执行 bootloader。 如果编程器在尝试连接之前未重置微控制器,则可能是原因之一。 尝试在编程器尝试连接时重置 AVR(按下并释放按钮)。 有时,运行在紧密循环中的软件会阻止 bootloader 连接。

    • 在这种情况下,熔断可能会出现问题或代码被删除。 您需要重新刷新引导加载程序和正确的熔断。 再次查看您设备的相应信息页面以获取更多信息。

  3. 仅适用于 Arduino Mega 2560: ATmega8U/16U 软件

    • 可能不起作用,需要重新编程。请参阅信息页面上的编程部分,您需要固件和 Atmel 兼容的 DFU(设备固件更新)软件来重新刷新目标。
  4. 板、AVR 或 FTDI 芯片的硬件损坏

    • 您的芯片已经损坏,需要更换。

查看这篇论坛帖子,可以得到更多的想法。


我有一块Arduino Mega,遇到了同样的问题。很可能是引导加载程序的问题 - 因为如果我通过传递-D标志关闭“启用芯片使能周期”选项,我可以成功地将程序烧录到芯片上(尽管速度稍慢)。谢谢,这些是很好的指南。 - Ahmet Ipkin

7
我之所以遇到这个错误,是因为我在avrdude命令行中没有指定正确的编程器。如果你使用的是Arduino板,你必须指定“-c arduino”。
这个示例命令读取hfuse的状态:
avrdude -c arduino -P /dev/ttyACM0 -p atmega328p -U hfuse:r:-:h

6
根据我的理解,这个错误会在不同的情况下出现:
  1. 你选择了错误的端口或者根本没有选择。请到 工具 > 端口 并选择连接到Arduino的 com 端口。

  2. 你选择了错误的板子。请到 工具 > 板子 并选择正确的板子。

  3. 你使用的是Arduino复制品或者没有在微控制器上安装引导程序?我不知道解决方法!如果你知道,请编辑我的帖子并添加说明。

  4. (仅限Windows) 你没有安装正确的驱动程序。你需要手动更新它们。

  5. 有时候当你连接了电线到板子上时会出现这种情况。你需要将板子与任何面包板或电线分开,并尝试重新上传。似乎用于串行通信的引脚 0 (RX)1 (TX) 有问题,在上传代码时最好保持空闲。

  6. 有时候没有具体原因会随机发生!

网络上有各种各样的解决方案,但有时很难区分魔法和真相!也许Arduino团队应该考虑设计更好的编译器错误提示,以帮助用户区分不同的原因。

我遇到了同样的问题,上述解决方案都没有起作用。问题出在我使用了Arduino UNO并且一切正常,但当我购买了Arduino Mega 2560后,无论我尝试上传什么代码,都会出现这个错误:

avrdude: stk500v2_ReceiveMessage(): timeout

这个问题只在我的一台Windows电脑上出现,而另一台开箱即用。

解决方法:

我解决此问题的方法是进入工具 > 开发板 > 开发板管理器...,然后在打开的窗口左上角选择 可更新 选项。接着,在列表中选中项目并在右侧点击更新按钮。

我不确定这种方法是否适用于所有人,但至少可以解决我的问题。


1

打开终端并输入:

$ sudo usermod -a -G dialout 

(这个命令是可选的)
$ **sudo chmod a+rw /dev/ttyACM0** 

(这个命令必须成功)

0
我遇到了这个问题。我找到的解决办法是我必须将液晶屏与主板断开连接。

0
我曾经遇到过同样的问题,我的解决方法是在Windows 10设备管理器中使用Windows更新来更新USB串行驱动程序。没有必要下载特定的驱动程序,我只需让Windows更新找到一个合适的驱动程序即可。

0

我直接连接到我的笔记本电脑的USB端口,超时问题已得到解决。

之前尝试使用端口复制器,但它甚至没有识别出Arduino,因此我选择了错误的端口 - 导致超时消息。

因此,请确保它在您的操作系统中可见。


0
如果您使用ino命令行:
ino upload

可能是因为您同时使用了Arduino软件,请尝试关闭它。


0

确保串口监视器未运行,也没有任何程序正在读写dev/tty/S0(或您使用的任何端口),这可能会导致上传干扰。


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