2015年10月10日 星期六

[Arduino Uno當作Atmel ISP燒錄器] - 燒錄失敗解之一


最近與朋友一起做了一塊板子,用的是Atmel32U4作為MCU,想用順手的Arduino IDE作為開發環境,只是光是燒錄測試碼就遭遇小困難…

首先參考葉難的將Arduino Uno當做一台ISP線上燒錄器,燒錄bootloader或sketch到麵包板上的ATmega328P-PU晶片,按部就班的做

基本上有幾件事要確實做好:

  • 從燒錄器(Arduino UNO)到目標板(Atmel32U4)的硬體線路,共計有
    • MOSI
    • MISO
    • SCK
    • RESET
    • 5V
    • GND
  • 燒錄器本身是否準備完成?
    • 打開範例->ArduinoISP,燒錄到燒錄器內(Arduino UNO)
  • 最後就是將bootloader燒進目標板(Atmel32U4)
    • 工具->燒錄bootloader


此時若 Arduino IDE->檔案->偏好設定,顯示詳細輸出皆勾選的話,可能會得到錯誤訊息:

燒錄bootloader時發生錯誤。

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x00ff00
avrdude: Expected signature for ATmega32U4 is 1E 95 87

         Double check chip, or use -F to override this check.

avrdude done.  Thank you.


signature指的是ATmega32U4晶片的辨識ID,顯然辨識錯誤

在AVRFreak找到可能解法之一,需要在下avrdude命令時加上 -B8選項(-B 與 8之間沒有空格!!) ,使得燒錄時的運作頻率不要那麼快。

加上此選項進行燒錄需要在命令列執行,我是在Windows下用Git shell:

$avrdude -CC:\Program Files (x86)\Arduino/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cstk500v1 -PCOM7 -B8 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xcb:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m


This method worked for me :).


參考資料:
avrdude reference 


6 則留言:

  1. 看不懂-B8 要下載那?可以詳細告知嗎?

    回覆刪除
    回覆
    1. 補在內文裡嚕,其實-B8只是一個選項 加在命令的任何位置都可以 只要用空格跟前後選項隔開就好

      刪除
  2. 請問一下:如果我在 命令提示字元 底下下指令,也是直接下這行嗎?

    回覆刪除
    回覆
    1. 可能不是 avrdude前面可能要帶絕對路徑

      刪除
  3. 感謝你的文章解決了我的問題.我的狀況是燒錄Atmega32u4用8MHz晶振,結果
    avrdude: Device signature = 0xff03ff
    avrdude: Expected signature for ATmega32U4 is 1E 95 87
    Double check chip, or use -F to override this check.
    用16MHz晶振就OK,看了你的文章加了-B8 用8MHz晶振就OK

    avrdude -c usbasp -p ATmega32u4 -B8 -U flash:w:lilypad.hex -U lfuse:w:0xff:m -U hfuse:w:0xd8:m -U efuse:w:0xce:m

    謝謝

    回覆刪除