2013年5月8日 星期三

Arduino上傳程式的運作方式

前一陣子使用 AVR / ATmega8 自製了一片 Arduino 板子;在燒錄 bootloader 之後,嘗試上傳程式時卻發現整個 Arduino IDE 停頓住,完全不清楚是發生什麼狀況。因為是使用 HIN232 當作 RS-232 通訊介面,不像原始 Arduino UNO 使用 AVR microcontroller,可以直接連接 USB,所以一開始我一直以為是 UART 通訊出了什麼問題;不過在嘗試很多失敗的上傳之後,有一次還是無奈地看著 Arduino IDE 的上傳 bar 停止在最後一小段,這時卻莫名其妙地自己去按下 RESET 鍵.......神蹟出現了!那條 bar 居然順順地跑到了終點,完成了程式上傳的程序。原來這個 RESET 是控制程序上傳的其中一個機制,於是好奇地拿出原始的 Arduino UNO,使用示波器勾了 RESET 及 RS-232 RX 這兩個訊號。


在 Arduino 上傳程序裡出現三次 RESET,訊號間隔約 100ms;在第三個 RESET 之後約 980ms (大概就是一秒鐘),程式開始從 PC 端上傳至 Arduino UNO。因此可以假設 Arduino 板子上的 bootloader 應該只有在 power ON / RESET 一開始的短時間,可以進行程式上傳的工作;這個短暫時間過去後,AVR 的控制權就會從 bootloader 移交到上傳的程式去,就算 AVR 的 Flash memory 內只有 bootloader,也會轉移到上傳區的定址位址。

沒有留言:

張貼留言