2014/10/05

Arduino:stk500_getsync(): not in sync

燒錄時,若看到錯誤訊息「avrdude: stk500_getsync(): not in sync: resp=0x00」,雖然知道這代表著電腦端的燒錄程式avrdude不能與微控制器內的bootloader進行溝通,但卻無法知曉錯誤的源頭在哪,因為可能出錯的地方太多了。

底下列出可能導致此錯誤的原因,以及解決辦法:

原因:「工具-板子(Tools-Board)」與「工具-序列埠(Tools-Serial Port)」沒選好
辦法:確認你的板子到底是哪一塊,確認它所連接的序列埠是哪一個,重新設定正確的值

原因:序列埠被佔用了
辦法:關閉佔用序列埠的軟體,或電腦重開機

原因:驅動程式壞了、沒裝好
辦法:重新安裝驅動程式

原因:零件影響了燒錄所需的線路,譬如Uno板燒錄時須經由腳位0與1的線路
辦法:燒錄時拔除相關接線、暫時先拔掉擴充板

原因:舊板子與某些較小型的板子,需要自己按板子上的Reset鍵
辦法:觀看avrdude燒錄時輸出的訊息,在適當的時機按下Reset鍵;多試幾次,嘗試在不同的時間點按下

原因:若是自己買「USB轉Serial介面」模組再加上微控制器晶片,有可能TX與RX接反了
辦法:反過來接試試看

原因:微控制器裡的bootloader壞了,或根本沒有bootloader
辦法:找個ISP燒錄器,重新燒錄bootloader

原因:不明
辦法:電腦重開機

原因:不明
辦法:重新啟動Arduino IDE

原因:不明
辦法:重新拔插USB連接線

原因:不明
辦法:換插別的USB埠

原因:不明
辦法:改用USB集線器或改為直接插電腦的USB埠

原因:不明
辦法:換條USB線

11 comments:

  1. 也有可能是沒有選到正確的板子型號(剛剛發生哈哈)

    ReplyDelete
    Replies
    1. thanks,這點我也有寫上。

      Delete
  2. 不知是否有關, 在測試 serial.write 後, 常發生問題. 正學習如何改用其他腳模擬 serial

    ReplyDelete
  3. 我的Arduino UNO 也出現過類似的問題。後來花50元,買了一顆新的IC有含boot loader. 板子就恢復正常。

    ReplyDelete
  4. 感謝,我換了Usb port就沒問題了

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. 葉大您好,
    昨天在燒錄板子(新的)的時候一開始都好好的
    後來按了一下reset鍵不知道還動到什麼
    之後就陷入無法上傳的窘境QQ

    以上您列出的解決方法我都試過了,換了一台電腦使用也是無法上傳,估計問題是出在板子上面
    請問您提到的"微控制器裡的bootloader壞掉"的可能原因有哪些?

    先謝謝您了

    ReplyDelete
    Replies
    1. 既然一開始是好的,代表bootloader是好的,
      以一般方式燒錄的話,應該很難弄壞bootloader。

      原因:微控制器裡的bootloader壞了,或根本沒有bootloader
      辦法:找個ISP燒錄器,重新燒錄bootloader

      原因的話,晦暗不明,不然我就寫上去了。
      有可能使用時,電壓電流不穩,導致微控制器執行的指令錯了,本來應該讀取、卻去寫入bootloader,導致毀損。
      其他原因,都離我太遠,自己看看囉
      http://forum.arduino.cc/index.php?topic=5863.0

      Delete
    2. 謝謝你的回覆
      還是白思不解,為什麼原本還好好的瞬間就不能用了

      我再研究研究tks!

      Delete
    3. 找個ISP燒錄器,重新燒錄bootloader。
      試試囉。

      Delete