September 14, 2007

Super Sylphide 進捗状況(9) -- McBSPでmulti-words SPI

オートパイロットシステム Super Sylphideの前回の記事『DSP/BIOSを利用した割込みMcBSP(SPI Slave)』で、DSPはMcBSPモジュールによるSPI通信(Slave)でマイコン(Master)からのデータをやり取りしています、ということを書きました。今回の記事は前回記事の拡張で、複数の塊で意味を持つデータ通信をどのように行えばいいかというお話です。

※今回のお話は長いので、トップページから来られた方は続きをどうぞ。

現在 Super Sylphideでは、マイコンからSPIでやってくるセンサの計測データ等は、32bytesなど複数の塊(multi-words)で意味をもつようにしてあります。つまりどこから意味のあるデータが始まるのか、頭出しがしっかりできていないと意味のある情報を得ることができません。

このような場合に備えて普通のSPIでは、CS(chip select)信号を利用することができます。図1に通信の様子をあげますが、意味のあるデータが続く限りCS信号をアサートしておけば、CS信号の変化を見ることによって『頭出し』の作業をきっちり行うことができます。

McBSP_SPI_fig1.gif
図1 通常のSPI。

しかしながら、Super Sylphideに搭載されたDSP TMS320C6713でMcBSPによるSPIを行う場合は、このような使い方が許されていません。図2に示すとおり、データの最小単位(多くの場合は8bit、つまりはバイト単位)ごとにCSをアサート、デアサートすることが求められています。

McBSP_SPI_fig2.gif
図2 McBSPによるSPI。

これでは頭だしの作業を行うことができません。そこで解決策をComp.DSP等で探ってみました。得られた情報としては、1) (SPI互換モードではなく)本来のMcBSPとして通信を行えばできる(ハードウェア的に配線変更の必要あり)、2) C672Xなどの新しいDSPに入っているSPI専用モジュールではこのような使い方が想定されている などの残念な情報がまずヒットしましたが、根気強く探していると、今回の通信方式でのデータ最小単位が最大32bitであること(TIのFAQ 『C6000 McBSP in SPI Mode』)がわかりました。

32bit、つまりは4bytesを一度に転送できることがわかりましたので、これならソフトウェアによる工夫で頭だしをすることができます。4bytesのうち先頭の1byteを頭出し用のヘッダーとして使うことで、この転送単位が先頭なのかどうか識別できるようにしました。図3に実装したプロトコルを示します。

McBSP_SPI_fig3.gif
図3 先頭とそれ以外で構造が異なる。

現在のところ、この通信方式でうまく頭だしの作業が行えています。次期C672XではSPIがらみでは楽ができることを祈っています(笑)

※その後、進捗状況絡みでは、以前作成したDSP行列ライブラリのバグについて記事を書きました。

09:08 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/592
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。