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のドライバを無効にする必要があったようですが、現在では特に何もせずにうまく動くようです。