工作の2S(Seiri/Seiton)

工作やプログラムでやったことをまとめていきます

パソコンからArduino経由でSDにファイルを書いてみる2 完結編

とりあえず完成したのでまとめようと思います

ハード面でSDカードの耐圧を越えて使用しているため

真似する際はレベルシフト回路を使ってください

●概要

パソコンとSDカードをUSBで接続し、かつ専用ソフトを中継してデータをSDに送信する。書き込み制限のあるパソコンでもSD書き込みができ、Autorun系のワーム被害のリスクも低いはず。

 

●仕様

通信方式:シリアルポート(Serial Port Driver)

対応SD:2GByte ~ 32GByte

書き込み速度:4800, 9600, 57600, 115200bps

f:id:kt-marshal:20160814001256j:plain

 

f:id:kt-marshal:20160814003818j:plain

●転送

VB.NETで作成しています(パソコンからArduino経由でSDにファイルを書いてみる1 - 工作の2S(Seiri/Seiton)でも説明があります)

 

SDに書き込む機能だけです

VBではSerialPortクラス

ArduinoではSerialクラスを使用しています

 

f:id:kt-marshal:20160814001303j:plain

Arduinoは正常に処理できなかった場合、PCに対しNACKを返します。ファイル処理途中であればそのファイルを削除します

PCはNACKを受信すると処理を中断しメッセージ表示します

タイムアウトは5秒設定されています

PCは接続後、データ送信時以外に定期的にPINGコマンドを発行し応答ない場合は切断処理を実行します

●使ってみる

htm形式の某ソフトのヘルプをSDに転送し開けることを確認しています

(途中移るハードはTX, RXと通信のLEDがチカってるよって意味です)

www.youtube.com

16kByteのファイルなので一瞬でした。1MByteくらいになると数10分は待つことになるでしょうね 

 

 

●苦労したところ

Arduinoにデバッガ機能がないので、どこで通信途切れてるのか見えないのが大変だった。ステップ毎つどログ出力する形でなんとか進めることができた。

つながるまでが一番苦労したた

 

SDのホットプラグ機能やPCとのホットプラグを安定して動作させる方式を何度も作り直した。今でも完璧かどうかは怪しいがおおむねOK

 

SDカードのFATが8.3方式*1のファイル命名で8文字以上のファイルが作成できない(?)

 

VBArduinoのメインプログラムと実行ファイルが入っています

データ転送ツール.zip - Google ドライブ