September 16, 2011

Super Sylphide 進捗状況(44) -- CPLD で i2c MUX

無人航空機(UAV)用の次期オートパイロット装置Tiny Featherを開発中です。今回は搭載されているCPLDの中身の一部を紹介してみたいと思います。題してi2c MUX(マルチプレクサ)。

マイコンと周辺機器を接続するのに、i2cという便利な規格があります。接続できるものとしては、センサやメモリ、IOエキスパンダなど様々なものがあります。Tiny Featherでも、i2cを利用した地磁気センサ(Honeywell HMC5843)を搭載しています。

i2cは、2本の線に物理的に並列に接続するだけで接続が完了します。ワイヤードANDという方法を使っていて、何も信号のやり足りがない場合はHi状態にプルアップされ、何かやり取りがあるときにはどれか1つの機器がLowを出力することで、線全体がLowとなり多数での通信が時間分割で成立するようになっています。
逆に言うと、線が物理的に接続されていないと、i2cで通信を成り立たせるのは困難です。Tiny Featherでは残念ながらその状態、すなわちi2cに関わる線を物理的に接続していません。以下の図に、一般的なi2c接続とTiny Featherでのi2c接続を示します。

TF_i2c_mux.png
上: 一般、下: Tiny Feather。

Tiny Featherでは、CPLDを介してi2cを接続しているため、CPLDの部分で物理的接続が切れてしまっています。なぜこのようなメンドクサイ方法をとったかというと、計算を担当するDSPが載った基板(赤)、そしてセンサ類が載ったIMU基板(緑)、この接続に自由度を持たせておきたかったというのが理由です。将来的には、DSP以外にも、別のプロセッサ(今のところFPU付のCortex-M4が有力)で計算を行いたいと考えており、そのためにも配線をCPLDを通して行うことで基板設計の自由度をあげておきたかったのです。そのような理由から、i2cもCPLDを介して接続することにしました。

結局のところ、CPLD内でi2cの通信状態をモニタし、ピンの入出力方向を常時制御することで、あたかもCPLD内で物理的に結線がされているような振る舞いをさせています。該当部分のVHDLソースi2c_mux.vhdを公開します。テストコードi2cmux_test.vhdもあわせてどうぞ。機能限定版で作っているので、i2cマスタの接続先は1つ、通信に想定外のことがあるとハングする可能性がある、クロックストレッチに対応していないなど、改善点はまだまだたくさんあるのですが、今のところ十分使えています。

※続いてCPLDとSPIに関する話を書きました。

※※2013/4/14現在、さらにクロックストレッチに対応しました。

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

ついに、Cortex-M4Fが出荷されましたね。
ただ、在庫がない状態です。
TIは、メモリがすくないので、
STMを発注中です。

Posted by: 通りすがり@関西人 : September 28, 2011 04:05 PM

>通りすがり@関西人さん
お、ようやくきましたね。情報ありがとうございます!

Posted by: fenrir : September 29, 2011 11:09 PM

あ、ここで言う在庫とはsample kitの事です。
購入したのは、STM32F4DISCOVERYとEVAL kitです。

Posted by: 通りすがり@関西人 : September 30, 2011 11:22 AM
コメントする









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