2020年12月24日木曜日

[IoT] M5Stack ATOMでマイクロSDXCカードのexFATにR/Wする方法

標準ライブラリSDではR/W出来ないexFATなSDXCカード

M5Stack ATOMにはATOM GPS Development KitATOM TF-Card Reader Development Kit up to 16GBのTFカードスロットが付いた拡張モジュールがあります。これでマイクロSDカードが読み書き出来ます。

事の発端は開発中のATOM GPS Development Kitをテストしようとした時。SDメモリカードフォーマッターで初期化した64GB マイクロSDXCカードを挿して持ち出し外出先で動かそうとしたら認識しなかったのです。原因はexFATにあるとすぐにわかりました。同じカードでFAT32の時は認識していたからです。

標準サンプルプログラムにも使われ私も使っていたArduino SD LibraryはFAT16/32にしか対応しておらず最大容量32GBのマイクロSDHCまでしか使えません。製品名では16GB上限となっていますが大人の事情だと思います。

exFATに対応したSdFat Ver.2を使う

exFATに対応したSdFat Ver.2を見つけました。examples(例)のコードを見てもArduino SD Libraryと書き方が異なっていてプログラム実行時の使い方も書かれていません。お約束の近道"ググる"をしてみたもののATOMでの稼働事例は見当たりません。悪戦苦闘の末に動かすことが出来たので次節に結論から書きます。

すぐ動くコード

GitHubの私のリポジトリにsmiura/SdFat/examples/M5Atom/rename/rename.inoを作りました。これをダウンロードしてArduino IDEで開き、ライブラリ管理でM5Atom Ver.0.0.1とSdFat Ver.2.0.2をインストールすれば使えます、多分。使えなかったら不足分をインストールしてください。

使い方は、ATOMとPC等をUSBケーブルで繋いだままにしてシリアルモニタを立ち上げます。ATOMのリセットボタンが側面にあるのでそれを押して再起動するとメッセージが表示されます。Type any character to start.で止まるので画像赤矢印の送信ボタン押してください。

実行後にSDカードを他の機器で見ると/dir2/DIR3/NAME3.txtというディレクトリ(フォルダ)とファイルが出来ていて4行ほど文字が書かれているはずです。それでテストは成功しています。

examples(例)rename.inoがやっている事

具体的な内容はプログラムの81行目以降を参照なのですが、ファイル操作に必要なオープン・クローズの他にディレクトリとファイルの作成移動削除と書き込みをしています。

データロガーを作りたい場合に最低限必要なファイルへの書き込み例がわかりやすく書かれています。

なぜ動かなかったのか?

プログラムの修正箇所をGitHubの履歴差分表示を使って表示出来るようにしました。

M5Atomライブラリ固有コードの追加は容易に想像が付いたのですが、問題は冒頭のSD_FAT_TYPESD_CONFIG SdSpiConfigです。

SD_FAT_TYPEは0が指定された場合は/src/SdFatConfig.hのSDFAT_FILE_TYPEに基づくのですがそのままだと1 FAT16/FAT32が選択されてしまいます。そのため強制的に3を指定してexFATも使えるようにします。

SD_CONFIG SdSpiConfigSD_SCK_MHZ(16)を追加しています。これはSDカードにSPIモードで通信した時のクロック数でSDカードによって変わってきます。数字が大きければ高速な反面、SDカードが古いタイプだと非対応でエラーになります。
77行目のsd.begin(SD_CONFIG)で使われているので、もし想定するSDカードが幅広いようならそこで直接指定してクロックを大きい数字から片っ端から試してエラーにならないところを探るという乱暴な方法もあります。

Arduino SD Libraryではその辺の指定なくSDカードへアクセス出来るのですがどうやってるのでしょ?気になるので時間あったら調べてみたいです。

最後にSDカードは難しいよって話

今回はexFATを取り扱う事に限定して簡単に書きました。SDカードそのものの話をすると、M5Stackが提供するプログラム例AtomicTFAtomicGPSはSDカードのホットプラグを想定されていません。
あくまで例 examplesだからと思われるかもしれません。しかし、回路図を見てわかるように必要最低限の結線のみなので正規の手順で処理しようにも出来なかったりします。小型化低コスト化ゆえなので仕方のない事です。

だからこそ、こういうハードウェアのプログラムを作るのって楽しいんですけどね😉
お読みいただきありがとうございました。様々な日記ブログを執筆しています。そちらもご覧いただけると幸いです。
まったねー(^o^)

0 件のコメント:

コメントを投稿