PSoCで作った I2Cスレーブに write出来ない
PSoCのEzI2Csモジュールを使って作った I2Cスレーブのユニットをつないでみたんだけど、I2C::write(addr,buf,count)関数でデータが送れない。I2C::write(int)のほうは使えるので一応動く物は出来たんだけど、I2C::start(),stop()を(自分なりに必要だと思う位置に)入れると動かなくなってしまったりする。
手元にあった RTCとかのユニットでは、こんなことはなくて普通に使えるので PSoCのEzI2Cの挙動がおかしいのだろうと思う。でも、このユニットは結構前に arduinoで使うために作った物で arduinoでは問題なく使えてたんだよねえ。
-----
2011/02/19 追記 -----
I2C::write(addr,buf,count,true) と4番目の引数を true にすれば、うまくいくことが判った。
でも、この引数の意味って「stopコンディションを発行しない」だから、本来は read の直前の write でしか意味をもたないはず。それに PSoCのEzI2Csモジュールはデータシートを見ると stopコンディションがあってもポインタはリセットされない仕様なので、この引数は不要なはずなんだけどなあ…arduinoから使ったときは stopコンディションは発行してた(っていうか arduinoのライブラリでは stopコンディションなしの writeが出来ない)けど問題なかったし。
そもそも stopコンディションの有無の影響は、次の読み書きでの I2Cスレーブデバイスの内部処理が変わるだけで、最初の writeが失敗するはずはないと思うんだけど…よく分らないなあ(^^;
-----------------------
Please log in to post comments.