問題
YosemiteでArduinoが動かないという話を聞いたので、確かめた。
手元にあったArduino UNO R3とLeonardoでは問題なく、FTDIチップを使っているものが問題らしい。
Duemilanoveとかは手元に見当らないので、FTDI basicとかAdafruitのFTDI friendsで試すと/dev/cu.usbserial* は認識できているし、シリアル通信は問題なかった。これらをArduino Pro(ATmega168,16MHz,5V)につないでBlinkをアップロードしようとすると
avrdude: stk500_recv(): programmer is not responding
のようなエラーが出た。
この手の問題はMavericksの時点でも報告されていて、Yosemiteだけの問題ではなさそうである。
http://forum.arduino.cc/index.php?topic=198539.0
MavericksではAppleFTDIを不可にしてFDTIのドライバをインストールすればOKだったはずだが、Yosemiteではsignature云々でインストールしただけでは動かないようだ。
/var/log/syslogに
ERROR: invalid signature for com.FTDI.driver.FTDIUSBSerialDriver, will not load
というエラーが記録されていた。
signature云々で検索して見付けた以下のサイトがヒントになった。
http://ewen.mcneill.gen.nz/blog/entry/2014-05-25-os-x-mavericks-usb-serial/
解決
AppleUSBFTDIを利用不可にする
使われているドライバの確認
kextstat | grep FTDI
とすると
com.apple.driver.AppleUSBFTDI
が表示され、AppleUSBFTDIが使われているので、これを利用不可にする。
cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/
sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled
sudo touch /System/Library/Extensions/
とした後、再起動する。
FTDIのVCPドライバを使う
FTDIからVCPドライバをダウンロードする。
http://www.ftdichip.com/Drivers/VCP.htm
x86(64-bit) 2.2.18 へのリンク
http://www.ftdichip.com/Drivers/VCP/MacOSX/FTDIUSBSerialDriver_v2_2_18.dmg
これを開くには「セキュリティとプライバシー」の「ダウンロードしたアプリケーションの実行許可」で「すべてのアプリケーションを許可」する必要があるが、セキュリティを下げてしまうので、インストールしたら元に戻す。
Yosemiteではこの後、実行可能にしてドライバをロードする必要がある。
cd /System/Library/Extensions
sudo chmod -R 755 FTDIUSBSerialDriver.kext
sudo chown -R root:wheel FTDIUSBSerialDriver.kext #追記
sudo kextload FTDIUSBSerialDriver.kext
有効なドライバを確認すると
kextstat | grep FTDI
com.FTDI.driver.FTDIUSBSerialDriver (2.2.18)
が表示される。
これでArduinoでも問題なく使えるようになった。
(avrdude -c arduino -p atmega328p -P /dev/cu.usbserial* が正常に動く)
まとめ
通常のシリアル通信のみの利用であれば、AppleのドライバのままでOK。
avrdudeでFTDIをISPとして使うような場合にタイミングの問題か何かで失敗する。これはYosemite固有ではなく、Mavericksでも見られた問題のようだ。最新のMavericksでどうなっているかは調べていない。
また、Arduino固有でもなくavrdudeを単純なシリアル通信以外で使うときに生じるようだ。
FTDI社では永くMac用のドライバを更新していないので、FTDIの機種を使っていて余計な苦労をしたくない人はAppleのFTDIドライバが正常になるまでOSアップデートを待ったほうがよいかも。