マイコン工作実験日記

Microcontroller を用いての工作、実験記録

TWIを使うのをあきらめる

2009-07-23 22:55:55 | ARM9
ATMEL用語ではI2CインタフェースのことをTWI (Two Wire Interface)と呼んでいます。MCKを100MHzにしつつCMOSカメラをI2Cで使いたいのですが、どうもAT91SAM9260のTWIを使ってI2C制御しているとうまく動いてくれません。検索をかけてみるといくつかのMLでも同様の問題が報告されているようです。

  • LM-sensorsを使っている人なんかは、TWIを使わずにGPIOでBit-Bangして動かしているようです。
  • AT91SAM9260のデータシートにはTWI関連のErrataは載っていないのですが、AT91SAM9261のデータシートにはErrattaがあります。AT91SAM9260のTWIはちゃんと動くの?
  • AT91SAM9260のTWIはいかれていて、ドキュメントのとおりにはちっとも動かん と言い切っている人もいるようです。

思ったように動いてくれないという点では、わたしもまったく同感です。そこで、LM-Sensorな人たちと同じようにTWIを使うのをあきらめて、Bit-Bang、すなわちソフトウェアI2Cすることにしました。TWIの割り当てられているポートの設定を変更して、ドライバを書き直すだけですから、配線の変更は必要ありません。ソフトの修正だけで対応できます。



はい、きれいに動くようになりました。もちろん、MCKももとどおりです。これまではレジスタダンプを実行すると、少なくとも5回に1回はエラーが発生していたのですが、もうそんな問題は発生しません。CMOSカメラには何の問題もないことがわかってスッキリですが、TWIがどのように悪いのかはまだはっきりとわかっていません。