こんばんは、ファルコン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 2Instead of using the hardware I2C module, use asoftware “bit-bang” implementation.Revision A3 Silicon Work aroundThe work arounds described for revision A1 siliconwill also work for silicon revision A3, with theexception of I2C3, as I2C3 must use a software“bit-bang” implementation.
簡単に言うと、A3リビジョンは、I2C3 はbit-bang を使わなければならないということ。リビジョンA1、A2 は問題ないようだ。
microchip の不具合としかおもえないが、堂々とエラーとして公開しているところがすごい。
とにかく、I2C3 だけマイコンのハードウェアの機能としてのI2C が使えないのだ。使うとしたらbit-bang でやるしかない!
まとめ
原因は分かった。上に書いた通り。
こういう問題に遭遇したときは、エラッタを確認するのが基本のようだ。
コメントを残す