April 14, 2013Super Sylphide 進捗状況(62) -- CPLD で i2c Multiplex その2オートパイロット装置Tiny Featherを改修しています。地磁気センサをHoneywell HMC5883Lから半田付けが容易なFreescale MAG3110へ変更し、また新規に絶対圧センサとしてMS5611-01BA01を搭載することにしました。いずれもすごいロガー(NinjaScan) Rev.Cで採用した部品です。 実装はこんな感じになりました。 この変更はいずれもi2cバス上のデバイスが置き換わったことになるのですが、少々問題が生じました。TinyFeatherでは以前の記事『Super Sylphide 進捗状況(62) -- CPLD で i2c MUX』にあるとおり、CPLDを介した特異な方法で本体のDSPとi2cデバイスを接続しています。今回導入したi2cデバイスのうちMAG3110は、介在しているCPLDがあらかじめ想定していた挙動とは異なる挙動をすることがわかり、CPLDのコードを変更する必要に迫られました。その挙動というのがクロックストレッチという機構です。 クロックストレッチというのは、スレーブデバイスがクロックをLOWレベルで固定することにより、マスタデバイスを待たせることが可能な機構です。MAG3110を例に出すと、下図のような挙動をします。 まずは、クロックストレッチが行われていない際のオシロスコープ画像です。クロック(黄色)が一定間隔で動いていることが見て取れると思います。
詳しくはコードを見てみてください。マスタ、スレーブとも確実にLOWを出力する一定時間はgenericパラメータで調整できるようにしてあります。僕が実際にこのコードを使う際は、今回はi2cのfast modeに対応する400KHzのLOW時間1.25 usを指定するようにしました。 ※次の進捗として、OLED表示をつけてみました。こちらで紹介のi2c MUXも使った成果です。 コメント
ご無沙汰してます. その後TinyFeather販売の話は進んでいますでしょうか. >hegedoraさん コメントする
|
スポンサード リンク
|