【STM32】SPI経由のMMCでfatfsを使う

いつぞやの記事でSTM32の記事を書くなんて言いつつ全く書いてませんでしたが、とりあえず一段落ついた感あるので作ってたものを放出していこうと思います( ˘ω˘)

で、今回作るべくは液晶を使った時計なので、せっかく液晶を使うんだったらなんか画像でも表示したいよね~ってことでSDカーd…  MMCを使おうと思ったわけですが…

最近のボードは大方そうだと思うんですが、今回使ったSTM32F407VET6開発ボード(上の)はmicroSDスロットしかついてないんですよね。

microSDの何がだめなのかというと、余ってるカードが1枚もないのです(

SDは無限に余ってるのでSDを使おうということになり、SDスロットとついでにBlue PillをAliから買いました。

でF1にはSDIOが無いのかということで、SDIO使おうがSPI使おうがマイコンでいじるぐらい速度も対して変わらんやろって感じで、SPIを使ってF4でもF1でも使えるようにしてやろうと目論んだのが今回の記事の発端です。

どうでもいいですが上の画像拾ってきて初めてこのボードにEEPROMが載ってることを知りました(

 

ググったらAdafruitのBSPドライバを移植することでCubeMXのFatFsを使うという記事がまあまあ出てきたんですが、いまいち分かりにくい…そこでオリジナルなFatFsをプロジェクトに流し込む方針で行くことにしました。

で、実はSTM32でChan氏のFatFsを動作させるサンプルはChan氏本人からリリースされてたりします。

http://elm-chan.org/fsw/ff/00index_e.html

ここのFatFs sample projects for various platformsってやつですね。

今回はこの中のstm32の中身を使いました。

ちなみにgenericを移植すればSTM32でSDをBitBang動作させることができたりもします。→http://meerstern.seesaa.net/article/444426931.html

サンプルあるならそのまま使えばええやんという話なのですが、このサンプルはF100RBT6向けな上、ペリフェラルを生で叩きまくっているのでCubeHAL仕様にしました。

 

ということで使い方

まずchan-fatfs.zipをダウンロードして展開したあとプロジェクトの適当な場所にブチ込みます。

EclipseでIncをIncludesに入れます。

最後にmmc_stm32f4_hal.cを自分の環境に合わせて編集します。

デフォではSPI1を使ってCSはPA4になってます。

また、タイマを入れてないのでタイムアウトはできません。

F4でしか動かしてないのでわかりませんが、多分

#include “stm32f4xx_hal.h”

#include “stm32f1xx_hal.h”

にすればF1でも動きます。

あとは普通にmain.cでff.hをインクルードして使うだけです✋

こんな感じで使えてます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です