BLE NanoをmbedとしてMacから使うとき、Finderでプログラムを書き込まないほうがよい

BLE Nano — RedBearLab
RedBearLabのBLE NanoはNordic nRF51822 SoCを簡単に使えるようにしたボード。話題のBLE(Bluetooth LE)が簡単かつちっちゃく使える。開発環境としては、Nordic nRF51822 BLE SDK、mbed、Arduinoが使える。今回mbedで使おうとしたのだが、肝心のプログラムの書き込み部分がうまくいかないことがあって、その解決方法を書いておく。

BLE Nanoキット

BLE Nanoキット

問題

BLE Nanoでは、というかmbedでは、"MBED"としてマウントされたボリュームに、サーバー側でコンパイルしたバイナリ(hexファイル)をコピーするとプログラムが書き込まれる。Macだと当然Finderからやると思うのだが、そうすると10回に1回程度しか成功しなかった。流れとしては以下の様な感じになった。

  1. サーバー側でコンパイル
  2. hexファイルをMBEDにコピー
  3. コピー終了後にMBEDが再マウントされる
  4. MBEDを開くと中に"SWD ERROR"と書かれた"fail.txt"が出現

解決策

Macから書き込む場合は「cp -X」コマンドでファイルをコピーするといいでしょう
プラットフォームごとのクセ | mbed

これがドンピシャだった。"cp -X" って実際なにしてるのか気になってman cpしたら、

-X Do not copy Extended Attributes (EAs) or resource forks.
cp(1) Mac OS X Manual Page

とのことで、Extended Attributes、日本語にすると拡張ファイル属性ってのが悪さしているらしい。知らんかった。ということで、ちょっとめんどくさいけど、Terminal立ち上げて "cp -X" するとあっさり成功する。

余談

Yosemiteではmbedが自動的にマウントされないという話があるが、最新版のYosemite(10.10.3)では解決済みなので、そのへんの情報は無視して大丈夫。
あとFinderでのコピーで、10回に1回成功していたのは一体なぜなのか、他のmbedでは2回に1回ぐらい成功していてその成功率の違いはなんなのか、などの謎は残ってたりする。
EAsがどういうふうにOS Xで使われているかはここが詳しい。
OS X ハッキング! (253) Leopard解体新書(4) ~拡張された拡張属性~ | マイナビニュース