2014年10月13日月曜日

arduino nano と ftdiの設定にまつわるアレコレ

Arduino nano互換機 および FTDIのUSB⇔COMポート変換チップFT232RLの使用に関するTipsです。
ちょっと変わったトラブルに遭遇&解決したので覚書。


【Arduino nano とは】
マイコン工作の敷居や面倒臭さを一気に引き下げてくれるarduinoですが
少し工作に慣れてくると、小型版のArduinoProMiniが便利に感じてきます。

特にラジコン組み込み工作にArduinoを使う場合は顕著で
ハーネスをハンダ付けしたらあとはシュリンクして機体に貼り付けたりと
お手軽さでついつい頼ってしまいます。
大体1000円前後ですし、ライト類のコントロールやら機体側ミキシング、PWMやPPMの処理なんかに大変重宝します。

ArduinoProMiniはPCとの接続にFTDI変換が必要なのが少し煩わしい(その分軽くて小さい)のですがその悩みを解決してくれるのがArduino nanoです。
Arduino pro(ATmega328p搭載)にFTDI変換チップ(FT232RL)が内蔵されているもの と考えて問題ありません。言ってみれば、「ArduinoPro+FTDI to USB」。パソコンさえあれば書換も動作も自由にできるのでお手軽さこのうえありません。

純正品は少しお高め(4000円強?)ですが、~2000円くらいで互換ボードが買えます。(Amazonなんかでも取り扱っています)

PC側にFTDI社のドライバをインストールして接続すれば、COMポートとして認識される という寸法です。
http://www.ftdichip.com/Drivers/D2XX.htm




【(互換ボードの)トラブル事例】
互換品だけ?なのかわかりませんが、挿抜のタイミングでFT232RLのハードウェアID情報がおかしくなる現象あり。どうやら、EEPROMが初期化?され、PIDの値が0000になってしまうことがある様子。

こうなるともう何度抜き差ししても認識しません。
ドライバを初期化しても、再インストールしても無理。

ドライバの設定ではVID_0403,PID_6001が正しい状態の様子(図)。
今回のケースではPID_0000となってしまい、規定のドライバが機能しなくなってしまいました。






【解決】
ネット上調べると、
この現象はどうやらFT232RLのEEPROMエラーにあるようで、FTDI社のツール
FT_PROG 2.8.2.0 - EEPROM Programming Utility
を使い、規定のPIDに書き換えてあげることで解決できるようです。

ただし、このツールを起動させるためにはFT232RLが認識できていることが前提。
でもその肝心のドライバが不適合なんだよ、という堂々巡りになってしまいます。


①とりあえず機器に対してPID_0000のチップをドライバが認識できている状態を作る。
 FTDI社のドライバをダウンロードすると、以下のファイルが展開されます。
 ダミー用のドライバとして機能させるので、正規にインストールしたドライバとはフォルダを分けておいたほうが無難です。




 この中の以下の設定ファイル(赤マーク)をいじって
 PID_0000のハードウェアを対象にドライバ認識するようエディタで改造します。
 当然正規のドライバファイルではなくなってしまいますので
 一時的なダミードライバとして使う魂胆です。
 
 <ftdiport.infの修正例 (ftdibus.infにも同様の処置を行います)>



 赤マークの部分が追加した行です。
 一行下が正規の認識情報です。(VID_0403&PID_6001)


②改造ドライバでFT232RLを強制認識させる
 ボードのUSBを抜き差しすると、現段階では不明なデバイス(もしくは何か別のデバイス)として認識されますので
 手動でドライバを指定して強制認識させます。
 ドライバのインストール(更新)画面で、先ほど書き換えたファイルが存在するフォルダを指定します。
 改造が正常に行われていれば、フォルダの指定をするだけで対応ドライバとして読み込んでくれるはずです。(下図)
 

うまく行けば、取り敢えずはUSB Serial Port等の仮想COMポートとして認識されるはずです。
















③PID_0000のIDを書き換える
 以上の処理で取り敢えずFT232RLが動作する状態になりますが
 これはあくまで改造ドライバとの組み合わせ限定となるため、汎用性がありません。
 
 今までの処理で FT_PROGにてFT232RLを認識できるようになりましたので
 通常ドライバとの組み合わせで動作できるよう、EEPROMの値を修正してあげます。
 
Scan and Parseで接続機器のEEPROMを読み込みます。
その後、product ID(PID)の値を6001に書き換えるか、プルダウンメニューでFTDI DefaultのVID/PID設定を選びます。
最後に、Program Devicesで値を書き込んで終了。
これで、いわゆる”通常の”FT232RLとして機能するようになります。













③接続テスト
 正しく書き換えが行われていれば、一度ボードを挿抜すると異なるデバイス(PIDが違うので)として認識され、ドライバのインストールが始まります。(Windows7の場合) すでに正規のドライバがインストールされている場合はそれを指定。このチップはWindows Updateにも登録があるようなので、自動的にインストールできる場合もあります。
新しいCOMポートとして認識されますので、ArduinoIDE等で通信が可能であることをチェックしてください。


【注意】
覚書ですので細かい手順がスキップされていますが
トライはAT OWN RISKでお願いします。(EEPROMの値がぶっ飛んでしまい、機器として認識しなくなるとお手上げなので・・・)





【参考URL】
FT Progの使い方
http://einstlab.web.fc2.com/PICerFT/FTDI.html

FTDI USBデバイスドライバインストール・削除に関する手順情報
http://okicar.com/index.html