30 Mbps×同時送受信 シリアル・インターフェース SPIの最高転送速度

特集 緊急実験! 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