PINF 6 PINF 5 PINF 4 - - PINF 1
17. 直列周辺インターフェース (SPI: Serial Peripheral Interface)
17.1. SSピンの機能 1. 従装置動作
SPIが従装置として設定されると、従装置選択(SS)ピンは常に入力です。SSがLowに保たれるとSPIは活性に(作動)され、使用者によっ てそのように設定されていればMISOは出力になります。他の全てのピンは入力です。SSがHighに駆動されると、出力として使用者設 定され得るMISOを除く全てのピンは入力、SPIは非活動で、それは到着データを受信しないことを意味します。一旦SSピンがHighに駆 動されると、SPI論理回路がリセットすることに注意してください。
このSSピンはパケット/バイト同期に対して、従装置ビット計数器が主装置クロック発生器との同期を保つのに有用です。SSピンがHighに駆動 されると、SPI従装置は直ちに送受信論理回路をリセットし、それはシフト レジスタ内で部分的に受信したどのデータも取り落とします。
17.1.2. 主装置動作
SPIが主装置(SPI制御レジスタ(SPCR)の主装置許可(MSTR)ビット=1)として設定されると、SSピンの方向は使用者が決められます。
SSが出力として設定されると、このピンはSPIシステムに影響を及ぼされない標準出力ピンです。代表的にはこのピンがSPI従装置のSSピン を駆動するでしょう。
SSが入力として設定されると、SPI主装置動作を保証するため、それはHighに保持されなければなりません。SSピンが入力として定義 されたSPI主装置として設定される時に周辺回路によってSSピンがLowに駆動されると、SPIシステムは他の主装置が従装置として選択し てデータ送信を始めると解釈します。バスの衝突を避けるためにSPIシステムは次の動作を行います。
① SPCRで主/従選択(MSTR)ビットが解除(0)され、SPIシステムは従装置になります。SPIシステムが従装置になる結果としてMOSIとSCKピン が入力になります。
② SPI状態レジスタ(SPSR)でSPI割り込み要求フラグ(SPIF)が設定(1)され、そしてSPI割り込みが許可(SPCRのSPIE=1)され、且つステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)なら、割り込みルーチンが実行されます。
従って割り込み駆動SPI送信が主装置動作で使用され、SSがLowに駆動される可能性があるとき、その割り込み(処理)はMSTRビットが 未だ設定(1)されていることを常に検査すべきです。MSTRビットが従装置選択によって解除(0)されてしまっていると、それはSPI主装置 動作を再び許可するため、使用者によって設定(1)されなければなりません。
17.1.3. データ転送形式
直列データに関してはSPI制御レジスタ(SPCR)のSCK位相(CPHA)とSCK極性(CPOL)制御ビットによって決定されるSCK位相と極性で4つ の組み合わせがあります。このSPIデータ転送形式は図17-3.と図17-4.で示されます。データ ビットは安定のためデータ信号に対して充分 な時間を保証するSCK信号の反対端でシフト出力と(入力)ラッチが行われます。これは以下で行われるように表17-3.と表17-4.を要約す ることによって明解にされます。
表17-2. CPOL,CPHA機能動作
CPOL SCK後行端
0 出力設定/下降端
入力採取/下降端 SCK先行端
0
入力採取/上昇端 出力設定/上昇端 SPI動作種別番号
0 1 2 3
1 1
CPHA 0 1 0 1
入力採取/下降端 出力設定/下降端
出力設定/上昇端 入力採取/上昇端 図17-3. SPIデータ転送形式 (CPHA=0)
LSB ビット1 ビット2 ビット3 ビット4 ビット5 ビット6 MSB MSB先行 (DORD=0)
SCK (CPOL=0) 動作種別 0 SCK (CPOL=1) 動作種別 2
MOSI (主装置送出) MISO (従装置送出) SS (従装置選択) MOSI/MISO入力採取
MSB ビット6 ビット5 ビット4 ビット3 ビット2 ビット1 LSB LSB先行 (DORD=1)
図17-4. SPIデータ転送形式 (CPHA=1)
LSB ビット1 ビット2 ビット3 ビット4 ビット5 ビット6 MSB MSB先行 (DORD=0)
SCK (CPOL=0) 動作種別 1 SCK (CPOL=1) 動作種別 3
MOSI (主装置送出) MISO (従装置送出) SS (従装置選択) MOSI/MISO入力採取
MSB ビット6 ビット5 ビット4 ビット3 ビット2 ビット1 LSB LSB先行 (DORD=1)
17.3. SPI用レジスタ
17.3.1. SPCR - SPI制御レジスタ (SPI Control Register)
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
7 6 5 4 3 2 1 0
ビット
SPCR
$2C ($4C)
R/W R/W
R/W R/W
R/W R/W
R/W R/W
0 0
0 0
0 0
0 0
Read/Write 初期値
● ビット7 - SPIE : SPI割り込み許可 (SPI Interrupt Enable)
ステータス レジスタ(SREG)の全割り込み許可(I)ビットが設定(1)されて、SPI状態レジスタ(SPSR)でSPI割り込み要求フラグ(SPIF)が設定(1)され ると、このビットがSPI割り込みを実行させます。
● ビット6 - SPE : SPI許可 (SPI Enable)
SPEビットが1を書かれるとSPIが許可されます。どのSPI操作を許可するにも、このビットが設定(1)されなければなりません。
● ビット5 - DORD : データ順選択 (Data Order)
DORDビットが1を書かれるとデータ語のLSBが最初に転送されます。DORDビットが0を書かれるとMSBが最初に転送されます。
● ビット4 - MSTR : 主装置/従装置選択 (Master/Slave Select)
このビットは1を書かれると主装置動作、論理0を書かれると従装置動作を選択します。SSが入力として設定され、MSTRが設定(1)の間 にLowへ駆動されると、MSTRが解除(0)され、SPI状態レジスタ(SPSR)でSPI割り込み要求フラグ(SPIF)が設定(1)になります。その後に使 用者はSPI主装置動作を再び許可するためにMSTRを設定(1)しなければなりません。
● ビット3 - CPOL : SCK極性選択 (Clock Polarity)
このビットが1を書かれると、アイドル時にSCKはHighです。CPOLが0を書かれると、アイドル 時にSCKはLowです。例については図17-3.と図17-4.を参照してください。CPOL機能 は右で要約されます。
表17-3. CPOL機能動作
CPOL SCK後行端
0 下降端
上昇端 SCK先行端
1
上昇端 下降端
● ビット2 - CPHA : SCK位相選択 (Clock Phase)
このSCK位相選択(CPHA)ビットの設定はデータがSCKの先行(先)端または後行(後)端で 採取/(設定)されるかを決めます。例については図17-3.と図17-4.を参照してください。
CPHA機能は右で要約されます。
表17-4. CPHA機能動作
CPHA SCK後行端
0 出力設定
入力採取 SCK先行端
1
入力採取 出力設定
● ビット1,0 - SPR1,0 : SPIクロック選択 (SPI Clock Rate Select 1 and 0)
これら2ビットは主装置として設定されたデバイスのSCK速度を制御します。従装置でのSPR1とSPR0は無効です。SCKと(システム)発振器ク ロック周波数fOSC間の関連は下で示されます。
表17-5. SCK速度選択 (fOSC=CPUクロック周波数) SPR1
SCK周波数
0
fOSC/4 fOSC/16
0
fOSC/64 fOSC/128
SPR0 0
0 1
1 0
1 0 1
1 0
1 1
1 0
fOSC/2 fOSC/8 fOSC/32
SPI2X
17.3.2. SPSR - SPI状態レジスタ (SPI Status Register)
SPIF WCOL - - - SPI2X
7 6 5 4 3 2 1 0
ビット
SPSR
$2D ($4D)
R/W R
R R
R R
R R
0 0
0 0
0 0
0 0
Read/Write 初期値
(MSB) (LSB)
7 6 5 4 3 2 1 0
ビット
SPDR
$2E ($4E)
R/W R/W
R/W R/W
R/W R/W
R/W R/W
不定 不定
不定 不定
不定 不定
不定 不定
Read/Write 初期値
● ビット6 - WCOL : 上書き発生フラグ (Write Collision Flag)
データ転送中にSPIデータ レジスタ(SPDR)が書かれると、このWCOLビットが設定(1)されます。WCOLビット(とSPIFビット)はWCOLが設定(1) されたSPI状態レジスタ(SPSR)を始めに読み、その後にSPIデータ レジスタ(SPDR)をアクセスすることによって解除(0)されます。
● ビット5~1 - Res : 予約 (Reserved Bit)
これらのビットは予約されており、常に0として読まれます。
● ビット0 - SPI2X : SPI倍速許可 (Double SPI Speed Bit)
このビットが論理1を書かれると、SPIが主装置動作の時にSCK速度(SCK周波数)が倍にされます(表17-5.参照)。これは最小SCK周期 が2CPUクロック周期であることを意味します。SPIが従装置として設定される時に、SPIはfOSC(CPUクロック周波数)/4またはそれ以下での 動作のみ保証されます。
本デバイスのSPIインターフェースはフラッシュ メモリやEEPROMの書き換え(読み書き)にも使用されます。直列プログラミングと照合については238 頁をご覧ください。
17.3.3. SPDR - SPIデータ レジスタ (SPI Data Register)
SPIデータ レジスタはSPIシフト レジスタとレジスタ ファイル(汎用レジスタ)間のデータ転送に使用される読み書き可能なレジスタです。このレジスタへ の書き込みがデータ送信を開始します。このレジスタの読み込みはシフト レジスタの受信緩衝部読み出しを引き起こします。