スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

ChaNさんのFatFsのサンプル(AVR)のSDカード(MMC)のファイル読み出し部分を見ていると、SPIで送信して受信待ちをして送信する事を4byte1セットとして繰り返されている。

この部分、ATmega644PのSPIではなく、USARTをSPI動作させて使う場合はもっと効率の良い処理手順があるのではと思い考察してみました。

HEROさんが公開されているATmega644Pのマニュアルの日本語訳版では翻訳機に通しました的な日本語になっていて読み辛かったので、英語は苦手ですが原文を読んでみました


To keep the input buffer in sync with the number of data bytes transmitted, the UDRn register must be read once for each byte transmitted. The input buffer operation is identical to normal USART mode, i.e. if an overflow occurs the character last received will be lost, not the first data in the buffer. This means that if four bytes are transferred, byte 1 first, then byte 2, 3, and 4, and the UDRn is not read before all transfers are completed, then byte 3 to be received will be lost, and not byte 1.


USARTをSPI動作させる時は、USARTのリソースをそのまま使用するのでSPIのリソースを使うより送信/受信バッファの数が増えます。つまり、送信バッファとして1つ、受信バッファとして2つ用意されている事になります。上記のマニュアル引用文で、受信バッファは2つですが、その直前にシフトレジスタを持っていて、最大3つまで抱える事ができます(溜まったデータを取得せずに4つ目が来た場合は3つ目のデータが上書きされます)。また、送信バッファが加わる事によって1byte送信中に次に送信するデータを登録する事ができます。

以上の事とSPIのマスターとして動作する場合、1byte送信完了≒1byte受信完了を踏まえ、また、途中に割り込み等が発生してもデータの取りこぼしがないようにすると下図のような制御が最適なのではないかと考えます。

usart_spi_set
S=送信バッファ登録  R=受信データ取得

これは、送信データ①を登録して送信バッファ空き待ちし、空いたら送信データ②を登録、その後送信バッファ空き待ちし、空いたら送信データ③を登録(この時点で①のデータは送信完了しています)、念の為、受信完了フラグを見て受信完了していればデータ①を取得します。後は送信バッファ空き待ち、送信データ登録、受信完了フラグ待ち、データ取得を繰り返します。こうする事により、送受信と並行してデータ取得と次の設定の準備等ができて効率的です。

ChaNさんのサンプルより、4byte単位で読み込むとすると「繰り返し動作」と書いた4セットの括りで送受信ループを繰り返し、最後2回データ取得すれば実現できそうです。

ファイルシステムの所までたどり着けたら本当にこれで早く(効率的に)なるのか実験してみます。
スポンサーサイト

コメントの投稿

非公開コメント

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

jujurou

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

カレンダー
05 | 2017/06 | 07
- - - - 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 -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ 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
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。