Arduino

Arduino Pro Miniでスケッチアップロード時のAuto Resetが最初の1回しか動かない

More than 1 year has passed since last update.

MacOSX上でArduino IDEからスケッチのアップロードをすると、USBケーブル接続直後の1回目のみ成功し、それ以降は失敗してしまう状況に悩まされていました。

どうやらApple純正FTDIドライバの問題だったようで、FTDI社のドライバを別途インストールしたところ解決しました。

環境

  • Mac OS X 10.9.5 (Mavericks)
  • Arduino IDE 1.6.5
  • Arduino Pro Mini互換ボード
  • FTDI FT232RLボード

現象

  • FT232とPro Miniは下記のように接続
    • DTR - DTR
    • RX - TX0
    • TX - RX1
    • VCC - VCC
    • CTS - GND
    • GND - GND
  • Arduino IDEからスケッチのアップロードをすると、USBケーブル接続直後の1回目のみ成功
  • その後2回目のアップロードをすると下記エラーが出て書き込みに失敗する
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
(以下略)

調査

テスターを当ててみたところ、初回書き込み時にDTRがHIGHからLOWに落ちてATmega328Pがリセットされるものの、その後ずっとLOWのままになっているようで、2回目以降の書き込みではリセットがかからないようでした。

また、DTRの代わりにRSTを接続して試してみたものの、やはり同じ状況でした。

同じ構成のままWindows7環境で確認してみたところ、こちらは何度でもアップロードできました。

つまり、MacOSX同梱のFTDIドライバが怪しいのでは…?

FTDI社のドライバをインストール

というわけでFTDI社純正ドライバをインストールしてみました。

FTDI社のVCPドライバ ダウンロードページから「Mac OS X 10.9 and above (64 bit)」をダウンロードします。Mavericks(10.9)以降ということなので、おそらくYosemiteにも対応していると思います。

ドライバをインストールして再起動すると、FTDI社のドライバが有効になります。FT232RLモジュールをMacにつないだ状態で下記コマンドを打つと、2つのドライバの情報が表示されます。

$ kextstat | grep -i ftdi
  131    0 0xffffff7f80f08000 0x7000     0x7000     com.apple.driver.AppleUSBFTDI (1.0.1b3) <116 36 5 4 3>
  132    0 0xffffff7f821a6000 0x7000     0x7000     com.FTDI.driver.FTDIUSBSerialDriver (2.3) <116 36 5 4 3 1>

この状況ではFTDI社ドライバが有効になるようで、無事Auto Resetが何度でもできるようになりました。

他の方の記事を見ると、以前は明示的にAppleのドライバを無効にする必要があったようですが、現在では特に何もせずにうまく動くようです。