2021年2月14日日曜日

Raspberry PI 4 には I2C が沢山あった

Raspberry PI4 は I2C がいっぱいあった

 電力をあまり食わせたくなかったので最新のRaspberry4(Rspi4)ではなく、PI3系(Rspi3)を好んで使っていたんですが、なんとRaspberry PI 4は BCM2711を搭載しているので、I2Cを4つも追加できるとの事

 Rspi3以前でもI2C-0を使おうと思えば使えたんですが、いろいろなHAT(拡張ボード)を上に乗っける時にこの端子でHATのチップと通信しているものが多く事実上使えませんでした

/boot/overlays/README ちゃんと読め > 自分

 こんなところにマニュアルがあるのか。

 マニュアルっていったら man コマンドだよね、と思ってた。

 うーん、まだまだ勉強不足だなぁ。

 Rspi3以前でもソフトウエアI2Cなるドライバがあって、そちらはGPIOピンをドライバーでドカンドカン叩いてI2Cのフリをするものらしいんですが、プルアップ抵抗は当然必要で、速度も10KHzくらいしかでないとの事。I2Cの標準は100KHzです。

 しかもCPUのクロック速度で数値が変わるので、厳密なSCLクロックが必要なデバイスは動かないんだとか。幸いほとんどのI2Cデバイスはとっても緩いのでかなり適当なクロックでも動作してくれる。ありがとうハードウェア技術者の方々。

 元々のハードウェアI2Cもなんかヘンテコ仕様で、でもRaspiはプルアップ抵抗が1.5KΩと(推奨10KΩ)低すぎて、配下にぶら下がるデバイスによってはL側にドライブしきれなくて波形がなまるので50KHz以下にしたほうがいいよ、みたいな。

arduino のI2Cはちゃんと10KΩプルアップなんだよね。

config.txtには

dtparam=i2c_arm_baudrate=50000 # Rspi4 64bit

dtparam=i2c_baudrate=50000     # Rspi3


と書くのがいいよ!という書き込みをよく見かけます

/boot/config.txt に追加

 この /boot/overlays/README がめっちゃ不親切なんですが、とりあえずconfig.txtに追加するとI2C端子が増えると書いてあったので試してみました

dtoverlay=i2c4,pins_8_9,baudrate=10000

とりあえず10KHzという消極的設定として、reboot

# i2cdetect -l

i2c-1 i2c   bcm2835 (i2c@7e804000)       I2C adapter

i2c-4 i2c   bcm2835 (i2c@7e205800)       I2C adapter

うひょー i2c-4 が出てキター。

BCM2711の中にbcm2835のハードが入っててOSはそれを検出しているような感じなんだろうか。

とりあえず温度/湿度/気圧計の3つのセンサーが入っている基盤をぶら下げてみる。

# i2cdetect -y 4

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- 76 -- 

3つともちゃんと見えてる!

機能はこんな感じ 

端子名ピン番号I2C機能
GPIO824SDA
GPIO921SCL

この他にも config.txt に以下を追加するきっと4つも増えることであろう。

  dtoverlay=i2c3,pins_4_5

  dtoverlay=i2c4,pins_8_9    # 今回試したpin

  dtoverlay=i2c5,pins_12_13

  dtoverlay=i2c6,pins_22_23


i2c3は多分 
  • SDA3 が GPIO4 
  • SDL3 が GPIO5 
に割当られるんだろう
他のI2CもおそらくSDA/SCLの順番っぽい。

 

こうなると今後はRspi4を購入して、電力はクロックを落として使うとするかな


end

0 件のコメント: