以前の記事で書いた内容の抜粋です。
症状
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ピンがあるか確認してみよう!