2012年4月15日 星期日

Arduino 1.0 的 ArduinoISP 無法運作的解法

Arduino-0022 的 ArduinoISP 我已經用了很久都沒碰到問題,在升級到 Arduino 1.0 後,我發現當我用 Arduino 1.0 上傳 ArduinoISP 後,居然沒辦法燒錄 target board,每次都會出現這個錯誤訊息:

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: stk500_cmd(): programmer is out of sync

image

如果切回 Arduino-0022 然後重新上傳 ArduinoISP,就又可以燒錄 target board。

比較 Arduino-1.0 和 Arduino-0022 兩個版本的 ArduinoISP,程式碼是一樣的,所以很可能是 Arduino-1.0 的 library 做了什麼改變導致 ArduinoISP 無法正常運作。果然,Issue 661 提到了這個問題,正是因為 Arduino-1.0 HardwareSerial.cpp 把 SERIAL_BUFFER_SIZE 從原來的 128 改成 64,導致 ArduinoISP 發生 buffer overflow。

權宜之計

要修正問題,一個方法是把 HardwareSerial.cpp 的 SERIAL_BUFFER_SIZE 改回 128,不過這樣會影響到所有的 sketches。權宜之計是修改 Arduino-1.0 的 的 ArduinoISP 程式,只要把 heartbeat() function 的 delay(40) 改成 delay(20) 就可以了:

image

參考資料

0 意見: