PIC32MXのI2C通信が動き始めた [PIC32]
(2014.06.24)
Raspi-2とPIC32MX間のI2C通信にてこずっています。PIC18F25k50で使っていたI2CスレーブのプログラムをPIC32MXに移植しようとしたのですが、I2Cモジュールの機能の違いが大きく(<==I2CスレーブはAck/Nackをプログラムで制御できない?)、思うようには行きません。
なんとかPIC32MXのI2Cスレーブ・プログラムを書き上げ、Raspi-2(I2Cマスタ)とのI2C通信を試みましたが、READ要求には一回しか応答できません(WRITE要求の反復なら良い)。しかも、それ以後READ要求にもWRITE要求にも応答出来なくなってしまいます。データ・シートとリファレンス・マニュアルを何度も読み返したのですが、原因が掴めません。orz
あれこれ試していて、デバッガでブレークを掛けるとI2C2STATのRBFフラグがクリアされ、READ要求に(一回は)応答出来るようになることが判りました。
WRITE要求のときはI2C2RCVに入ったI2Cアドレスを読み出していた(そうしないとReceive Overflowになる)のですが、READ要求のときは関係ないと思ってI2C2RCVを読み出していませんでした。
”RBFフラグが立ったままだとアクノリッジ・シーケンスが動かない”とは何処にも書かれていませんが、どうやらそういうことのようです。(I2COVフラグも立たない)
アクノリッジ・シーケンスでI2Cアドレスを読み出すようにして、ようやくREAD要求とWRITE要求の反復が出来るようになりました。
やれやれ
Raspi-2とPIC32MX間のI2C通信にてこずっています。PIC18F25k50で使っていたI2CスレーブのプログラムをPIC32MXに移植しようとしたのですが、I2Cモジュールの機能の違いが大きく(<==I2CスレーブはAck/Nackをプログラムで制御できない?)、思うようには行きません。
なんとかPIC32MXのI2Cスレーブ・プログラムを書き上げ、Raspi-2(I2Cマスタ)とのI2C通信を試みましたが、READ要求には一回しか応答できません(WRITE要求の反復なら良い)。しかも、それ以後READ要求にもWRITE要求にも応答出来なくなってしまいます。データ・シートとリファレンス・マニュアルを何度も読み返したのですが、原因が掴めません。orz
あれこれ試していて、デバッガでブレークを掛けるとI2C2STATのRBFフラグがクリアされ、READ要求に(一回は)応答出来るようになることが判りました。
WRITE要求のときはI2C2RCVに入ったI2Cアドレスを読み出していた(そうしないとReceive Overflowになる)のですが、READ要求のときは関係ないと思ってI2C2RCVを読み出していませんでした。
”RBFフラグが立ったままだとアクノリッジ・シーケンスが動かない”とは何処にも書かれていませんが、どうやらそういうことのようです。(I2COVフラグも立たない)
アクノリッジ・シーケンスでI2Cアドレスを読み出すようにして、ようやくREAD要求とWRITE要求の反復が出来るようになりました。
やれやれ
|
|
|
こんばんは。
4年も前の記事にコメントさせて頂くので、お返事頂けないかなと思いながら、どうしても解決出来ない問題があり、藁をも掴む思い出書込させて頂きました。
記事と同じ様な環境で、RaspiをI2Cマスターとし、PIC32MX270 or PIC32MX220でI2Cスレーブのプログラムを作っています。
I2C1の方では、何の問題もなく、マスタと通信出来るのですが、その処理をそのままI2C2に変更しても、全く動作しない問題にぶつかりました。
もう2週間以上もいろいろ見直しや再確認をしているのですが、一向に解決致しませんで、途方にくれております。
試した事を列挙し出すと、かなりの量になるので書きづらいですが、何か注意する点とかございますでしょうか?
PICのI2C1では、マスタ動作もスレーブ動作もどちらも正常に動作しているので、プログラムの問題とも思えなく。
何かヒントなどあれば、ご教示お願いします。
by malu (2018-02-24 00:40)