Tools + Simulatorsnanase.cc / tools

SPI

バス

0 / 0 クロック
速さ 速さ

クロック/秒

波形

全体

拡大

CS 選択SCK クロックMOSI マスタ → スレーブMISO スレーブ → マスタ読み取り

結果
–
マスタの受信
–
スレーブの受信
–
MISO の余裕
–
所要時間
–

つなぎ方

宛先

データ 1 データ 1

データ 2 データ 2

データ 3 データ 3

モード

ビットの順

場面

f クロック

Hz

L 配線の長さ

m

  1. 14 本の線

    クロック・2 本のデータ・選択

  2. 2CS で選ぶ

    Low にした 1 台だけが応答

  3. 3シフトレジスタの交換

    1 クロックで 1 ビットずつ入れ替え

  4. 4出すエッジと読むエッジ

    出したエッジと反対のエッジで読み取り

  5. 54 つのモード

    CPOL で待機の向き、CPHA で読むエッジ

  6. 6ビットの順

    多くの機器は MSB から

  7. 7デイジーチェーン

    押し出されたバイトが次の機器へ

  8. 8MISO の遅れ

    往復の遅れが半周期を超えると読み違い

動作原理と式

線と役割

SPI は 4 本の線でつなぎます。マスタが出すクロック SCK、マスタからスレーブへのデータ MOSI、スレーブからマスタへのデータ MISO、相手を選ぶ CS(SS とも呼ぶ)です。CS は機器ごとに 1 本あり、Low にした機器だけが応答します。選ばれていない機器は MISO を放し(ハイインピーダンス)、線に何も出しません。

どの線も機器が直接 High・Low に駆動します(プッシュプル)。I2C のようなプルアップ抵抗の立ち上がりの遅れはなく、速さを決めるのは主に信号が届くまでの遅れです。

シフトレジスタの交換

マスタと機器はどちらも 8 ビットのシフトレジスタを持ち、MOSI と MISO で輪につながります。SCK の 1 クロックごとに、両方のレジスタが 1 ビットずつ相手へ送り出し、空いた所に相手のビットを受け取ります。8 クロックでマスタのバイトとスレーブのバイトが入れ替わります。送るだけ・受け取るだけの通信も、中ではいつも交換です。

4 つのモード

CPOL は待機中の SCK の向き、CPHA は読み取るエッジを決めます。

  • モード 0(CPOL 0・CPHA 0): 待機は Low。立ち上がりで読み、立ち下がりで次のビットを出す
  • モード 1(CPOL 0・CPHA 1): 待機は Low。立ち上がりで出し、立ち下がりで読む
  • モード 2(CPOL 1・CPHA 0): 待機は High。立ち下がりで読み、立ち上がりで出す
  • モード 3(CPOL 1・CPHA 1): 待機は High。立ち下がりで出し、立ち上がりで読む
  • CPHA 0 では、CS を下げた時点で最初のビットを出しておく

マスタと機器で読むエッジが逆だと、相手がビットを変えるのと同じエッジで読むことになり、値は定まりません。モード 0 と 3 はどちらも立ち上がりで読むので、両方に対応する機器が多くあります。

MISO の遅れ

マスタが出した SCK は配線を通って機器に届き、機器は出力の遅れ tv の後に MISO を変えます。その MISO がまた配線を通ってマスタへ戻るので、マスタから見た遅れは往復分です。マスタは次の読み取りまでの半周期のうちに、セットアップ時間 tsu を残して受け取る必要があります。

trt=2Ltpd+tv余裕=12f−trt−tsu

L は配線の長さ、tpd は 1 m あたりの伝わる遅れです。余裕が負になると、マスタは機器が次のビットを出す前の値、つまり 1 つ前のビットを読みます。MOSI は SCK と同じ向きに同じ距離を進むので、配線の長さでは崩れません。

デイジーチェーン

CS を 1 本にまとめ、前の機器の出力を次の機器の入力へつなぐと、全体が 1 本の長いシフトレジスタになります。3 台なら 24 クロック送り、最初に送ったバイトがいちばん奥の機器に届きます。CS を上げた時点で、各機器は手元のバイトを受け取った値とします。

出典

  1. 信号名 SCK・MOSI・MISO・SS(2.2 節)、CPOL・CPHA の定義と 2 つの転送の形(3.3.1 節・4.4 節)Motorola, SPI Block User Guide S12SPIV2/D, V02.07, 2002
  2. モード 0〜3 と CPOL・CPHA の対応(22.4 節 表 22-2)Microchip Technology, ATmega324PB データシート, Data Modes
  3. フラッシュメモリ: モード 0 と 3(6.1 節)、tCLQV 最大 6 ns(9.6 節)Winbond, W25Q64JV Datasheet, Revision M, 2024
  4. 加速度センサ: CPOL 1・CPHA 1、SCLK の立ち下がりから SDO まで tSDO 最大 40 ns、最大 5 MHz(表 10)Analog Devices, ADXL345 Data Sheet, Rev. E
  5. AD 変換器: SPI モード 1(10.1.1 節)、SCLK の立ち上がりから DOUT まで tDOPD 最大 50 ns(7.7 節)Texas Instruments, ADS1118 データシート SBAS457F, 2019
  6. LED ドライバ: 立ち上がりで取り込み立ち下がりで DOUT に出す、デイジーチェーン、tDO 最大 25 ns、最大 10 MHzMaxim Integrated, MAX7219/MAX7221 データシート 19-4452, Rev. 6, 2021
  7. LAN ケーブルを伝わる遅れ 538 ns/100 mBelden, 1583A DataTwist 350 技術データ, Revision 2, 2004

このツールで決めたこと

  • 用語は I2C のページに合わせてマスタ・スレーブとする。線の名前は SCK・MOSI・MISO・CS とする(COPI・CIPO・SDO・SDI・SS とも呼ぶ)
  • マスタの出力の遅れは 3 ns、セットアップ時間とホールド時間はどれも 4 ns。この間に入力が変わると値は不定とする
  • 配線を伝わる遅れは 1 m あたり 5.4 ns(LAN ケーブルの値を丸めた)
  • 機器のモードと出力の遅れは、出典の 4 つのデータシートの値を使う。機器ごとの最大クロック(加速度センサの 5 MHz など)は制限しない
  • 機器はモード・出力の遅れ・返す 2 バイトだけを持つ。デイジーチェーンの機器は LED ドライバで、CS を上げると受け取った値で LED が光る
  • 機器はどれも MSB から送る。マスタだけ LSB からに変えられる
  • CPHA 1 の機器は、最初の出すエッジまで意味のない値(1)を出す

関連ツール