自作電子小物/TIPS/簡易SDカードサポート/PIC18
自作電子小物/TIPS/簡易SDカードサポート/PIC18
マイクロチップ社のマイクロコントローラPIC18シリーズ向けの、最低限の機能に絞ったSDカードの入出力サブルーチンです。FATファイルシステムを含んだ機能を持っていますので、これだけでSDカードへのファイル読み書きが出来る様になります。PIC18F2550,PIC18F4550用に作りましたが、プログラムメモリ容量が32kB,RAM容量が1kB以上あるPIC18であれば、そのまま動くと思います。
通常は、Microchip社が標準ライブラリを提供していますので、特に理由がなければそっちをお勧めします。ただ、必要なメモリ容量の制約があり、使えるデバイスが限られます。特に旧型のPICでは使えない事が多いです。(メモリ容量に関してはアプリケーションノートAN1045参照)どうしても動かしたい場合、使用メモリ量を減らしたこのライブラリが使えるかもしれません。
Easy SDcard FAT Library for PIC18
2010年1月22日
主な仕様
対応CPU: Microchip社PIC18F2550, PIC18F4550
PIC18F25J50, PIC18F26J50, PIC18F45J50, PIC18F46J50 (2011.3.21追加)
開発環境: MPLAB IDE 8.36, C18 C Compiler v3.33(academic version)
使用プログラムメモリ量: 読込みのみ=11.2k、書込み=15.4k、最大=18.7kバイト/最適化なし
使用データメモリ量: 668バイト
記録フォーマット: マスタブートレコードの付いたFAT12とFAT16ファイルシステム(※1)
扱えるファイルはルートディレクトリ直下のショートファイル名(8.3)のみ
API (アプリケーションプログラムインタフェース)
(char *)は文字列リテラルを直接指定すると正しく動きません。ROMにバインドされないようにして下さい。
注意:
※1 基本的には、SDカードの規格を決めているSDアソシエーションが提供するユーティリティ・SDフォーマッターをお使い頂き、FAT16で初期化して下さい。Windows用、Mac用の両方があります。Windows自体が持つフォーマット機能を使用する場合は、FAT32にならない様に注意して下さい。Mac OS Xの付属のディスクユーティリティは、FAT16でフォーマットが出来ないようです。2GB以下のSDカード購入時のフォーマットはFAT16になっている事がほとんどのようなのでそのまま使えると思います。
ダウンロード
関連ソース全てとサンプルプログラムが入ったMPLABプロジェクトファイル
sd_config.hでSD_OPT_STRING_Hオプションを有効にした場合、既存ファイルをオープン出来ない事がある不具合を対応しました。ファイルにアーカイブ属性が付いていたりすると発生します。
ソースコードはPSoC1,PIC18,AVR版で同一です。#defineでプロセッサの違いを認識し、適したコードがコンパイルされるようになっています。
テスト回路のEagleファイル
サンプルの動かし方
・回路は下の物を用意。
・ダウンロードしたzipファイルを、適当なディレクトリに展開し、MPLABでプロジェクトとして開く。
・プロジェクトメニューからビルドして、デバイスへのプログラムの書込みを行う。(エラーになる場合*1)
・電源3.3Vを与える。(PIC18LF2550が必要ですが、CPUクロックを下げると大体動きます)
・LEDが最初全て点灯し、処理が進むにつれ消灯位置がずれていきます。
*1: メッセージ“usb_common.h:367:syntax error”が出る場合は、ビルドオプションのインクルードパスの定義に “c:\MCC18\h” と ”c:\Microchip Solutions\Microchip\include” をこの順になる様に登録すると回避できます。順番が重要です。
ユーザアプリケーションプログラムでの使い方
(1)必要となるソース・ヘッダファイルをプロジェクトディレクトリにコピーしておき、プロジェクトメニューから、このソースファイルを全部ADDします。ソースツリーに追加表示されます。
(2)sd_config.hとdelay.hを修正。必要なオプションの#defineを有効/無効にする。
(3)以上でビルド出来る様になる。
ソースファイル
sd_L1.c
sd_L2.c
sd_L3.c
sd_common.c
delay.c
ヘッダファイル
sd_config.h
sd.h
sd_L1.h
sd_L2.h
sd_L3.h
sd_common.h
delay.h
無事動いた様に見えても、たまに誤動作する事があるようでしたら、まず以下の点を確認して下さい。
・ファイルシステムが破壊されている。Windowsのファイルプロパティのツールで修復して見て下さい。壊れていても何もメッセージは出ませんが修復されますので、再現するか確認して下さい。壊した原因が他にあるはずです。根源となったトラブルを探す必要が有ります。
・電源ラインの能力不足。SDカードの種類によっては、書込み時100mA級の電流が流れる事があります。これで、瞬間電源電圧が大きく下がる場合、SDカードが誤動作するか、マイコンがBORブラウンアウトリセットが発生するケースです。
・スタックオーバフローの可能性。使用メモリ量を減らすと安定する場合このケースだと思われます。
ライブラリ内部について
PSoC1版をご参照下さい。