はまったレジスタ設定の根本原因2010年01月16日 23時21分34秒

はまった話ですが、根本的な原因は二つでした。

  1. ハードウェア設計ミスでプルアップすべきポートがプルアップされていなかった
  2. SHのI2Cバス3コントローラのビット同期回路の機能の問題

Nチャネルオープンドレイン出力はプルアップしないと通信利用不可

今回はまったコントローラの出力ポートはNチャネルオープンドレイン出力になっています。Nチャネルオープンドレインの解説はこちらにお任せ。 汎用入出力ポート設定にしてもデータが出力されなかったためよくよくデータシートを見直して気付くまでに2日もかかりました。

ビット同期回路なんて今回は余計だった

コントローラ的には送信レジスタにデータを書いたらデータは出力されるもの、という考えが間違いでした。今回のコントローラは非常に用心深い賢い回路が搭載されていて、クロックマスターとして動作する場合でも自分が出力したはずのクロックをモニターして、そのクロックに同期してデータを転送する仕組みになっていたのです。

なので、プルアップされていないNチャネルオープンドレイン出力ポートのクロックはずっと0のままでデータ送信がいつまでも完了せず、送信完了割込みも発生しない、ということです。