ラズベリーパイを使ってみる – SPIデバイスが使えない? –

スポンサーリンク

コンテンツ

SPI=電子工作向けのインタフェースのようなもので、それに対応しているとGPIOとかで高速な通信が使えるみたいです。
GPIOにつなぐA/Dコンバータや液晶ディスプレイなど、高速な通信が必要なGPIOデバイス用のインタフェースみたいです。GPIOむけのUSB2.0とか3.0というところか?

使ってみる

Raspberry PiでSPIを使うには @ ともの技術メモさんのブログを参考に設定してみた。

が…テスト用プログラムでコンパイルエラーがでる(´・ω・`)。こんなの

gcc -o spidev_test spidev_test.c
spidev_test.c: In function ‘transfer’:
spidev_test.c:60:13: error: ‘SPI_TX_QUAD’ undeclared (first use in this function)
spidev_test.c:60:13: note: each undeclared identifier is reported only once for each function it appears in
spidev_test.c:61:5: error: ‘struct spi_ioc_transfer’ has no member named ‘tx_nbits’
spidev_test.c:62:18: error: ‘SPI_TX_DUAL’ undeclared (first use in this function)
spidev_test.c:63:5: error: ‘struct spi_ioc_transfer’ has no member named ‘tx_nbits’
spidev_test.c:64:13: error: ‘SPI_RX_QUAD’ undeclared (first use in this function)
spidev_test.c:65:5: error: ‘struct spi_ioc_transfer’ has no member named ‘rx_nbits’
spidev_test.c:66:18: error: ‘SPI_RX_DUAL’ undeclared (first use in this function)
spidev_test.c:67:5: error: ‘struct spi_ioc_transfer’ has no member named ‘rx_nbits’
spidev_test.c: In function ‘parse_opts’:
spidev_test.c:172:12: error: ‘SPI_TX_DUAL’ undeclared (first use in this function)
spidev_test.c:175:12: error: ‘SPI_TX_QUAD’ undeclared (first use in this function)
spidev_test.c:184:12: error: ‘SPI_RX_DUAL’ undeclared (first use in this function)
spidev_test.c:186:12: error: ‘SPI_RX_QUAD’ undeclared (first use in this function)
spidev_test.c: In function ‘main’:
spidev_test.c:204:18: error: ‘SPI_IOC_WR_MODE32’ undeclared (first use in this function)
spidev_test.c:208:18: error: ‘SPI_IOC_RD_MODE32’ undeclared (first use in this function)

ためしたこと

SPI=linuxドライバ=カーネルモジュールは認識しているっぽい

$ lsmod
Module                  Size  Used by
snd_bcm2835            16165  0
snd_soc_bcm2708_i2s     5474  0
regmap_mmio             2806  1 snd_soc_bcm2708_i2s
snd_soc_core          131268  1 snd_soc_bcm2708_i2s
regmap_spi              1897  1 snd_soc_core
snd_pcm                81593  2 snd_bcm2835,snd_soc_core
snd_page_alloc          5156  1 snd_pcm
regmap_i2c              1645  1 snd_soc_core
snd_compress            8076  1 snd_soc_core
snd_seq                53769  0
snd_timer              20133  2 snd_pcm,snd_seq
snd_seq_device          6473  1 snd_seq
leds_gpio               2059  0
led_class               3688  1 leds_gpio
snd                    61291  7 snd_bcm2835,snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress
spi_bcm2708             4728  0
i2c_bcm2708             3997  0

デバイスもある

$ ls -la /dev/spi*
crw-rw---T 1 root spi 153, 0 Jan  1  1970 /dev/spidev0.0
crw-rw---T 1 root spi 153, 1 Jan  1  1970 /dev/spidev0.1

が…SPIテスト用プログラムがコンパイルすらできない(´・ω・`)

古いモデルBだとダメ?

試したのがmodmypiで買ったモデルBで、たしか2012年10月?ごろにかったもの。メモリ512MBあるやつ

試しに最近買ったモデルB(2013年5月ごろだったと思う)で

gcc -o spidev_test spidev_test.c

をやったらあっさりコンパイルできた。

古いモデルBがダメなのか、単に自分がModMyPiで買ったモデルBのSPIだけ壊れたかは不明ですが。
上みたいなエラーが出た人は、別のラズベリーパイ準備したほうがいいのかも。