【问题标题】:Can't program ATtiny2313a with Arduino. Is my chip bricked?无法使用 Arduino 对 ATtiny2313a 进行编程。我的芯片变砖了吗?
【发布时间】:2013-02-17 21:35:54
【问题描述】:

我一直在尝试将程序烧录到 ATtiny2313A-PU 中,并将我的 Arduino Uno R3 用作程序员。 首先,我尝试从 Arduino IDE 1.0.1 (Windows 7) 对其进行编程,它似乎上传了草图,但闪烁程序不起作用。 然后我找到了Michael Holachek's tutorial并按照他的指示:

  1. 已将 ArduinoISP 草图上传到我的 Arduino Uno
  2. 将电路连接到面包板上
  3. 在我的 Windows 7 上安装了 WinAVR。
  4. 下载了 Michael 的模板文件(Makefile 和 main.c)并编辑了 Makefile 以匹配我的设置(外部 8 MHz 晶体)。我使用this online fuse calculator 来获得正确的保险丝参数。
  5. 然后,在 cmd.exe 中,将目录更改为我保存 Makefile 和 main.c 并运行“make flash”的目录

生成文件

DEVICE     = attiny2313a
CLOCK      = 8000000
PROGRAMMER = -c arduino -P COM5 -b 19200 
OBJECTS    = main.o
FUSES      = -U lfuse:w:0x5e:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m


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

# Tune the lines below only if you know what you are doing:

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)

# symbolic targets:
all:    main.hex

.c.o:
    $(COMPILE) -c $< -o $@

.S.o:
    $(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.

.c.s:
    $(COMPILE) -S $< -o $@

flash:  all
    $(AVRDUDE) -U flash:w:main.hex:i

fuse:
    $(AVRDUDE) $(FUSES)

install: flash fuse

# if you use a bootloader, change the command below appropriately:
load: all
    bootloadHID main.hex

clean:
    rm -f main.hex main.elf $(OBJECTS)

# file targets:
main.elf: $(OBJECTS)
    $(COMPILE) -o main.elf $(OBJECTS)

main.hex: main.elf
    rm -f main.hex
    avr-objcopy -j .text -j .data -O ihex main.elf main.hex
# If you have an EEPROM section, you must also create a hex file for the
# EEPROM and add it to the "flash" target.

# Targets for code debugging and analysis:
disasm: main.elf
    avr-objdump -d main.elf

cpp:
    $(COMPILE) -E main.c

main.c

下面是我得到的输出:

C:\Users>cd /D D:\electronics

D:\electronics>cd nikon/mi

D:\electronics\nikon\mi>make flash
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=attiny2313a -c main.c -o main.o
main.c:6: error: stray '\342' in program
main.c:6: error: stray '\200' in program
main.c:6: error: stray '\250' in program
main.c: In function 'main':
main.c:9: error: stray '\342' in program
main.c:9: error: stray '\200' in program
main.c:9: error: stray '\250' in program
make: *** [main.o] Error 1

我怀疑我可能会把 Attiny 2313a 上的保险丝弄坏。如果是这样的话,我想我将不得不建立this AVR rescue shield。 也许 Makefile 配置不正确? 如何识别问题?如何检查芯片是否还活着?

【问题讨论】:

  • 我看不出编译器错误与芯片损坏有何关系。相反,您的代码已损坏。

标签: arduino microcontroller avr


【解决方案1】:

您在那里遇到编译错误。我会检查 main.c 的内容以了解编译器告诉您检查的内容。看起来在代码的复制和粘贴中,有些东西丢失了。还有

PORTD ^= (1 << PD6);  // toggle PD6

可以替换为

PIND = (1 << PD6);   // or _BV(PD6), since you should be using avr-libc anyway.

根据 Atmel 的数据表。

【讨论】:

  • 你说得对,波场。我在 main.c 中发现了两个奇怪的字符(如 unicode 中方符号)。我认为他们没有让我将 main.c 的代码正确复制到这个论坛。我只是无法获得正确的格式。这就是为什么没有将代码添加到我原来的问题中的原因。
  • 我现在将main.c的截图添加到原帖中。因此,删除这两个字符后,输出发生了很大变化。现在好像可以了,但是还有一个问题——avrdude在它的配置文件中找不到我的芯片2313a。 avrdude: AVR Part "attiny2313a" not found. 我想我需要编辑 avrdude.conf。我说的对吗?
【解决方案2】:

好吧,我搜索了更多,发现最常见的解决方案是,当芯片相同但具有不同的后缀(如 attiny2313 和 attiny2313a)时,使用 -F 键覆盖签名检查。 所以,我在 Makefile DEVICE = attiny2313 -F 中添加了密钥,我的 attiny2313a 编程成功! TRON,感谢您为我指明 main.c 的方向!不幸的是,我不能赞成你的回答,因为我的声誉是 11。 我还是想知道那些方形字符是怎么到达那里的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多