特集 緊急実験! 5 ドル I/O コンピュータ上陸 30 Mbps× 同時送受信! やいかに シリアル・インターフェース SPI の最高転送速度 渡辺 研 本章では,SPI での通信速度実験(写真 1)を行い ます.第 9 章までの GPIO の実験に続いて,ラズベ リー・パイの SPI を調べます. SPI は,I2C のように通信速度の規格はありません. Ken Watanabe 3 4 5 GND 転送速度には瞬間的な最大速度という見かたと,長 い時間における平均速度という見かたとがありますが, ここでは後者の平均速度の測定を行います. ● 高速 SPI を使うときも WiringPi で OK ラズベリー・パイ用の I/O 関数セット WiringPi の シリアル系制御用関数には,Linux 自体に用意されて いる I/O 制御関数(システム・コール)ioctl が使わ れ て い ま す. 事 前 実 験 と し て wiringPi を 使 わ ず に ioctl を使った送受信プログラムも比較しましたが, 細かい転送サイクルなどに関して WiringPi とほとん ど差異はありませんでした. SCLK 125MHz 2V 10ns データ ラッチ MOSI MISO データ送出 1 0 MSB 1 0 1 0 LSB 図 1 SCLK = 125 MHz 動作での MOSI/MISO タイミング波形 2016 年 3 月号 MOSIとMISOのショート GND 写真 1 MOSI と MISO をジャンパ・ソケットでショートしてオ シロスコープで観測 ● SPI クロック周波数の設定 SPI の速度設定を行うときは,wiringPiSPISet up 関数で直接周波数の数値を与えれば OK です.モ ード設定もできる wiringPiSPISetupMode 関数 でも同様です. 次 に wiringPiSPIDataRW 関 数 で SPI 転 送 の 実 行 を し ま す.wiringPiSPIDataRW 関 数 で は ioctl へ速度を含めた設定内容が渡されます. ラズベリー・パイでは SCLK の設定は 125 MHz が 最大なので,「125000000」を設定し動作をさせると図 表 1 出力周波数はと びとびの値をとる レ ジ ス タ 値 0x0000 は 65536として扱われる レジスタの値 出力周波数[Hz] 0x0002 125000000 0x0004 62500000 0x0006 41666667 0x0008 31250000 0x000A 25000000 0x000C 20833334 0x000E 17857142 0x0010 15625000 0xFFFC 3815.9 0x0000 3814.7 ∼ 0 SCLK信号 ∼ 1 1 2 オシロスコープ のプローブ 転送レートや一度に送るデータ量はユーザが決めま す.実験では 168 通りの組み合わせで試します(写 真 1).FPGA やマイコンなどクロック周波数やパ ケット転送量を選べる IC と,ラズベリー・パイを 接続するときの参考にできそうです. 〈編集部〉 SPI の転送速度設定と実験の方法 イントロダクション 第 10 章 IC やモ 16ビット/2 MSpsのA−Dコンバ ジュール ータやFPGAと高速データ通信 の拡張性 105 6 7 8 9 10
© Copyright 2024 ExpyDoc