RaspberryPI3(以下RPI)のSPI通信で、加速度センサーを5個ぶら下げたいのだが、うまくいかないのでここ2、3日呻吟している。
そう言うことで、RPIのgpioピンから出ているパルスをどうしても確かめたくて、前から、必要だと思っていたオシロスコープを秋月電子で買ってきた。SDS5032Eだ。Amazonのそれと値段がほぼ同じなので、秋月電子でもでいいだろうと直接買ったわけだ。
オシロスコープは40年ぶりである。名古屋大学の工学部(電気工学科、内容は情報工学。というのも当時は情報工学科がなかった)の学生だったとき触って以来だった。当時の機械は、数百万円したのではないかと思う。今日、買ってきたのは、3万1千円だった。それでも高いが、性能はこちらの方がいいのだろう。当時はアナログで、それも良かった。
オシロスコープの使い方など、とっくの昔に忘れてしまったが、youtubeの動画をいくつか見たらすぐに勘を取り戻した。昔やっていたから、買ってくればなんとか使えるようになると言う自信があった。大学の教育も、こう言う意味で、役に立つ。ただ、当時は、真面目に勉強しない、半ば落ちこぼれていた劣等生だったが(笑)実験・実習は必修だったので、サボれなかった。
SPI0のSCLKピンを調べるとちゃんとクロックパルスが出ていた。
一方、SPI1のクロックは、40番ピンなのだが、信号が出ていない(泣)。
事前の設定はちゃんとやっている。/boot/config.txt に、次のような設定を書き加えて、rebootしている。
# SPI1 activated
dtoverlay=pi3-disable-bt
dtoverlay=spi1-3cs
bluetoothを無効にしているし、spi1の有効化を指示している。結果的に、
$ ls -l /dev/sp*
crw-rw---- 1 root spi 153, 3 6月 18 20:55 /dev/spidev0.0
crw-rw---- 1 root spi 153, 4 6月 18 20:55 /dev/spidev0.1
crw-rw---- 1 root spi 153, 2 6月 18 20:55 /dev/spidev1.0
crw-rw---- 1 root spi 153, 1 6月 18 20:55 /dev/spidev1.1
crw-rw---- 1 root spi 153, 0 6月 18 20:55 /dev/spidev1.2
で、デバイスの有効化は確認できている。
Spi1のMOSIピンは、38番ピン、MISOピンは35番ピン、両者を直結して、
pythonで、
----------------------
>>> import spidev
>>> spi = spidev.SpiDev()
>>> spi.open(0, 0)
>>> spi.max_speed_hz = 1000000
>>> spi.xfer([0x02])
[0]
>>> spi.xfer([0x1])
[0]
>>> spi.open(1, 0)
>>> spi.max_speed_hz = 1000000
>>> spi.xfer([0x1])
[1]
>>> spi.xfer([0x2])
[2]
--------------------------
と言うようなことをやった。後半部分は、SPI1に関する操作だ、ちゃんと値を返している。
SPIというのは、基本、玉突きデータ送信で、MOSIで、マスター(ここでは、RPI)からデータを送り出すと、MISOでスレーブ(末端デバイス)から送り出されてきたデータを受け取るという仕組みである。したがって直結すると、デバイスはないが、マスター自身から送り出されたものをマスター自身が受け取るということになる。上記では、それをやっているわけで、前半のSPI0は、直結線がないので、何も受け取らないが、後半のSPI1の方は、直結しているので、ちゃんと送り出したデータをそのまま受け取っている。
このデータの送受信をSCLKから出るクロックパルスに基づいて同期化させているのだが、そのパルスが出ていなかったら、うまくいくわけがない。
そうしてだろう???