Open10

Nucleo STM32L476RGでSDMMCを使ってSDカードと通信する

K. TakahashiK. Takahashi

ピンアサイン
PC8,PD2は10kΩでプルアップ
PC7も同様(SDカード挿入時にLOWになるよう配線する)

K. TakahashiK. Takahashi
  • DMA有効だと、f_openでSDカードの最初の512byteを読み出したとき、何故か途中で4bit詰められ、末尾の0x55AAがずれてしまう
  • SDMMCのモードが SD 4 bits Wide busだと(4bit用の配線をしても)512byteの後半が読み出せていない(?)
  • SD 1 bitモードでDMA無効のときだけ動く

いずれもデバッガでff.c内 fs->winを見て確認

K. TakahashiK. Takahashi
  • SDカードのパーティションを切ると上記先頭512バイトがFatFsの期待するものにならない
    • パーティション指定でマウントできると良いのだろうけどよくわからない
  • パーティションを削除してから sudo mkfs.vfat /dev/sdXすると良い
  • sudo hexdump -n 512 /dev/sdX とかで確認できる
K. TakahashiK. Takahashi

DMAの送信(BSP_SD_WriteBlocks_DMA)はHAL_SD_ERROR_TX_UNDERRUNになってしまう
sd_diskio.c内SD_write()のBSP_SD_WriteBlocks_DMAのブロックを

if (BSP_SD_WriteBlocks((uint32_t*)buff,
                              (uint32_t)(sector),
                              count, 1000) == MSD_OK)
{
  res = RES_OK;
}

に置き換えたら動いた