OrangePi-PCを使ってみる

Debian StretchでのSPI通信

Debian StretchでのSPI通信を紹介します。
Stretchの初期状態ではSPIデバイスがありません。
$ ls -l /dev/spi*
ls: cannot access '/dev/spi*': No such file or directory

SPIの有効化はarmbian-configを使って行います。
armbian-configを起動し以下の手順で進めます。




ここでspi-spidevを有効にします。


< Save > を押して < Exit >を押すと以下のスクリーンになります。


SPIの場合、ここで<Cancel>を選んでarmbian-configを抜けます。
エディターで[/boot/armbianEnv.txt]に1行追加する必要が有ります。
これを追加しないと、SPIデバイスが出現しません。
verbosity=1
logo=disabled
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
rootdev=UUID=3d863bb3-b616-4229-94e7-8c92ac95501a
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
overlays=spi-spidev
param_spidev_spi_bus=0  --->注

注)
OPi-Zero や OPi-Zero-Plus2 の場合は以下となります。
param_spidev_spi_bus=1

修正後にリブートするとSPIデバイスが出現します。
$ ls -l /dev/spi*
crw------- 1 root root 153, 0 Jul  8 09:16 /dev/spidev0.0

これで/dev/spidev0.0が使えるようになり、こちらで紹 介しているmcp23s17のプログラムが動きました。
こちらで紹介しているパラレルI/Oのプログラムを試し てみました。
$ sudo ./mcp23s17w
time:16.0Sec

JessieのSPIよりも少し早いです。
30000回のパラレルI/Oの時間比較。

wiringPiライブラリ bcm2835ライブラリ
RPi(Raspbian)+MCP23S17 35秒 1秒
OPi(Jessie)+MCP23S17 19秒 サポートしていない
OPi(Stretch)+MCP23S17 16秒 サポートしていない

こちらのツールを使った SPIの OLEデバイスへの表示も問題ありません。



その後、Stretch(Debian 9)からBuster(Debian 10)にアップデートしました。
以下の環境で問題なく動作します。
$ cat /etc/os-release
PRETTY_NAME="Armbian 21.08.1 Buster"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

$ cat /etc/armbian-release
# PLEASE DO NOT EDIT THIS FILE
BOARD=orangepipc
BOARD_NAME="Orange Pi PC"
BOARDFAMILY=sun8i
BUILD_REPOSITORY_URL=git@github.com:armbian/build
BUILD_REPOSITORY_COMMIT=aec64805a
DISTRIBUTION_CODENAME=buster
DISTRIBUTION_STATUS=supported
VERSION=21.08.1
LINUXFAMILY=sunxi
ARCH=arm
IMAGE_TYPE=stable
BOARD_TYPE=conf
INITRD_ARCH=arm
KERNEL_IMAGE_TYPE=Image
BRANCH=current

$ uname -a
Linux orangepipc 5.10.60-sunxi #21.08.1 SMP Wed Aug 25 18:19:32 UTC 2021 armv7l GNU/Linux

但し、Kernalのバージョンを5.10.xx→5.15.25にアップデートするとSPIが壊れます。
5.15.93で修正されています。
$ cat /etc/armbian-release
# PLEASE DO NOT EDIT THIS FILE
BOARD=orangepione
BOARD_NAME="Orange Pi One"
BOARDFAMILY=sun8i
BUILD_REPOSITORY_URL=https://github.com/armbian/build
BUILD_REPOSITORY_COMMIT=1a8daf0
VERSION=23.02.2
LINUXFAMILY=sunxi
ARCH=arm
IMAGE_TYPE=stable
BOARD_TYPE=conf
INITRD_ARCH=arm
KERNEL_IMAGE_TYPE=stable
BRANCH=current

$ uname -a
Linux orangepione 5.15.93-sunxi #23.02.2 SMP Fri Feb 17 23:49:46 UTC 2023 armv7l armv7l armv7l GNU/Linux

次回は複数のSPIデバイスとの通信を紹介します。