Raspberry Pi 2 Model B (以下RPi)
Raspbian Jessie
Tektronix TDS 2024C (200 MHz, 2GS/s)
$ cat /etc/debian_version
8.0
$ cat /proc/version
Linux version 4.1.7-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #817 SMP PREEMPT Sat Sep 19 15:32:00 BST 2015
関連 http://qiita.com/7of9/items/caa10591069cd3a33c76#comment-0055b13b4b492c07c62d
RPiにてSPIを使おうとした。
いくつかのページを参考にした。
@soramimi_jp さん
http://www.soramimi.jp/raspberrypi/spi/
上記を実行してみたが、SPIは有効にならなかった。
@masato さん
http://qiita.com/masato/items/f089a17b1c9329eb7d03
カーネルのバージョンが異なっていた。実施は保留としました。
pusuke0418’s diary by pusuke0418さん
http://poosyche.hatenablog.com/entry/2015/04/03/000355
なんやこれと思って調べていると、下記【参考】に記載した投稿を見つけた。どうやら仕組みが変わっていたらしい。
$ sudo raspi-config から、
"8 Advanced Options"→"A6 SPI"→以降の項目でそれぞれ"<はい>"と"<了解>"→再起動で使えるようになった。ありがとうございます。
こちらの方法を実施しました。
設定
$ sudo raspi-config
8 Advanced Options
A6 SPI
Would you like the SPI interface to be enabled? にて Yes
The SPI interface is enabled にて Ok
Would you like the SPI kernel module to be loaded by default? にて Yes
SPI kernel module will now be loaded by default にて Ok
Finishを選択
modprobe: ERROR: could not insert 'spi_bcm2708': No such device
上記のメッセージが少し気になる。
再起動後
参考 http://www.soramimi.jp/raspberrypi/spi/
$ ls -la /dev/spidev0.*
crw-rw---- 1 root spi 153, 0 Feb 7 12:20 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1 Feb 7 12:20 /dev/spidev0.1
$ dmesg | grep spi
[ 2.767104] systemd[1]: Set hostname to <raspi_yo>.
[ 4.981019] spi spi0.0: setting up native-CS0 as GPIO 8
[ 4.982401] spi spi0.1: setting up native-CS1 as GPIO 7
$ lsmod | grep spi
spi_bcm2835 7248 0
有効化されたようだ。
(dmesgの1つ目(systemd...)はSPIとは無関係)
spidevインストール
参考 https://hack-le.com/47361017-2/
$ sudo apt-get install python-spidev
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python-spidev
$ sudo apt-get update
$ sudo apt-get install python-spidev
サンプルコード
参考 http://www.100randomtasks.com/simple-spi-on-raspberry-pi
以下のように実装した。
import spidev
import time
usleep = lambda x : time.sleep(x/1000000.0)
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1000000
while True:
resp = spi.xfer2([0x00])
print(resp[0])
usleep(1.0)
spi.close()
SPI0 SCLK(#23)とGND(#39)にてオシロスコープ(Tektronix TDS 2024C)で波形を計測した。
1MHzでSPI SCLKを出力できた。
SPI1の使用
以下にありますようにSPI1使用の設定が必要のようです。
https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=167188
現在必要な機能はSPI0で確認できるため、SPI1使用は保留とします。