PIC I2C が動作しないときはチップを疑え

こんばんは、ファルコンMです。

PIC でI2C( Inter-Integrated Circuit ) 機能を使用しようとしたが、動作しなかった。

かなりはまったので、対処法をブログに残しておく。

開発環境

  • PIC32MZ2048EFM064

 

現象

 

PIC マイコンでI2C の機能を使いたい。このマイコンは、I2Cは、I2C1、I2C3、I2C4、I2C5 の4つを使うことができる。ハード側の指定で、I2C3 を使うことにする。

harmony を使って、ソースコードを自動生成し、ビルドして、マイコンに書き込んでデバック開始。

だが、I2C が動作しない。Drv_I2C_Open 関数の戻り値は有効なハンドル値が返ってくる。Drv_I2C_Transmit 関数が失敗しているようだ。

そもそも、I2C3CONのレジスタ値が、他のI2Cの同じレジスタ値と違う。

  • I2C3CON : 0x0000
  • I2C1CON、I2C4CON、I2C5CON : 0x0050

何かがおかしい。

次に、I2C3CON のON ビットをデバッカで直接変更する。。できない。ONビットを変更しても1ステップ動かすと0に戻る。

I2C1CON、I2C4CON、I2C5CONで同じ操作をすると、想定通り変更される。

I2C3CON のON ビットが動かないということは、I2C3 だけ動作していないように思える。

 

チップが原因だった

 

Google検索などで調べた結果、原因が分かった。

使用しているチップのリビジョンでは、I2C3 だけが使えないのだ。ちなみにこのチップのリビジョンはA3。( リビジョンは、デバッカでプログラムを書き込むときにコンソールに表示される。)

以下 microchip の文章

Revision A1 Silicon Work around 2
Instead of using the hardware I2C module, use a
software “bit-bang” implementation.
Revision A3 Silicon Work around
The work arounds described for revision A1 silicon
will also work for silicon revision A3, with the
exception of I2C3, as I2C3 must use a software
“bit-bang” implementation.

エラッタのリンク

簡単に言うと、A3リビジョンは、I2C3 はbit-bang を使わなければならないということ。リビジョンA1、A2 は問題ないようだ。

microchip の不具合としかおもえないが、堂々とエラーとして公開しているところがすごい。

 

とにかく、I2C3 だけマイコンのハードウェアの機能としてのI2C が使えないのだ。使うとしたらbit-bang でやるしかない!

 

まとめ

 

原因は分かった。上に書いた通り。

こういう問題に遭遇したときは、エラッタを確認するのが基本のようだ。

 

 

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です