UARTでUSBメモリーが使えるということで、現在作成中の電圧・電流ロガーのオプションとして検討を進めていた。昨日実機確認を行ったが、2日間どっぷりとはまってしまったので、その内容を記載しておく。
本基板の接続方法については、いろいろとネットに転がっているので概要だけ記載しておく。
①JPについては、P_Sと記載されている部分を_Sがショートする状態とする
(つまり真ん中と右端をショートさせる)
②①のJPの下の3PINがRXD,GND,TXDとなっているので、その3PINをホスト基板に接続する。(当然のことながら、本基板のRXD→ホスト基板のTXD、本基板のTXD→ホスト基板のRXDと接続する。)
③CH376Sの入力のVILは2.0以上となっているので3.3VI/Fで問題ないが、CH376Sの出力のVOHは、VCC-0.5Vとなっているので、レベル変換を行うか5Vトレラントな端子に接続する必要がある。

(ただし、オシロで観測すると、3.3V出力になっているように思うのだが….)
④2x8PINのPINのうち、GNDと5Vをホスト基板と接続。
以上でHW的な接続は終了となる。
ソフトウェア的には、こまごまとやり取りを行う必要があるが、割り込み端子を使わなくても、UARTの受信を待つことで対応することができた。
データシート上に記載されてはいるが、コマンドを送る前に0x57,0xabを送った後に、目的のコマンドを送る必要がある。処理の流れは以下の通りで動作した。
①SET_BAUDRATEにて、目的のボーレートに設定
(コマンドの応答は、変更後のボーレートで送られてくるので注意)
②SET_USB_MODEにて、0x06モードと指定してHOSTモードとする
③DISK_CONNECTにて、接続を確認する。
④DISK_MOUNTにて、マウント処理を実行
⑤SET_FILENAMEにてファイル名を指定。
ここでドはまりしたのだが、大文字で指定しないといけない。小文字で指定してしまうと、PCで読み込もうとしたときファイルが見えているのにファイルが見つからないといわれてしまい、ファイルを開くことができない。
⑥CREATE_FILEにて新規ファイル作成
⑦BYTE_WRITEにて書き込むバイト数をCH376Sに通知する
⑧WR_REQ_DATAを実行してその応答を確認し、CH376Sが受信できるバイト数を確認後、書き込むべきデータをそのバイト数分書き込む。
(書き込むべきデータ書き込みに対する応答はないことに留意のこと)
⑨⑦のバイト数より⑧の応答のバイト数が小さい場合、再度⑧の処理を実行
⑩追加で書き込む場合は、⑦~⑨を繰り返す。
⑪ここでFILE_CLOSE処理を行えばとりあえず、2004年1月1日作成のファイルが生成されるが、タイムスタンプを現時点の物とする場合は、以下の処理を追加。
⑫DIR_INFO_READにて、0xffを指定して現在開いているファイルのFATのDIR構造を取得する。
(この処理は、今までの1バイト応答と異なり32バイト分取り込む必要があるので注意のこと)
⑬WR_OFS_DATAを使用して日付・時間を修正する。
(DIR構造については、別途検索して確認のこと)
⑭DIR_INFO_SAVEにてDIR構造を書き戻す処理をおこなう。
⑮FILE_CLOSEにて0x01を指定して、ファイル容量を正しく書き込むようにする
単純な処理でFAT32が扱えるのは便利だと思ったが、ファイル名が大文字でないといけないことに気づくのに丸2日かかってしまった。
ファイル名が8.3形式までのサポートとなるが、まあ致し方ないところ。転送レートとか攻めていないので性能の限界が不明だが、9600bpsのデフォルトの設定のまま、1秒周期で50バイト程度を書き込む程度であれば、処理自体は100ms程度で完了していたので、今回の用途としては十分な性能だと思う。


コメント