PICマイコンからSDカードへのファイル書き込みハム三昧リタイヤした後の再就職組ですが、ハム(アマチュア無線)活動を再開しました。趣味で得た情報を公開します。各記事はカテゴリ毎にまとめられています。カテゴリ記事全体を表示したい場合、各記事のトップにあるカテゴリ名もしくは、右側カテゴリ欄のカテゴリ名をクリックして下さい。古い記事も必要により更新しています。結果が逆転している場合もあります。(木)PICマイコンからSDカードへのファイル書き込み<カテゴリー:PICマイコン>LCD表示のアンテナアナライザーの自作の中で、周波数対SWRのグラフを描かせるところまで成功しました。そこで、このグラフをPCに取り込めないか、試行錯誤しておりました。PICマイコンでSDカードにファイルを書き込む事が出来るようになりました。数行のテキストデータしかないファイルを書き込んだだけで、グラフデータは未完成ですが、ここまで、出来ると、後は時間の問題となります。今回は、PICマイコンからFAT32のファイルシステムでフォーマットされたSDカードにテキストファイルを書き込む方法を紹介します。アンテナアナライザーのハードに秋月で売っているSDカードソケットを接続した、単純な回路となっております。検討するソフトもこのSDカードの部分のみで、LCD表示は実装していません。秋月から「SDカードスロットDIP化モジュール」という名前のソケットを買ってきて、これを配線図のごとく、マイコンの空きピンに接続します。PIC24FJ128GB106はi/o設定が自由にできますので、このような場合、非常に便利です。左の画像のごとく実装しました。この状態でSDカードをドライブするソフトはMicrochipが無償で提供しているfileioというアプリケーションを使います。このアプリの説明を読んでいると、私のようにC言語のポインターもまともに扱えない者でもなんとかPCで読めるファイルを書き込めるかも知れないと思うようになりました。これが間違いの始まりで、検討を開始してからすでに1か月。ことで、FAT32のファイルシステム上に自作のファイルを書き込む事に成功しました。上はエクスプロラーでSDカード内のファイルを表示させたものです。name.txtはデモプログラムが見本として作成したファイルです。SWR12345.txtは私が作ったファイルです。いずれも2行、20文字くらいのファイルですが、ファイルの中身は、これから好きに変更できます。ここまで出来るまでの工程を以下説明します。MicrochipのサイトからMLAと言われるアプリケーションファイルをダウンロードし、デフォルトの設定のままインストールします。私がインストールしたファイル名は以下の名前でした。読み込むと、同名のプロジェクトがオープンします。このプロジェクトができましたら、マイコンの品種設定とi/oの設定を書き換える事により簡単にデモプログラムが動作します。・・・・とはなりませんでした。上のダイアログはMPLABXにてプロジュクトをオープンした時の画面ですが、上の方にICの品種を指定するランがありますので、実際に使用しているICファミリーを選択します。私の場合、実際に使用しているICはPIC24FJ128GB106ですので、ファミリー名はpic24fj256gb110となります。使用可能なICのファミリー名が左側の「exp16」フォルダーの下に表示されていますので、確認できます。ここにリストされた以外のICで、このデモソフトが動作するかは不明です。リンクされたファイルには同じ名前で中身の違うものがいくつかあります。該当しますので、他のホルダーでプロジェクトを構築する場合は、一度デモプロジェクトをオープンし、そのとき表示されるファイルをコピーして他のホルダー移すことで間違いを防ぐ事ができます。事実、最初、リンクを頼りにファイルをコピーしてきて、独自のホルダーに集めてbuildをかけたところ、エラー続出で困り果てた事がありました。いう名前にし、のちのち間違わないようにした上で、独自のフォルダーへ移動させ、オリジナルのファイルは元の場所にそのまま残しました。lfn(ロングファイル名)を選んだのに、リンクされたヘッダーファイルはlfnなしの普通のfileio.h。これをハンドでfileio_lfn.hに入れ換えました。ソースファイルもlfnではなかったような記憶ですが確かでありません。中の一部を以下のように書き換えました。FWDTEN=OFFただし、このままでは16MHzにしかなりませんでしたので、main()の中で、以下を追加し32MHzにしました。0x0000;また、青色の設定は後日、追加したものです。このPICマイコンはデフォルトでウォッチドッグタイマーがONになっており、約2分20秒でリセットがかかる原因になっていました。これが時々暴走する原因と解るまで3週間くらいかかりました。i/oの設定も変更しました。1;//プルアップはハードで行っていますので、この行は不要です。0;}ここまで修正してBuildをかけてエラーが出なかったら、成功です。PCでFAT32にフォーマットしたSDカードを用意し、マイコンにプログラムを書き込んでもファイルは出来ません。定義の部分を変更します。DEMO_STATE;DEMO_STATE_NO_MEDIA=0という記述が最初の行にありますので、これを上記のごとく2行目に移し、"=0"の文字を削除します。DEMO_STATE_MEDIA_DETECTEDを一番上にして、"=0"を追記しておきます。これは、Maicrochipのデモ機はCDが0の時ノーメディアなのに対して、秋月のソケットはCDが1のときノーメディアになっている為です。以上の手直しでデモ用のファイルがSDカード内に出来るようになりました。次に自作のファイル名でファイル作成にトライです。ところが、出来たファイル名は文字化けして読めない上、ファイルの中身も空です。1から始まる整数です。これをファイルに書き込めるようにASCII変換してファイル名としたのですが、うまく行きません。調べて、判った事は、FAT32のファイル名はASCIIコードではないということでした。ファイル名はutf-16という16bitの文字でエンコードされていました。utf-16の変換ルーチンを作る必要がありました。ASCIIコードの文字だけに限れば、8bitのASCIIコードの上部に0x00のコードを加えて、16bitにするだけなので、変換ルーチンは私でも作れましたが、日本語のファイル名は使えません。このようにして、「SWR12345」のようなファイル名を付けたテキストファイルを作る事が出来るようになりました。このファイル名の数字の部分を連番のファイル名にし、拡張子をcsvにするとOKとなります。SDカードは、128Mと8Gの物をテストしましたが、いずれもFAT32でフォーマットしてあれば問題なく使う事ができました。exFATでフォーマットしたSDカードの場合、エラーがでます。この小さなデモファイルを作る為に必要なROM容量は約44.9Kバイトです。これから実験しようと考えているなら、ROM容量64Kでは心細く、最低でも128K品が必要でしょう。ところで、出来たファイルにちゃんとタイムスタンプが付いています。やって時間を計っているのでしょうかね。マイコンボードは使わないとき電源OFFなのですが。このSDカードドライブ機能をアンテナアナライザーに実装する事にします。道具RSS(XML)フィード。