我无法将草图上传到Arduino Uno。
- 我已经“砖”了吗?
- 我可以采取哪些步骤找出问题所在?
- 我该如何解决?
我无法将草图上传到Arduino Uno。
Answers:
我有很多Arduino,而在过去的几年中,只有一种“砖”化了,我认为这是通过用静电将其覆盖来实现的。不幸的是,特定的处理器具有SMD(表面安装)处理器芯片,因此尝试与另一芯片交换并不容易。
保持冷静,然后尝试以下步骤...
“ Arduino Uno”不仅仅是可能失败的一件事。它包含多个主要组件,并且可能只有一个发生故障(如果有)。请参阅此参考照片:
主要组件有:
请注意,Rx和Tx LED并未直接连接到板上的数字引脚0和1(标记为Rx和Tx)。仅当您通过USB进行串行通信时它们才会亮起,而如果您将某些东西(如GPS)直接插入数字引脚0和1则不会亮起。
另请注意,由于“ L” LED通过运算放大器连接,如果引脚13设置为草图中的输入,则它可能会亮起。这很正常。这并不意味着某些东西会错误地发送数据。
用USB电缆将开发板插入计算机,并检查绿色的“开” LED点亮。
使用万用表和几个跨接引线测试5V引脚和GND引脚之间的箭头(底部箭头所示)。您应该获得约5.0 V的读数(我的电压为5.04 V)。
(如果没有万用表,您可以以10美元左右的价格购买便宜的万用表,但最好以50美元左右的价格购买更好的万用表-检查所有电子产品网站和商店。)
如果未在插入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上尝试Arduino。这可以缩小您所插入的特定计算机或一般计算机的问题的范围。
布线:
如果一切都回显:确认您具有正确的通讯端口,则USB电缆正常,而USB接口芯片(Atmega16U2)可能正常。
如果没有回声,请检查:
如果您的电路板未通过环回测试,并且确定USB电缆正常,则可以测试Atmega16U2芯片本身。板上有一个ICSP(在线串行编程)接头,与Atmega16U2芯片相邻,并且在USB插座附近。
首先断开电源(拔下USB电缆和任何电源线)。
然后,您可以通过6条跳线将ICSP接头连接到已知的良好Uno,如图所示:
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无法正常工作。
断开“已知良好” Arduino Uno的电源,然后按照此照片重新连接ICSP跳线,以将它们连接到Uno上的“主”处理器:
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插座。
仅通过USB端口上传草图和进行串行调试时才需要这样做。它不是特别容易更换,因为它是SMD(表面安装设备)。但是,您可以在没有它的情况下进行管理。
如果购买了ICSP编程设备,则可以通过ICSP标头上传草图。
将此类设备插入ICSP插座的示例:
(这些照片是使用Ruggeduino拍摄的,但概念相同)。
您还可以使用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接头对电路板进行编程。
如果将主处理器安装在插槽中,则可以很容易地对其进行更换。从Adafruit之类的地方获得替换芯片,价格约为6美元。或者,尝试eBay。尝试获取已经装有Optiboot引导加载程序的芯片,以免麻烦。
小心地从插槽中撬出现有芯片,并安装新的芯片,并注意引脚1的位置。引脚1在芯片上有一个凹口,该位置的正确方向在本帖的第一张照片中用黄色标出。点(最靠近板的边缘)。您可能需要稍微拉直双腿。抓住芯片的两端,然后将其轻轻向下推到平坦的表面(例如桌子)上,直到将其向内推一点。尽量不要碰触金属针,否则可能会使它们掉静电。
我在Atmega引导加载程序程序员处有一个草图,它将替代Optiboot引导加载程序。接线与芯片检测器草图相同。该代码位于GitHub-nickgammon / arduino_sketches中。如果单击该页面上的“下载”按钮,您将获得许多有用的草图。您想要的一个叫做“ Atmega_Board_Programmer”。
将草图安装在您的“已知良好” Uno上,并使用前面显示的接线将其连接到目标板上。
在您的“好” 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)采取措施来阻止此问题,这是他们做的第一件事。但是其他人没有。
这可能很难恢复,因为一旦运行草图,便会遇到重置问题,如果遇到问题,就无法替换草图。人们经常报告他们必须刻录新的引导程序才能恢复。但这只是因为,作为副作用,刻录引导程序会擦除当前草图。
这里是恢复的一种方式。请执行以下步骤:
我在这里提到了这一点,尽管这篇文章实际上是针对Uno董事会的,因为这很普遍。
Mega2560引导加载程序的某些版本会显示“ !!!” 从PC传入的上传文件中,如果他们看到了,请进入调试模式。这会导致上传失败。
示例代码:
Serial.println ("Furnace overheating!!!");
解决方案:
或者(更简单地说):
以ATmega32u4作为其主要(也是唯一)处理器的开发板很难上载。这是因为同一芯片必须处理上传并运行您的代码。
重置木板后,当它寻找要上载的新草图时,机会很小。上载到这些板的技术是:
在旧草图开始运行之前,您只有一秒钟左右的时间执行此操作。如果您必须重复此过程几次,不要气be。那是正常的。
至少-我假设您是通过avrdude上传草图的-请提供有关上传失败的更多信息(例如草图上传器的输出),以便此处的人员可以为您提供更好的帮助。
除了尼克·加蒙(Nick Gammon)的出色答案之外,请在草图中搜索感叹号。如果您的草图包含带有大于或等于3个感叹号的字符串,则上载将失败,因为旧版本的Arduino Bootloader会将这些感叹号解释为另一个函数,并且上载将停止。
停止上传的示例:
char* test = "This will stop the upload!!!";
请参阅Google代码问题。
由于静态(我认为),我在Arduino Uno板上固定了2个ATMega328P。
静电似乎杀死了TX引脚,因此无法使用USB电缆下载程序。
最简单的解决方案是更换微控制器。您可以购买使用Arduino引导程序编程的新ATMega328P DIP(例如Adafruit的该程序),然后就可以再次使用了。
或者,您仍然可以使用AVRISPmkII编程器对ATMega328P进行编程。完成后,除Tx引脚以外的所有引脚都可以正常工作。