microSDを使ってみる

microSDにはSPIを使って通信する。
SDを操作するクラスとFATフォーマットに対応するクラスが必要。

まず、SDFileSystemをインポートする。
ここから、
http://mbed.org/users/simon/programs/SDFileSystem/5yj8f
Import this programをクリックする。 mbet Compilerが選択されて、選択したファイルをインポートする画面に切り替わる。SDFileSystemは「Program」で公開されているので、ライブラリとして使用するプロジェクトに読み込む。
/media/uploads/EndoTsunenobu/sdfilesystemimport1.jpg
Library」スイッチ・ボックスを選択し、
TargetPath」を目的のターゲットに切り替えるとImportできる。
インポートされると、SDFileSystemと、FATFileSystemがライブラリとしてプロジェクトに登録される。
/media/uploads/EndoTsunenobu/sdfilesystemimport2.jpg

OrangeBoardのピンアサインでの記述は以下の通りで、SDへの読み書きのディレクトリは
/sd/
(LocalFileSystemの場合は、/local/)

// MicroSD Ssytem
#include "SDFileSystem.h"
#define     SD_MOSI     p5
#define     SD_MISO     p6
#define     SD_SCLK     p7
#define     SD_CS       p8

//SDFileSystem    sd(p5, p6, p7, p13, "sd");  //  mosi, miso, sclk, cs, name
SDFileSystem  sd(SD_MOSI, SD_MISO, SD_SCLK, SD_CS,  "sd");  //  mosi, miso, sclk, cs, name  (HW modification candidate)

// File Open <ex>
FILE	*fp;

	fp = fopen( "/sd/star_bd.txt", "w" );


1 comment on microSDを使ってみる:

26 Jul 2011

ファイル名の参照とフォルダ

LocalFileSystemの注意

Hand BookによるとLocal File Systemでは、

  • サブ・ディレクトリは不可 -> MicroSDSystemでは大丈夫のようである
  • ファイルは8.3のみ
  • 書込みファイルではfseekをサポートしない

    ようなので、注意する


ファイル名を参照

opendirが使える。dirent.hをincludeする必要はない。

#include "mbed.h"

LocalFileSystem local("local");

int main(void) {
    char DIRPATH[]="/local";
    DIR *dir;
    struct dirent *entry;

    dir = opendir(DIRPATH);
    if ( dir != NULL ) {
        while ( (entry = readdir(dir)) != NULL ) {
            printf("%s\r\n", entry->d_name);
        }
    }
    closedir(dir);
    return 0;
}


MicroSDでサブ・ディレクトリを作成

上記と同じくdirect.hをincludeする必要は無い。
mkdir(arg1)
->arg1: 作成するディレクトリ名

mkdir(arg1, arg2)
->arg1: 作成するディレクトリ名
->arg2: 作成するディレクトリのパーミッション設定

// MicroSD Ssytem
#include "SDFileSystem.h"
#define     SD_MOSI     p5
#define     SD_MISO     p6
#define     SD_SCLK     p7
#define     SD_CS       p8

//SDFileSystem    sd(p5, p6, p7, p13, "sd");  //  mosi, miso, sclk, cs, name

int main() {
	FILE *fp
	mkdir("/sd/subdir", 0777);
        if ( NULL == (fp = fopen( "/sd/subdir/logData.txt", "w" )) ) {
        	error( "" );                        // Error LED brinking.
                return 1;
	}
	fprintf(fp, "Able to write file to microSD");
	fclose(fp);
}

Please log in to post comments.