SDカード・トランスポータの作成(その12)

SDCのデータ読み込みに成功しました!!
シングルブロックでの読み込みのみですが、ここまでくればSDCへのアクセスは大丈夫でしょう。
次は、ChaNさんの FatFs に組み込んでファイルの読み込みをやりたいと思います。

最初から FatFs を組み込みつつサンプルをベースに作成する事をしなかったのは、USARTをSPIモードで使うという初めての試みを行ったからです。FatFsを組み込みつつUSARTを使うとなると何かあった時に、USARTの使い方が悪いのかFatFsの使い方を間違えているのか分らなくなっちゃいます…。

USARTのSPIモードは通常のSPIリソースと異なり、送信バッファが1つ、受信バッファが2つあって、これを上手く使うとSPIを区切れ目なく連続して送受信する事が可能となり、通常のSPIリソースを使うより効率的に処理出来る事が分りました。


通常のSPIリソースでは「送信」と「受信」を1つのペアとして処理し、送信したら受信待ちをして受信が完了してから送信していました。しかし、USARTにはバッファが存在するので、その7で示した様に送信を優先して合間に受信をする事が可能になります。

注意点としては以下の2点があります。


1. 「送信完了」と「受信完了」のタイミングが異なる
2. 送信完了フラグは割り込みを発生させるか明示的にクリアしない限りクリアされない。


1は送受信のタイミングの違いにより、送信データレジスタ空きフラグが'1'(空き)となっても受信完了とはならない事に起因しています。なので私の設計では

「送信」→「送信データレジスタ空き待ち」→「送信」→「送信データレジスタ空き待ち」

と 2回送信データレジスタ空き待ちを入れてから即読み込みに行くようにしました。2回目の空きができる段階では必ず1回目の受信は完了しているからです。

2は最も悩まされた点で、結論からいうと今回の用途(割り込みを使わない)では使えないフラグとなってしまいました。送信した数と同数の受信を行う事で帳尻を合わせています。そうしないと受信データを必要としない連続送信において、いつ受信が完了したか分らなくなってしまうからです。

以上の事を考慮して作成したSDCダンププログラムがコレです。

SPI 4MHz動作時の信号状態をロジアナで録ったのが以下の画像です。
1ブロック(512byte)読み込むのにトータルで 1,500μs くらいかかってます。
実際の使用時には 10MHzで動作させ、バッファサイズを1k~2kくらいとするので 16bit 44.1kHz 2chのソースを再生するのには、ある程度の余裕が見込めます。

sdc_single_block_read
スポンサーサイト

コメントの投稿

非公開コメント

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ RaspberryPi Linux トランジスタ式ミニワッター TRminiWatterPart4 MPD OpenOCD イーサネットコンバータ FON2405E DAC buildroot FM3ペリフェラル BeagleBoneBlack FM3評価ボード library OpenGL mingw ODROID-U2 TL-WR700N Edison bitbake KiCad 計測 VMware シングル FM4 ミニワッター 6N6P プリアンプ 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter