Todotaniのはやり物LogTodotaniのはやり物Log自分の中でマイ・ブームなはやり物について、ダラダラ綴っています。SDカードとFatFsを使えるようにしました。Memory-Cardsの実装をベースにしました。others)をたどってダウンロードします。I/OのSSP定義部分だけを変更すれば簡単に動作しそうです。Libraryを使っておりダウンロードしたzipにも入っているのですが、バージョンがv1.0とずいぶん古いです。codeの学習も兼ねて)。v3.0ではオリジナルコードで使っている旧APIが削除されたりしており、部分的に書き換えが発生しました。以下変更箇所の概要です。comm.c(コンソール出力用のUARTドライバ):割り込みハンドラー内でライブラリが提供しているUART0_StdIntHandler()を呼び出して、割り込み要因毎の処理(送信やら受信)はUART_SetupCbs()関数を使ってCallback関数を登録する方法になっていますが、最新のCMSISライブラリではUART_SetupCbs()関数が削除されています。SSP0)に加えて、SSPの初期化関連でLibraryの差し替えに伴う変更がありました。SDカードの初期化とその後のファイルI/OでSPIクロックを変えるために、オリジナルはSSP_SetClock()関数を呼んでいますが、v3.0ではpublicな関数として定義されていいません(名前も変わっている)。そのため、SSP_Init()を呼ぶ形で対応。ENABLE)を再度呼ぶ必要があります。変更を行った箇所を含むファイル一式は以下です。LPC1769_FatFS.zipプロジェクトのビルドLPC1769_FatFS.zipをダウンロードして、workspaceにインポートを行います。CMSISライブラリは含んでいないため個別に用意して下さい。Libraryをダウンロードします。Libraryを作っていたのですが、新規プロジェクトを作るとデフォルトの参照先がIDE組み込みのv1.30になってしまい毎回変更が面倒です。v3.0をコピーします。読み出しの試験を行いました。(pclk)の1/2動作確認時のログは以下の通りです。転送レート2369KB/sec57行目以降で、10MB毎に追加読み出しを行うと、書き込み同様に転送レートが低下64行目でファイルを一旦クローズして新規に読み出しを行うと元通りの転送レートになりますおわりに転送はFIFOモードでDMAは使っていません。yet"のコメントが入っていたりしてまだ動かないようです。v1.0をベースにしているためそのままでは動きません。DMAの有効化は今後の課題です。追記:DMAハンドラーを最新CMSISにあわせて修正したらDMA版も動作してくれました。DMA版は未完成という訳ではなく、メモリ上のデータをSSP_TxポートからSDカードに転送する際に、現状はSSP_Rxポートで受信したデータをダミーのバッファーに格納しているのですがこれを読み飛ばす処理がまだできていないようです。(メモリーリードに加えてライトが発生するため性能に影響があると思われます)DMAを使わないFIFO転送ですが、転送レートはそこそこ出ていると思います。追記:DMA版はダミーデータの読み書きを行うせいか、FIFO版より若干転送性能が落ちました。今回の移植は低レベル処理が主体だったので、SWD(JTAG)デバッグに助けられました。bitがクリアされる問題は、当初SPIが動かないように見えていたのですが原因が分からず、SSP0CR1レジスタの値を見ながらトレースして原因判明するなどデバッガが活躍してくれました。時々エミュレーターが起動できなくなってWindows再起動で復旧させることがあったのですが、このあたりがもうちょっと安定すると文句なしです。DMA編(2011.05.14)コメントこの記事へのコメントは終了しました。新館CuBeatSystemsSTM32マイコン徹底入門なんでも作っちゃう、かも。研究所SatE-OプロフィールRSSを表示する@niftyが提供する無料ブログはココログ!TwitterTwitterブログパーツ。