mbed LPC824とSDFileSystem Library

28 Jul 2015

初めてこのフォーラムに投稿させていただきます。

現在mbed LPC824でSDカードの使用を考えているのですが、公式のSDFileSystem Libraryをコンパイルすると以下のエラー文が出力されます。何か根本的な勘違いをしているのかもしれません。ご指摘いただければ幸いです。

よろしくお願いいたします。

Error: Undefined symbol mbed::FATFileSystem::open(const char*, int) (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::mkdir(const char*, int) (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::format() (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::remove(const char*) (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::opendir(const char*) (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::FATFileSystemsub_object(const char*) (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol mbed::FATFileSystem::FATFileSystemsub_object() (referred from SDFileSystem.cpp.SSCI824.o). Error: Undefined symbol typeinfo for mbed::FATFileSystem (referred from SDFileSystem.cpp.SSCI824.o).

コードは公式のHelloworldほぼそのままで、ピンアサインのみ変更しています。

include the mbed library with this snippet

// example writing to SD card, sford

#include "mbed.h"
#include "SDFileSystem.h"

SDFileSystem sd(dp8, dp9, dp10, dp11, "sd"); // the pinout on the mbed Cool Components workshop board

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

    mkdir("/sd/mydir", 0777);
    
    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
    if(fp == NULL) {
        error("Could not open file for write\n");
    }
    fprintf(fp, "Hello fun SD Card World!");
    fclose(fp); 

    printf("Goodbye World!\n");
}   

28 Jul 2015

こんにちは。

この問題は、公式の SDFileSystem に含まれている FATFileSystem の互換性によって発生します。 最新版の FATFileSystem ライブラリは、 SDFileSystem と互換性が無いため、リンクエラーが表示されます。

回避策としては、以下の手順を試してみてください。

以上です。

29 Jul 2015

大変迅速な対応をしていただきありがとうございます。 ご指摘の方法でコンパイルを行ってみたところ正常にコンパイルが通りました。

しかし、SDカード(SiliconPower SDHC4GB)へのファイル保存に関しては結果的に失敗しました。 問題の切り分けをするべくmbed LPC1768とStarBoardOrangeの組み合わせでSDカードの動作を試してみたのですが、 ここでもSDの書き込みに失敗してしまいました。

少し問題の本質からはずれてしまったのですが、以下のようなserial出力とともにruntime errorが発生します。(LED交互点滅)

include the mbed library with this snippet

No disk, or could not put SD card in to SPI idle state
Didn't get a response from the disk
Set 512-byte block timed out
Could not open file for write

mbedフォーラムで同じような症状の方がいたのですが、 SDの相性問題やら、電源など様々な議論がなされているようです。

https://developer.mbed.org/forum/helloworld/topic/1831/

これまでArduinoを使ってきてあまりこのようなことは発生しなかったのですが、mbedのSDライブラリは結構SDとの相性がシビアなのでしょうか?

追記 LPC1768のエラーについては以下のSDHCライブラリで書き込みに成功しました。 https://developer.mbed.org/users/xxll/code/SDHCFileSystem/

LPC824についてはSDHCでないカードを使うか、別のライブラリで対応できるか後日試してみます。