Raspberry Pi OS ① I2Cバスがたくさん使える
2020年5月27日に、いままでRaspbianと呼んでいた32ビットOSの呼び名がRaspberry Pi OSに変更されました。現時点で、64ビットRaspberry Pi OSがベータ・テスト中だそうです。
/boot/overlaysのREADMEを読むと、I2CやSPIバスが増えています。Raspberry Pi 3が発売されたときに、おおきく変更されていたようです。
●従来のままのI2C
バス1を従来から使っていました。後述しますが、/boot/config.txtに、Loadに書かれたように記述しなくてもこのバスは利用できます。
Name: i2c1
Info: Change i2c1 pin usage. Not all pin combinations are usable on all
platforms - platforms other then Compute Modules can only use this
to disable transaction combining.
Load: dtoverlay=i2c1,<param>=<val>
Params: pins_2_3 Use pins 2 and 3 (default)
pins_44_45 Use pins 44 and 45
combine Allow transactions to be combined (default "yes")
|
●変更された用語
転送速度の指定は、従来dtparam=i2c_baudrate=50000と書きました。何も書かないと100kHzでした。dtparam=i2c_arm_baudrate=50000と書くのが正式だが、従来のままでもよいということですね。
i2c_arm_baudrate Set the baudrate of the ARM's i2c interface (default "100000") i2c_baudrate An alias for i2c_arm_baudrate |
●非推奨のI2C
検索すると、カーネルが4.14のときに使われていた記述のようです。無視してよいようです。
Name: i2c0-bcm2708 Info: Deprecated, legacy version of i2c0, from which it inherits its parameters, just adding the explicit individual pin specifiers. Load: <Deprecated>非推奨 Params: sda0_pin GPIO pin for SDA0 (deprecated - use pins_*) scl0_pin GPIO pin for SCL0 (deprecated - use pins_*) Name: i2c1-bcm2708 Info: Deprecated, legacy version of i2c1, from which it inherits its parameters, just adding the explicit individual pin specifiers. Load: <Deprecated>非推奨 Params: sda1_pin GPIO pin for SDA1 (2 or 44 - default 2) scl1_pin GPIO pin for SCL1 (3 or 45 - default 3) pin_func Alternative pin function (4 (alt0), 6 (alt2) - default 4) |
●増えたI2C
バス2が抜けていますが、バス3からバス6が利用できるようです。
Name: i2c3 Info: Enable the i2c3 bus Load: dtoverlay=i2c3,<param> Params: pins_2_3 Use GPIOs 2 and 3 pins_4_5 Use GPIOs 4 and 5 (default) baudrate Set the baudrate for the interface (default "100000") Name: i2c4 Info: Enable the i2c4 bus Load: dtoverlay=i2c4,<param> Params: pins_6_7 Use GPIOs 6 and 7 pins_8_9 Use GPIOs 8 and 9 (default) baudrate Set the baudrate for the interface (default "100000") Name: i2c5 Info: Enable the i2c5 bus Load: dtoverlay=i2c5,<param> Params: pins_10_11 Use GPIOs 10 and 11 pins_12_13 Use GPIOs 12 and 13 (default) baudrate Set the baudrate for the interface (default "100000") Name: i2c6 Info: Enable the i2c6 bus Load: dtoverlay=i2c6,<param> Params: pins_0_1 Use GPIOs 0 and 1 pins_22_23 Use GPIOs 22 and 23 (default) baudrate Set the baudrate for the interface (default "100000") |
あまり見ない記述に、i2c_vcがあります。次の項目で登場しますが、HATのEEPROM用で使われています。
i2c_vc Set to "on" to enable the i2c interface usually reserved for the VideoCore processor (default "off") i2c_vc_baudrate Set the baudrate of the VideoCore i2c interface (default "100000") |
●不明なI2C
ID_SDとID_SC PINSのバス0は、
'0'のI2CはOSが立ち上がるときにEEPROMを探しに行った後、通常のI/Oピンに戻ります。利用するときは、/boot/config.txtに追加します。
※https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial 利用するときは、SDA、SCLラインはプルアップされていないので、たとえば10kΩ前後の抵抗で3.3Vへプルアップします。SO1602Aで動作を確認しました。 速度の変更は、下記のように記述します。
|
のように従来から使えていました。しかし、指定するpinsがどこにあるのかが不明です。
Name: i2c0 Info: Change i2c0 pin usage. Not all pin combinations are usable on all platforms - platforms other then Compute Modules can only use this to disable transaction combining. Load: dtoverlay=i2c0,<param>=<val> Params: pins_0_1 Use pins 0 and 1 (default) pins_28_29 Use pins 28 and 29 pins_44_45 Use pins 44 and 45 pins_46_47 Use pins 46 and 47 combine Allow transactions to be combined (default "yes") |
回路図には、コメントが書かれています。一般のユーザは、バス0を使わないのがよいようです。
DO NOT USE these pins for anything other than attaching an I2C ID EEPROM. Leave unconnected if ID EEPROM not required. |
●実際の記述
従来から使っていたバス1は、config.txtに何も記述せずに使えました。GPIO2-SDA、GPIO3-SCLにつないでいるのはMEMSセンサのBME280です。0x76に見つかりました。
>sudo nano /boot/config.txt
でエディタを立ち上げて、次の記述を追加しました。pinsはdefaultと書かれているピン番号です。pinsはpinでも通りました。
dtoverlay=i2c3,pins_4_5 dtoverlay=i2c4,pins_8_9 dtoverlay=i2c5,pins_12_13 dtoverlay=i2c6,pins_22_23 |
有効にするためにリブートします。GPIO22-SDA、GPIO23-SCLにBME280センサをつなぎました。バス6に見つけました。
(※)ラズパイのI2Cのバス1は、ボード内で1.8kΩの抵抗でプルアップされています(ラズパイ4では回路図にこの周辺部分が掲載されていない)。購入したBME280のボードにも10kΩの抵抗でプルアップされています。つなぐと、1.8kと10kが並列につながれます。合成抵抗は約1.5kΩです。低めですが、波形の崩れなどは未確認ですが、問題なく通信できています。
GPIO22、GPIO23にはプルアップ抵抗は入っていないと思われます。
●動作の確認
BME280のライブラリを入れます。
>pip3 install BME280
/home/pi/.local/binにインストールされたようです。bus1とbus6のどちらも温度、湿度、気圧を読み出しました。