raspberry pi picoがmicroSDを認識してくれないとき

raspberry pi pico

以前の記事で書いた内容の抜粋です。

症状

FatFs本体のff.cのf_mount()から
FRESULT:FR_NOT_READY/* (3) The physical drive cannot work */
が返ってくる。

該当ソース

    // ドライブのマウント
    fr = f_mount(&fs, "0:", 1);
    if (fr != FR_OK) {
        printf("ドライブのマウントに失敗しました。エラーコード: %d\r\n", fr);
        while (true);
    }

コンソールの出力

No SD card detected!
ドライブのマウントに失敗しました。エラーコード: 3

原因

microSDカードリーダーモジュールに存在してないピンまで
hw_config.cに設定していた。

↓使ってるmicroSDカードリーダーモジュール(3連)

CS, SCK, MOSI, MISO, VSS, GNDの6ピンしかない。

でもhw_config.cにはcard_detectというピンについても設定してしまっていた。

↓ダメな例

static spi_t spis[] = {  // One for each SPI.
    {
        .hw_inst = spi0,  // SPIのポート番号
        .miso_gpio = 4,   // MISOはGPIO4
        .mosi_gpio = 7,   // MOSIはGPIO7
        .sck_gpio = 6,    // SCKはGPIO6

        .baud_rate = 1000 * 1000
        // .baud_rate = 12500 * 1000
        // .baud_rate = 25 * 1000 * 1000 // Actual frequency: 20833333.
    }};

// Hardware Configuration of the SD Card "objects"
static sd_card_t sd_cards[] = {  // One for each SD card
    {
        .pcName = "0:",   // Name used to mount device
        .spi = &spis[0],  // Pointer to the SPI driving this card
        .ss_gpio = 1,    // ss(CS)はGPIO1
//
//ここから下の設定がミスってる
//
        .use_card_detect = true,    // Card detectのピンなんてないのにtrueになってる。
        .card_detect_gpio = 22,     // Card detectをGPIO22に設定してる
        .card_detected_true = -1    // sdカードが存在してたときの返り値を設定してる。
    }};

修正

↓こんな風にしたらいけたよ

    .use_card_detect = false,    // Card detectのピンなんてないからfalse
    .card_detect_gpio = 0,       // Card detectなんてないから適当に0
    .card_detected_true = 0      // Card detectなんてないから適当に0
}};

結果

正常に読み書きがされた。

おわりに

みんなもcard detectピンがあるか確認してみよう!

タイトルとURLをコピーしました