当使用Arduino Uno作为ISP时,“赞!无效的设备签名”表示连接错误,配置错误或avrdude版本错误?


12

我正在使用Arduino UNO在Windows 7上使用Arduino IDE目录中的avrdude将预编译的十六进制图像编程为ATTINY45。Uno从示例目录中加载了ISP草图,并且该草图有效-心跳LED脉搏很好。

在硬件方面,我有这个设置,除了ATTINY是表面安装的,焊接到冲浪板上,其所有引脚都通过电压表验证焊接。我使用了一个顶针固定条,用手将其固定到冲浪板上,以将信号从Uno传送到ATTINY。

以下是命令行,它们是我从IDE的调试输出中获得的:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

-我尝试单独运行它们,但始终会收到此错误:

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.

但有时数字是ff0000或ffff00或ffffff

我读到“ Arduino使用avrdude的略微修改版本将草图上载到Arduino板上。标准版本以引导加载程序无法理解的方式查询板的设备签名,从而导致此错误。” 这是否意味着将Arduino avrdude与新的ATTINY芯片一起使用,而没有引导加载程序,也会导致相同的错误吗?换句话说,修改后的avrdude是否无法查询非Arduino引导加载的AVR芯片?

还是那个错误只是意味着我所有的编程器引脚和ATTINY之间没有良好的接触?

而且,真的需要保险丝设置吗,Uno可以将闪存编程为以1MHz运行的attiny,从而为我节省了一些步骤吗?

(我只想买一个“真正的”程序员,但需要在接下来的两天内获取此代码,并且在新斯科舍省的农村地区)


尝试将编程器设置为-c avrisp。我认为您可以对其进行1 MHz的编程而不会出现问题。
user2973

1
当我从arduino IDE上传并将编程器设置为“ Arduino as ISP”时,它-carduino不使用stk500。只需尝试从IDE将眨眼程序上载到attiny。这样,如果在设置中启用“详细输出”,则可以在底部看到正确的命令行。
Gerben 2014年

您是否首先上传了ArduinoISP草图?
PhillyNJ 2014年

菲尔,在完成这些步骤之前,我确实将ArduinoISP草图加载到了Uno中,成功了,并且我看到9针脉冲中的绿色“心跳” LED指示灯。Gerben / user2973,我确实尝试过“ -carduino”,接下来我将尝试“ -c avrisp”。谢谢。
2014年

这看起来像是ISP <->目标连接问题。您电路中是否有任何东西可能正在加载线路?ATtiny保险丝是否仍设置为内部时钟,或者您正在提供外部时钟?您确定已正确连接所有四根信号线和地线吗?也许您应该只焊接设置,以验证它不是您的手持方法(尽管我也使用过这种方法)
Chris Stratton 2014年

Answers:


12

我将电线焊接到焊盘上以确保连接良好,然后将这些电线用于Uno编程。然后,程序员开始工作,对问题中发布的命令行没有任何编辑。我进行了一些修改,能够回答我所有的问题,此外,还有其他一些问题:

  1. 由于编程器(Uno)与ATTINY引脚之间的接触不良,导致了“ Yikes!无效的设备签名”错误。

  2. 它与引导加载程序不在新的微控制器上无关。新的ATTINY45芯片不需要引导加载程序即可运行在线编程器。

  3. Uno可以对配置为1MHz或8MHz速度的ATTINY45进行编程。出厂设置很好,不需要更换保险丝。

  4. 这两个avrdude版本均可用于编程-作者站点中的6.1,而Arduino IDE中的已修改版本。

  5. AVRDUDE使用任何通过乌诺罐程序-c avrisp-c arduino或者-c stk500v1,它并不重要。

我无法回答的一个小问题是Uno程序的运行速度(Arduino I / O引脚与微控制器之间的通信速度正在刷新)。它与串口速度有关吗?事实证明,这与回答这个问题无关。其他人可以问它是否足够好奇。


2
ArduinoISP将SPI接口设置为clock / 128,因此对于16 MHz Uno,所连接的AVR的编程速度为16 MHz / 128 = 125 kbit / s。但是限制因素是串行速度,并且当设置PROG_FLICKER时,每次页面提交都会增加30毫秒的延迟。
user2973

4

我确实这个问题。如果将ATtiny设置为外部时钟,那么如果没有外部晶体,则ArduinoISP将无法对其进行编程。连接了一个16 MHz的晶体和2个电容器,效果很好。

(然后,我能够将ATtiny设置为内部时钟,卸下晶体,然后在没有晶体的情况下完美工作。)


1

从已设置的内容中添加电路板及其保险丝说明,它将起作用。

用于仅C:\Program Files\Arduino\hardware\arduino\avr\boards.txt添加和添加板描述。

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino:arduino
atmega16-8.build.variant=mega16

##############################################################
############################

我用了

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.