コンテンツ
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だけ壊れたかは不明ですが。
上みたいなエラーが出た人は、別のラズベリーパイ準備したほうがいいのかも。