PR 記事には広告が含まれています
スポンサーリンク
Translate

mbed LPC1114でSDFileSystemが使えないときの対処法

スポンサーリンク

image
こんにちはコハペペです。今日mbedマイコン(LPC1114FN28)でSDカードにアクセスするプログラムを作ったら、うまく動きませんでした。いろいろやってみるとmbedライブラリのリビジョンを古いものに変更することで、対処することができました。その方法の紹介です。

プログラムの作り方と対処の手順は

  1. プログラムの新規作成
  2. SDFileSystemのインポート
  3. プログラムの作成
  4. mbedライブラリーのリビジョンの変更(137へ)

になります。順番ご紹介していきます。

1.まずは、mbedの開発環境の画面で左上にある「新規」をクリックしてプログラムを新規作成します。ここではテストとして「mbed_SDtest」というプログラム名にしておきます。
sdtest01

2.SDFileSystemライブラリーをインポートします。ここのSDFileSystemのライブラリーのページを開き、右にある「import into compiler」をクリックします。
sdtest02
どのプログラムにインポートするか聞かれるので、先ほど新規作成した「mbed_SDtest」を選択して「Import」ボタンをクリックします。
sdtest03

3.SDファイルを開くテストプログラムを書きます。プログラムは以下の通りです。
#include "mbed.h"
#include "SDFileSystem.h"
 
//SDFileSystem name(mosi, miso, sck, cs, mount);
SDFileSystem sd( dp2, dp1, dp6, dp4, "sd");
Serial pc(USBTX, USBRX);

int main() {
    pc.printf("Hello World!\n");  

    FILE *fp = fopen("/sd/test.txt", "r"); //ファイルを開く
    if(fp == NULL) {
        pc.printf("Could not open\n");
    }
    pc.printf("File Pointer fp is %d\n",fp);
    fclose(fp); //ファイルを閉じる
    free(fp);   //解放
}

このプログラムは、SDカードのファイル(test.txt)をオープンして、openで得られたファイルポンター(fp)の値をUSBシリアル経由で表示します。オープンできればそのアドレスの値が、オープンできなければNULLである0が表示されるという簡単なプログラムです。
SDカードとマイコンの配線は

  • SDカードのMOSI LPC1114の2番ピン
  • SDカードのMISO LPC1114の1番ピン
  • SDカードのSCK LPC1114の6番ピン
  • SDカードのCS LPC1114の4番ピン

です。

sdtest04
コンパイルすると、何やらFileSystemで警告が出ています。コンパイルは成功してしまいbinファイルがダウンロードできます。このbinファイルをマイコンに書き込んで実行してみます。
sdtest05
シリアルモニターで確認すると、ファイルがオープンできません。

4.mbedライブラリーのリビジョンを変更する
mbedはコンパイルの時に、mbedライブラリも一緒にコンパイルされます。このmbedライブラリは新しいマイコンへの対応やバグ修正などで、月に2,3回程度更新されているようです。今のリビジョン(バージョン)が何番なのか調べてみましょう。
sdtest06
新規作成した「mbed_SDtest」のツリーの中の「mbed」をクリックします。そして右側の「リビジョン」をクリックしてください。
sdtest07
今のリビジョンは144です。144回もバージョンアップしているんですね。mbedの便利なところは、このリビジョンを過去の物に変更できるんです。好きなリビジョンの行をクリックして、「切り替え」をクリックします。
sdtest08
SDカードに正しくアクセスできるのは、リビジョン番号137でした。138から144はだめでした。なので、137の行でクリックして「切り替え」をクリックします。これで、mbedライブラリーが少し前のバージョンに切り替わりました。コンパイルしてみましょう。
sdtest09
警告がなくコンパイルができました。mbedマイコンに書き込んでプログラムを実行してみます。
sdtest10
ファイルポインターの値が0(NULL)ではなくなり、ファイルがオープンできました。

最近のmbedライブラリではSDカードへのアクセスにバグがあるようですね。mbedライブラリーのリビジョンを過去の物に変更するとこで、対処できることがわかりました。
kohacraftで販売している、SDカードを使った「ドットマトリクスLED実験セット」や「電子ペーパー実験セット」では、サンプルプログラムをインポートしてコンパイルしたときは、このような問題は起きません。これは弊社でサンプルプログラムを作った時のmbedライブラリーが使われるためです。もし、サンプルプログラムを参考に、自分でプログラムを新規作成した時には、最新のmbedライブラリーが使われSDカードにアクセスできないので、mbedライブラリのリビジョン変更をお願いします。