コンフリクト(2)

 スイッチサイエンスに注文して猫ボスに預かってもらってた(郵便受けが満杯で配達不可だったらしい)RPi用Groveコネクタボードが届いたので埋没してたRPi2Bを復帰させて繋いでみたが直結タイプのi2c LCDモジュールが表示されない。またコンフリクトかと思って調べたがSTM32はADC拡張のみでそれ以外は直結とSeeedのwikiには書いてある。回路図を見ようとするがView閲覧しか許されず?PDFなりpngで取れないので回路不明でwikiが正しいならば被疑対象はSTM32のi2cスレーブポートの状態(ファームウェアとRPi側ドライバ含む)になる。もし出荷時のSTM32に書き込まれた無いとするととも思ったがDFUなりSWDしかファームウェア書込パスはSTM32F030には無い筈でDFU(USB)を持たぬデバイスはSWDなのではと。想像ばかりでは時間の浪費なのでi2c lcdを外してインストーラで環境設定をしてから再確認した方が良さそう。

急なリハビリ怪我の元、とかね。落ち着きましょう。

 20210613 18:56追記:

 Seeedのインストーラを起動してみたがaptが無い(ええっ?)のでインストールは失敗するがその後ボードを接続するとi2c lcdが表示している様にみえる。i2cバス表示ツールでバスを観ると

 $ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

  i2c lcdのアドレスは0x3eだから一応表示されている。

それではとMCP9808(i2c温度センサ)を接続すると↓

WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.


I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

 今度は0x3eのLCDが表示されなくなってしまった。こんな場合は終端を確認(両方で終端してる状態だと正常に動作しない。元々i2cはマスタ側とスレーブ末端での両終端が基本で現在の状況はi2c lcd(0x3e)とmcp9808 温度センサ(0x18)の両方のデバイスで終端しているのが影響している可能性があるかもしれない。こういうナイーブな点もi2c busの留意事項で不安定と言われがちな所以でもある、と昔を思い出しつつ(これもリハビリ)。

20210614追記:

 i2c lcdモジュールの件。秋月で公開されている情報によるとRPiのi2c busマスタ側で2.8kΩにPullupされておりその条件下では本モジュール自体のi2c busの駆動能力不足となるらしい。秋月は対策としてi2c busバッファの挿入を推奨しておりスイッチサイエンスではRPi用のモジュールはディスコンにした模様。結論としては

・Grove拡張ボードを使う場合はi2c lcdを使用しない/バッファ付き或いはまともな駆動能力のあるデバイスを使う。

 と考えている。とんだ空騒ぎを演じてしまい反省。

 20210618 2:47 AM追記:

 秋月のlcdモジュールが来たので試してみた↓

$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

 無事0x18のmcp9808と0x3eの秋月i2c lcdが表示されている。めでたしめでたし、と言いたいところだがi2cを呼び出す際に(当然ながら)排他制御はされないようで(まあアプリで処理すべきだから当然かもしれないが)pythonでi2cデバイスを複数のプログラムから複数のi2cデバイスを制御しようとすると問題が発生する。そりゃ当然だわなと午前2:50に気付く。今日午後からクライアントにオンライン報告だよ。仕事も遅れ気味だというのに何やってんだろうね(気の緩みとも)。

とにかく本件一見落着で結局seeedのi2c拡張ボードのライブライ導入は出来ずじまいで後でstm32制御方法を調べる必要がある(stm32をadcサブプロセサとして使う場合)。

眠いよ。