我已经用砖砌了Arduino Uno吗?上载到木板的问题


86

我无法将草图上传到Arduino Uno。

  • 我已经“砖”了吗?
  • 我可以采取哪些步骤找出问题所在?
  • 我该如何解决?

7
对于那些想知道的人,这不是一个实际的问题!这更多是参考问题。这个问题本身是有目的的。但是,答案非常详细,因此可以将此问题用作参考。
保罗

2
这更多是参考问题。完全正确。看到可以问自己的问题
尼克·加蒙

@Nick_Gammon是的。但是我觉得您应该以某种方式注意到它。乍一看,这个问题如此广泛,似乎您还没有做任何研究,这使我(对此)感到有些烦恼。但是,当我看到您的回答时,一切都说得通。另外,(如果可以的话)您不要忘记接受自己的答案,这样其他尝试帮助的人就不会开始对此问题进行回答,调查或评论(这对您没有真正的帮助。确实找到了调试此问题的好方法)。
Paul

感谢您的反馈。最初,我想以要发布自己的答案的注释发布问题,但是后来我看到了有关“回答您自己的问题”的复选框,所以我勾选了该复选框。至于接受,我不允许有20个小时。接受您自己的回答对我来说似乎有些奇怪,但可以肯定的是,我可以这样做。我在Meta Arduino上问了一个问题,究竟是什么规范问题?试图制定出正确的程序,但没有得到回应。
尼克·加蒙

@FuaZe和Nick Gammon:总的来说,这看起来很棒,我唯一的建议就是让该主题更加暗示问题和答案的真正含义。实际上,我认为我可能很想模糊地将其吹散。标题可能是“如何解决上传失败的问题?”
dlu 2015年

Answers:


115

它可能不是砖头

我有很多Arduino,而在过去的几年中,只有一种“砖”化了,我认为这是通过用静电将其覆盖来实现的。不幸的是,特定的处理器具有SMD(表面安装)处理器芯片,因此尝试与另一芯片交换并不容易。

保持冷静,然后尝试以下步骤...


示例板

“ Arduino Uno”不仅仅是可能失败的一件事。它包含多个主要组件,并且可能只有一个发生故障(如果有)。请参阅此参考照片:

Arduino Uno主要组件

主要组件有:

  • Atmega16U2处理器-处理USB连接的接口
  • Atmega328P处理器-这是上面带有草图的“主”处理器
  • 稳压器-将来自电源插孔的输入功率转换为5 V
  • 电源LED(绿色)-标有“开”
  • 指示灯LED(黄色)标记为“ L”-通过运算放大器连接到数字引脚13
  • Rx和Tx LED(黄色)-这些指示USB芯片(Atmega16U2)是否正在接收或发送

请注意,Rx和Tx LED并未直接连接到板上的数字引脚0和1(标记为Rx和Tx)。仅当您通过USB进行串行通信时它们才会亮起,而如果您将某些东西(如GPS)直接插入数字引脚0和1则不会亮起。

另请注意,由于“ L” LED通过运算放大器连接,如果引脚13设置为草图中的输入,则它可能会亮起。这很正常。这并不意味着某些东西会错误地发送数据。


检查电源

USB电源

  • 用USB电缆将开发板插入计算机,并检查绿色的“开” LED点亮。

  • 使用万用表和几个跨接引线测试5V引脚和GND引脚之间的箭头(底部箭头所示)。您应该获得约5.0 V的读数(我的电压为5.04 V)。

(如果没有万用表,您可以以10美元左右的价格购买便宜的万用表,但最好以50美元左右的价格购买更好的万用表-检查所有电子产品网站和商店。)

  • 还要在3.3 V引脚和GND引脚之间进行测试-您应该获得3.3V。

如果未在插入USB电缆的情况下获得5 V电压,请确保另一端已连接到计算机。也尝试使用其他电缆。

电源插孔

  • 如果您正在使用或计划使用电源插座(在照片上标有“ power in”),请断开USB的连接,然后插入电源- 中心引脚上的正极应为7至12 V DC 。

  • 如上所述测量5 V和3.3 V引脚。您仍然应该在它们上看到相同的电压。

如果在连接USB而不是电源的情况下获得5 V电压,则稳压器(照片上标记)可能已损坏。或者,可能是电源出现故障。尝试使用其他电源来确认它是哪个。


检查电源指示灯闪烁

如果您有Optiboot引导加载程序(通常是Uno附带的),那么如果您按下并释放Reset(重置)按钮,或者重新插入USB或电源线并重新插入,则“ L” LED应该快速闪烁3次。“开启”和“关闭”时间分别为50毫秒,这三次闪烁应在大约1/3秒内结束。

如果不是这样,则说明引导加载程序或主处理器芯片(Atmega328P)可能有问题。


尝试上传草图

重要提示:如果在上传草图时遇到麻烦,请删除所有连接的设备(例如屏蔽)。还要卸下插入板插槽中的跳线。特别是,数字引脚0和1(Rx和Tx)应该没有任何插入,因为这会干扰与上传计算机的通信。

选择一个简单的示例草图(例如Blink),然后尝试上传它。这是您应该看到的:

  • “ L” LED应闪烁3次。这是因为正在通过上载过程中的命令重置主芯片。

  • “ Rx” LED应该快速闪烁。这是上载过程中试图激活引导程序的说明。

  • “ Tx” LED应该快速闪烁。这是处理器确认上传的数据。

即使上传过程失败,您也可能会看到上述内容。这可能是因为选择了错误的板类型。

如果仅“ Rx” LED闪烁,则可能是由于引导加载程序或主处理器芯片(Atmega328P)出现问题。有人在敲门,但没人在家!

检查单板类型

如果指示灯闪烁,但您会收到以下消息:

avrdude: stk500_recv(): programmer is not responding

检查单板类型:

板类型菜单

如果您选择了错误的板类型,则可能会发送错误的上载指令,并且超时或失败。如果您像我一样,周围有不同的木板,则很容易忘记您上次上传的是不同木板类型。

检查通讯端口

如果指示灯根本不闪烁,则可能是您选择了错误的通讯端口。

检查通讯端口:

通讯端口菜单

如果可能,请尝试使用其他PC / Mac

如果您愿意,可以在其他PC / Mac上尝试Arduino。这可以缩小您所插入的特定计算机或一般计算机的问题的范围。

做回送测试

  • 断开所有屏蔽和其他电线
  • 从电源上卸下板子
  • 将跨接线从RESET连接到GND(照片中的橙色线)
  • 将跨接线从Rx连接到Tx(照片中的白线)

布线:

回送测试

  • 插入USB电缆,然后启动一个终端程序-例如Arduino IDE中的Terminal Monitor。输入内容并发送(例如,在“终端监视器”中按Enter)。
  • 您键入的所有内容都应回显。

如果一切都回显:确认您具有正确的通讯端口,则USB电缆正常,而USB接口芯片(Atmega16U2)可能正常。

如果没有回声,请检查:

  • 您具有正确的通讯端口。
  • 尝试使用其他电缆。一些便宜的USB电缆仅具有电源线,而没有数据线。
  • 检查设备驱动程序是否已安装Arduino。如果该板先前在此计算机上工作过,则可能不需要这样做,但是如果这是您首次将该板插入该计算机,则可能值得这样做。

测试Atmega16U2芯片

如果您的电路板未通过环回测试,并且确定USB电缆正常,则可以测试Atmega16U2芯片本身。板上有一个ICSP(在线串行编程)接头,与Atmega16U2芯片相邻,并且在USB插座附近。

首先断开电源(拔下USB电缆和任何电源线)。

然后,您可以通过6条跳线将ICSP接头连接到已知的良好Uno,如图所示:

测试Atmega16U2芯片

ICSP接头连接器的引脚排列是(从顶部开始):

ICSP接头

Atmega16U2芯片附近的ICSP接头上的引脚1在“ AREF”中的“ F”附近标有一个小白点。ATmega328P芯片附近ICSP接头上的引脚1在“ ON”中的“ N”下方标有一个小白点。

连接:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

仔细检查您的接线。

然后按照Atmega引导加载程序编程器页面上的说明,在“已知合格”板上安装“ Atmega_Board_Detector”草图。该代码位于GitHub-nickgammon / arduino_sketches中。如果单击该页面上的“下载”按钮,您将获得许多有用的草图。您想要的一个称为“ Atmega_Board_Detector”。

安装完成后,打开串行监视器,将其设置为115200波特,您将看到以下内容:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

但是,如果收到这样的消息:

"Failed to enter programming mode. Double-check wiring!"

这似乎表明您的ATmega16U2无法正常工作。


测试ATmega328P芯片

断开“已知良好” Arduino Uno的电源,然后按照此照片重新连接ICSP跳线,以将它们连接到Uno上的“主”处理器:

测试ATmega328P芯片

ICSP接头连接器的引脚排列是(从顶部开始):

ICSP接头

ATmega328P芯片附近ICSP接头上的引脚1在“ ON”中的“ N”下方标有一个小白点。

接线与之前相同,不同之处在于,您要连接到另一个ICSP接头连接器-板末端的接头,距离USB插座最远。

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

连接后,打开串行监视器,将其设置为115200波特,您将看到以下内容:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

在这种情况下,它将确认主处理器正在运行,并且上面装有Optiboot引导加载程序。


您可以解决的问题

稳压器故障

这不容易更换,但是只有在使用电源插孔时才需要。如果从USB运行,则不需要。或者,您可以安排4至5 V电源(例如3 x AA电池),然后将它们直接连接到板上的5 V插座。


ATmega16U2芯片故障

仅通过USB端口上传草图和进行串行调试时才需要这样做。它不是特别容易更换,因为它是SMD(表面安装设备)。但是,您可以在没有它的情况下进行管理。

如果购买了ICSP编程设备,则可以通过ICSP标头上传草图。

将此类设备插入ICSP插座的示例:

USBtinyISP

AVRISP

(这些照片是使用Ruggeduino拍摄的,但概念相同)。


您还可以使用FTDI电缆,如下所示:

将FTDI连接到Arduino

像这样将其连接到开发板的串行端口:

FTDI电缆

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

现在,您可以绕过USB芯片将草图直接上传到主处理器。


您还可以使用我的Atmega芯片独立编程器上传.hex文件 -这使您可以将草图的.hex文件复制到SD卡上,然后通过ICSP接头对电路板进行编程。


ATmega328P芯片故障

如果将主处理器安装在插槽中,则可以很容易地对其进行更换。从Adafruit之类的地方获得替换芯片,价格约为6美元。或者,尝试eBay。尝试获取已经装有Optiboot引导加载程序的芯片,以免麻烦。

小心地从插槽中撬出现有芯片,并安装新的芯片,并注意引脚1的位置。引脚1在芯片上有一个凹口,该位置的正确方向在本帖的第一张照片中用黄色标出。点(最靠近板的边缘)。您可能需要稍微拉直双腿。抓住芯片的两端,然后将其轻轻向下推到平坦的表面(例如桌子)上,直到将其向内推一点。尽量不要碰触金属针,否则可能会使它们掉静电。


ATmega328P响应但没有引导程序

我在Atmega引导加载程序程序员处有一个草图,它将替代Optiboot引导加载程序。接线与芯片检测器草图相同。该代码位于GitHub-nickgammon / arduino_sketches中。如果单击该页面上的“下载”按钮,您将获得许多有用的草图。您想要的一个叫做“ Atmega_Board_Programmer”。

将草图安装在您的“已知良好” Uno上,并使用前面显示的接线将其连接到目标板上。

测试ATmega328P芯片

在您的“好” Uno上打开串行监视器,您应该看到以下内容:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

为Uno(Optiboot)加载程序键入“ U”。

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

键入“ G”以对芯片进行编程。

您应该看到:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

这大约需要一秒钟。现在已经安装了引导程序。


看门狗定时器问题

看门狗定时器(默认情况下为关闭)可以配置为在一定时间后重置处理器。目的是从现场部署的处理器的“挂起”中恢复。但是,如果定时器设置的时间很短(例如16 ms),则处理器可以在引导加载程序有机会执行任何操作之前再次复位。

症状是您无法上载任何新草图。一些现代的引导加载程序(例如Optiboot)采取措施来阻止此问题,这是他们做的第一件事。但是其他人没有。

这可能很难恢复,因为一旦运行草图,便会遇到重置问题,如果遇到问题,就无法替换草图。人们经常报告他们必须刻录新的引导程序才能恢复。但这只是因为,作为副作用,刻录引导程序会擦除当前草图。

这里恢复的一种方式。请执行以下步骤:

  • 完全关闭电路板电源(拔下USB电缆)。
  • 按住“重置”按钮并保持不放(或从RESET引脚到GND引脚接一根跳线)。这样可以停止启动问题草图,从而激活看门狗定时器
  • 仍按住复位键,重新连接USB电缆。
  • 开始上传没有此问题的草图(例如,闪烁)
  • IDE报告“正在上传”后,松开“重置”按钮(或卸下跳线)。
  • 现在应该上传OK-激活看门狗定时器的草图从未启动。

Mega2560上传问题

我在这里提到了这一点,尽管这篇文章实际上是针对Uno董事会的,因为这很普遍。

Mega2560引导加载程序的某些版本会显示“ !!!” 从PC传入的上传文件中,如果他们看到了,请进入调试模式。这会导致上传失败。

示例代码:

Serial.println ("Furnace overheating!!!");

解决方案:

  • 安装更新的引导程序。我在此回复前面提到的“ bootloader上载程序”草图应该安装没有该问题的bootloader。

或者(更简单地说):

  • 不使用 ”!!!” 在您的草图中。

上传到Leonardo / Micro / Esplora等时出现问题

以ATmega32u4作为其主要(也是唯一)处理器的开发板很难上载。这是因为同一芯片必须处理上传并运行您的代码。

重置木板后,当它寻找要上载的新草图时,机会很小。上载到这些板的技术是:

  • 编译您的草图没有错误。
  • 开始上传
  • IDE报告“正在上传”后,请按下并释放“重置”按钮。

在旧草图开始运行之前,您只有一秒钟左右的时间执行此操作。如果您必须重复此过程几次,不要气be。那是正常的。


参考文献


5
哇。这是一个很好的答案
rpax

1
先生,这是一个很好的答案。
MertGülsoy2015年

“如果在连接USB的情况下获得5 V电压,但未通过电源获得5 V电压,则表明稳压器(照片上标记)可能已损坏。或者,可能是电源出现故障。请尝试使用其他电源来确认它是。” -为什么这会阻止您上传草图?
user2813274

您说得很对,事实并非如此。但是,检查清单应该是失败的常规检查清单。在这种情况下,它更像是“我可以上传草图,但是当在野外部署时,如果使用电源(壁疣),它将无法工作”。
尼克·加蒙

1
我最近对新的FTDI驱动程序遇到了问题,这些驱动程序“砖”了中文“兼容FTDI”(好吧,您可以说是模仿的)芯片。他们将设备的PID设置为0x0000,这将使驱动程序无效。您可以选择使用FTDI上的M_PROG工具改回PID,也可以选择更改驱动程序(并设置窗口以允许未验证的驱动程序)。
保罗

14

至少-我假设您是通过avrdude上传草图的-请提供有关上传失败的更多信息(例如草图上传器的输出),以便此处的人员可以为您提供更好的帮助。

除了尼克·加蒙(Nick Gammon)的出色答案之外,请在草图中搜索感叹号。如果您的草图包含带有大于或等于3个感叹号的字符串,则上载将失败,因为旧版本的Arduino Bootloader会将这些感叹号解释为另一个函数,并且上载将停止。

停止上传的示例:

char* test = "This will stop the upload!!!";

请参阅Google代码问题


1
好点子。这主要适用于Mega2560,但我承认我省略了。:)
尼克·加蒙

1
添加了一个部分来处理此问题。
尼克·加蒙

2

由于静态(我认为),我在Arduino Uno板上固定了2个ATMega328P。

静电似乎杀死了TX引脚,因此无法使用USB电缆下载程序。

最简单的解决方案是更换微控制器。您可以购买使用Arduino引导程序编程的新ATMega328P DIP(例如Adafruit的该程序),然后就可以再次使用了。

或者,您仍然可以使用AVRISPmkII编程器对ATMega328P进行编程。完成后,除Tx引脚以外的所有引脚都可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.