複数系統のSPIを利用したい状況になったので調べました。
- GPIOピンマップ
- SPI1有効化の設定
- SPI1有効化確認
- SPIの色々な設定
- CEにアサインされているピンを変更したい
- 詳しくはREADMEにも書いてあります
- py-spidevで使うなら
- 参考URL
GPIOピンマップ
参照するGPIOのピンのマップですがWEB上に色々ありますが、今の所ここが使いやすいです。
SPI1有効化の設定
/boot/config.txt
に dtoverlay=spi1-1cs
と設定して、再起動を行います。
dtoverlayは以下のように並列で設定値を記載可能です。
# Uncomment this to enable the lirc-rpi module #dtoverlay=lirc-rpi dtoverlay=dwc2 dtoverlay=spi1-1cs,cs0_pin=16 dtoverlay=spi2-1cs
※この際にBlueToothが有効化されている場合はバッティングするので、以下の手順で無効化します。
SPI1有効化確認
起動後に /dev/spidev*
のデバイスを確認することができます。
(デフォルト)SPI1無効化時
$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1
SPIの色々な設定
dtoverlay=spi1-1cs
を 設定すると /dev/spidev1.0
が追加されます。この場合は冒頭の図の通り物理番号12番(BCM番号18番)のピンがCE0となります。
$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0
dtoverlay=spi1-3cs
を 設定すると /dev/spidev1.0
から/dev/spidev1.2
までが追加されます。
$ ls /dev/spi*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0 /dev/spidev1.1 /dev/spidev1.2
例えば、以下のように設定すると、SPI2も有効化されます。(cs0_pin
は後述)
dtoverlay=spi1-1cs,cs0_pin=16 dtoverlay=spi2-1cs
結果はこのようになります。
$ ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1 /dev/spidev1.0 /dev/spidev2.0
CEにアサインされているピンを変更したい
dtoverlay=spi1-1cs,<param>=<val>
(例:dtoverlay=spi1-1cs,cs0_pin=16
) のようなパラメータ指定で、CEのピン番号を指定することができます。この際のピン番号はBCMの方の番号になるので注意です。(冒頭の図に記載されています)
以下の場合ならBCM番号16、物理番号36をSPIのCE#0として利用できます。
# Uncomment this to enable the lirc-rpi module #dtoverlay=lirc-rpi dtoverlay=dwc2 dtoverlay=spi1-1cs,cs0_pin=16
詳しくはREADMEにも書いてあります
詳しくはREADMEにも書いてあります。SPIの系統毎のデフォルトのピン番号(BCM)も記載されています。
$ cat /boot/overlays/README Name: spi1-3cs Info: Enables spi1 with three chip select (CS) lines and associated spidev dev nodes. The gpio pin numbers for the CS lines and spidev device node creation are configurable. N.B.: spi1 is only accessible on devices with a 40pin header, eg: A+, B+, Zero and PI2 B; as well as the Compute Module. Load: dtoverlay=spi1-3cs,<param>=<val> Params: cs0_pin GPIO pin for CS0 (default 18 - BCM SPI1_CE0). cs1_pin GPIO pin for CS1 (default 17 - BCM SPI1_CE1). cs2_pin GPIO pin for CS2 (default 16 - BCM SPI1_CE2). cs0_spidev Set to 'disabled' to stop the creation of a userspace device node /dev/spidev1.0 (default is 'okay' or enabled). cs1_spidev Set to 'disabled' to stop the creation of a userspace device node /dev/spidev1.1 (default is 'okay' or enabled). cs2_spidev Set to 'disabled' to stop the creation of a userspace device node /dev/spidev1.2 (default is 'okay' or enabled).
py-spidevで使うなら
以下のように使います。
import spidev bus = "SPIの系統の番号0〜2" device = "CEの番号0〜2" spi = spidev.SpiDev() spi.open(bus, device)
参考URL
raspbian - How to enable SPI1 and SPI0 at the same time? - Raspberry Pi Stack Exchange