GR-SAKURAでSDMMC動作確認

  • このエントリーをはてなブックマークに追加
  • LINEで送る

GR-SAKURAにはmicroSDカードが挿入できるスロットが実装されています。

初期状態のプロジェクトではSDカードの操作はできませんが、WEBコンパイラでsdmmcライブラリをインポートすることによって利用可能となります。
sdmmc

使用手順を簡単に書きます(説明No.とソース内コメントNo.を一致させています)。

  1. ヘッダファイルのインクルード
  2. ライブラリをインポートしたらプログラム上で<sdmmc.h>をインクルードします。

  3. SDMMCクラスの宣言
  4. FILEクラスの宣言
  5. FILEクラスはオブジェクトを登録する必要があるため、グローバル変数として利用するためにダミーでfalseを登録しています。File sdfile;のような記述をするとコンパイルエラーとなりますので注意してください。

  6. SDMMCクラスの開始
  7. グローバル領域に配置した場合、begin()は一度きりでいいのでsetup()内でいいでしょう。

  8. ファイルオープン
  9. SDMMCクラスでオープンしたファイルオブジェクトをFILEクラスに引き渡します。オープンモードにはFILE_READFILE_WRITEがあります。

  10. ファイルの確認
  11. ファイルオープン後は正常にファイルを開くことができたか確認します。失敗した場合、falseという特別なオブジェクトが帰ってきます。

  12. ファイルのクローズ
  13. ファイルを使用したら必ずclose()処理を行います。正しく書き込まれなかったり、内容が破壊されたり、開けなくなったりする可能性があります。

このプログラム、何をするものかというと、オープンモードによってファイルポインタの位置がどのように違うのかを確認するためのものです。
プレテストでseek()コマンドを実行すると、次のような結果になりました。

mmc(こちらの動作プログラムは未掲載)

FILE_WRITEモードで開いた時、初期位置は0と言われます。この時のファイルサイズは9(元々9文字入れていました)。seek()コマンドでファイルポインタを進めても、位置は変わらず0と言われました。FILE_WRITEモードではファイルポインタは移動しないのでしょうか?
一方、FILE_READモードで開いても初期位置は0と言われます。しかしこちらはseek()コマンドを実行すると、ファイルポインタが進み、位置が8に更新されました。試しに1byte読みだすと、ファイルポインタも更新されて1byte進み、9となります。

実際に上記プログラムを動作させると、下記のようになりました。

mmc2

Read Fileブロックは元々カードに書き込まれていた情報です。FILE_READモードで開くと初期位置0から始まり、read()コマンドごとに1byte読み、ファイルポインタが進んでいるとが分かります。
続いてファイルへFILE_WRITEモードで書き込みます。上書きされるのか、追記されるのかでFILE_WRITEモードのファイルポインタ初期位置が判明します。
Re-read Fileブロックで書き込んだ内容を確認すると…追記処理されていますね。FILE_WRITEモードで開くとファイルポインタは終端に来ることが確認できました。

ファイル操作を行う上で、ファイルポインタ位置は重要となります。
今回のテストではFILE_WRITEモードは追記モードとなることが分りましたので、次回以降に上書きモードが可能か検証してみたいと思います。

SNSでもご購読できます。

スポンサー リンク

コメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください