ラズパイでi2cが使えない?!(3)(解決編?)
こんばんは。國松です。
i2cに悩まされて週末を迎えてしまいました。せっかくの休みなのになんだか落ち着きません。そこで私は自宅で勉強用に買ったラズパイ(自腹)とi2cデバイス(ADT7410)でi2c接続ができるか試してみました。
Raspbian(GNU/Linux 9.9(Stretch))やカーネル(4.14.98)のバージョンは会社で使用しているラズパイと同じです。
これがなんと、あっさりと成功してしまいました。「え?」,「マジで?」という感じでした。i2cdetect -y 1でちゃんとADT7410が検出されました。
会社のラズパイとの違いは何だろうとしばらく考えました。もしかしたらと思い当たったのはT型の接続キットです。
ラズパイのGPIOポートの挿し間違いを防止するために使っているものです。自宅にはこの拡張キットがないためラズパイのGPIOピンに直接接続していました。
そして月曜日、会社のラズパイのT型接続キットを外してADT7410を接続してみました。
あっさりと成功しました。i2cdetectでデバイスが検出されて、プログラムも動きました。
(ADT7410を動かすプログラムについては後日紹介できたらと思います)
次にACM1602NIを接続してみました。
またまた成功しました。
だたACM1602NIの接続は不安定で成功したと思ったらIOErrorがでてしまうことがありました。
T型接続キットを使うとやっぱりi2cデバイスは検出されなくなります。プログラムを実行すると
i2c_bcm2708ではOSError:[Errnor5]Input/Output Error
i2c_bcm2835ではIOError:[Errno121]Remoto I/O errortとエラーが出ました。
わかった事
きちんとi2cデバイスが接続されていればi2cのモジュールはi2c_bcm2708でもi2c_bcm2835でも動作する。
i2c_bcm2835の場合dmesgでi2c_bcm2835は検出されないけれど動作には問題がない。
まだわからない事
T型接続キットを付けるとi2cモジュールを検出しない理由。T型接続キットを付けていてもi2c以外では問題なく動作している。しかも最初にACM1602NIの接続に成功したときはT型接続キットで接続している。
数日かけてなんとかi2cを安定させて動作させることができました。ただi2cが動かなくなった根本的な原因がまだよくわかっていないのが残念です。オシロスコープの使い方も勉強しなくてはと思いました。