パソコンからArduino経由でSDにファイルを書いてみる2 完結編
とりあえず完成したのでまとめようと思います
ハード面でSDカードの耐圧を越えて使用しているため
真似する際はレベルシフト回路を使ってください
●概要
パソコンとSDカードをUSBで接続し、かつ専用ソフトを中継してデータをSDに送信する。書き込み制限のあるパソコンでもSD書き込みができ、Autorun系のワーム被害のリスクも低いはず。
●仕様
通信方式:シリアルポート(Serial Port Driver)
対応SD:2GByte ~ 32GByte
書き込み速度:4800, 9600, 57600, 115200bps
●転送
VB.NETで作成しています(パソコンからArduino経由でSDにファイルを書いてみる1 - 工作の2S(Seiri/Seiton)でも説明があります)
SDに書き込む機能だけです
VBではSerialPortクラス
ArduinoではSerialクラスを使用しています
Arduinoは正常に処理できなかった場合、PCに対しNACKを返します。ファイル処理途中であればそのファイルを削除します
PCはNACKを受信すると処理を中断しメッセージ表示します
タイムアウトは5秒設定されています
PCは接続後、データ送信時以外に定期的にPINGコマンドを発行し応答ない場合は切断処理を実行します
●使ってみる
htm形式の某ソフトのヘルプをSDに転送し開けることを確認しています
(途中移るハードはTX, RXと通信のLEDがチカってるよって意味です)
16kByteのファイルなので一瞬でした。1MByteくらいになると数10分は待つことになるでしょうね
●苦労したところ
Arduinoにデバッガ機能がないので、どこで通信途切れてるのか見えないのが大変だった。ステップ毎つどログ出力する形でなんとか進めることができた。
つながるまでが一番苦労したた
SDのホットプラグ機能やPCとのホットプラグを安定して動作させる方式を何度も作り直した。今でも完璧かどうかは怪しいがおおむねOK
SDカードのFATが8.3方式*1のファイル命名で8文字以上のファイルが作成できない(?)