SPIの基本を孊ぶ

SPISerial Peripheral Interfaceは、マむクロコントロヌラずその呚蟺ICの間でよく䜿甚されるむンタヌフェヌスの1぀です。぀たり、センサヌ、A/Dコンバヌタ、D/Aコンバヌタ、シフト・レゞスタ、SRAMなどずマむクロコントロヌラの接続に広く採甚されおいるずいうこずです。本皿では、たずSPIの基本に぀いお簡単に説明したす。次に、アナログ・デバむセズが提䟛するSPI察応のスむッチマルチプレクサ補品を玹介したす。曎に、それらのICを利甚するこずで、システムの基板蚭蚈においお、必芁なGPIOGeneral Purpose Input/Outputの本数を倧幅に削枛できるこずを瀺したす。

SPIは、同期匏党二重のメむン‐サブノヌド型むンタヌフェヌスです。メむンSPIメむンたたはサブノヌドSPIサブノヌドからのデヌタは、クロックの立䞊がりたたは立䞋がり゚ッゞによっお同期がずられたす。たた、メむンずサブノヌドは、同時にデヌタを送信するこずが可胜です。SPIには、3線匏のものず4線匏のものがありたす。本皿では、より䞀般的な4線匏のSPIを取り䞊げたす。

SPIの抂芁

図1. SPIにおけるメむンずサブノヌドの関係
図1. SPIにおけるメむンずサブノヌドの関係

4線匏のSPIデバむスには、次の4぀の信号がありたす。

  • クロックSPI CLK、SCLK
  • チップ・セレクトCS
  • メむン出力サブノヌド入力MOSI
  • メむン入力サブノヌド出力MISO

2皮類のデバむスのうち、クロック信号を生成する方がメむンず呌ばれたす。メむンずサブノヌドの間で送信されるデヌタは、メむンによっお生成されるクロックず同期しおいたす。SPIデバむスは、I2Cむンタヌフェヌスよりもはるかに高いクロック呚波数に察応したす。SPIに察応する補品を䜿甚する堎合には、必ずデヌタシヌトを参照し、SPIのクロック呚波数に関する仕様を確認しおください。

SPIでは、1぀のメむンに察し、耇数のサブノヌドを接続するこずができたす。図1に、SPIメむンずSPIサブノヌド間の接続を瀺したした。

メむンからのCS信号は、サブノヌドの遞択に䜿甚されたす。通垞、この信号はアクティブ・ロヌで、SPIバスからサブノヌドを切り離したい 送受信の察象から倖したいずきにハむにしたす。耇数のサブノヌドを扱いたい堎合、最も基本的な䜿い方では、メむンから各サブノヌドに察しお個別のCS信号を送信する必芁がありたす。本皿では、CS信号はすべおアクティブ・ロヌであるずいう前提の䞋に話を進めおいきたす。

MOSIずMISOは、デヌタを送受信するための信号線です。MOSIは、メむンからサブノヌドに察するデヌタの送信に䜿甚されたす。䞀方、MISOは、サブノヌドからメむンにデヌタを送信するために䜿われたす。

デヌタの送信

SPIによる通信を開始するには、メむンからクロック信号を送信するず共に、CS信号をむネヌブルにするこずによっお、サブノヌドを遞択する必芁がありたす。CS信号がアクティブ・ロヌである堎合、メむンはロゞック・レベルのロヌを送信するこずで、サブノヌドを遞択したす。SPIは党二重むンタヌフェヌスなので、メむンずサブノヌドはそれぞれMOSIずMISOによっお、同時にデヌタを送信できたす。぀たり、MOSI/SDOバスに察しおシリアルにデヌタをシフトさせお出力する送信動䜜ず、MISO/SDIバスのデヌタをサンプリング読み出しする受信動䜜を同時に行うこずが可胜です。その際には、シリアル・クロックの゚ッゞによっお、デヌタのシフトサンプリング凊理の同期がずられたす。SPIでは、クロックの立䞊がり゚ッゞず立䞋がり゚ッゞのうちどちらでデヌタをサンプリングシフトするかを、ナヌザが自由に遞択できたす。SPIを介しお送信されるデヌタのビット数に぀いおは、各デバむスのデヌタシヌトを参照しおください。

クロックの極性ず䜍盞

SPIメむンは、クロックの極性ず䜍盞を遞択できたす。CPOLビットは、アむドル状態におけるクロック信号の極性を蚭定するためのものです。アむドル状態ずいうのは、送信を開始するためにCSがハむからロヌに遷移するたでの間ず、送信を終了するためにCSがロヌからハむに遷移するたでの間のこずです。CPHAビットは、クロックの䜍盞を遞択するためのものです。CPHAビットにより、デヌタのサンプリングシフトにクロックの立䞊がり゚ッゞず立䞋がり゚ッゞのうち、どちらを䜿甚するのかを蚭定したす。メむンでは、サブノヌドの芁件に適合するように、クロックの極性ず䜍盞を遞択する必芁がありたす。衚1に瀺すように、CPOLビットずCPHAビットの組み合わせ方によっお、4぀のSPIモヌドが存圚するこずになりたす。

è¡š1. 4぀のSPIモヌド。CPOLビットずCPHAビットの組み合わせによっおモヌドが決たりたす。
SPIモヌド CPOL CPHA アむドル状態のクロックの極性 デヌタのサンプリングシフトに䜿われるクロックの䜍盞
0 0 0 ロゞック・ロヌ デヌタを立䞊がり゚ッゞでサンプリング、立䞋がり゚ッゞでシフト
1 0 1 ロゞック・ロヌ デヌタを立䞋がり゚ッゞでサンプリング、立䞊がり゚ッゞでシフト
2 1 0 ロゞック・ハむ デヌタを立䞋がり゚ッゞでサンプリング、立䞊がり゚ッゞでシフト
3 1 1 ロゞック・ハむ デヌタを立䞊がり゚ッゞでサンプリング、立䞋がり゚ッゞでシフト

図2図5は、4぀のSPIモヌドにおけるタむミング図の䟋です。各䟋においお、デヌタの倀はMOSIずMISOの郚分に瀺しおありたす。送信の開始ず終了は緑色の点線、サンプリング甚の゚ッゞは橙色、シフト甚の゚ッゞは青色で瀺しおいたす。なお、これらは、説明甚に䜜成した簡単な䟋に過ぎたせん。SPIによる通信機胜を適切に実装するには、補品のデヌタシヌトを参照しお、タむミング仕様が満たされおいるこずを確認する必芁がありたす。

図2. SPIモヌド0のタむミング図。CPOLは0、CPHAは0、アむドル状態のCLKはロヌです。デヌタを立䞊がり゚ッゞでサンプリングし、立䞋がり゚ッゞでシフトしたす。
図2. SPIモヌド0のタむミング図。CPOLは0、CPHAは0、アむドル状態のCLKはロヌです。デヌタを立䞊がり゚ッゞでサンプリングし、立䞋がり゚ッゞでシフトしたす。

図3は、SPIモヌド1のタむミング図です。このモヌドでは、クロックの極性を0に蚭定しおいるので、アむドル状態におけるクロック信号はロヌになりたす。䞀方、クロックの䜍盞に぀いおは1に蚭定しおいるので、デヌタは、クロック信号の立䞋がり゚ッゞ橙色の点線でサンプリングされ、立䞊がり゚ッゞ青色の点線でシフトされたす。

図3. SPIモヌド1のタむミング図。CPOLは0、CPHAは1、アむドル状態のCLKはロヌです。デヌタを立䞋がり゚ッゞでサンプリングし、立䞊がり゚ッゞでシフトしたす。
図3. SPIモヌド1のタむミング図。CPOLは0、CPHAは1、アむドル状態のCLKはロヌです。デヌタを立䞋がり゚ッゞでサンプリングし、立䞊がり゚ッゞでシフトしたす。

図4は、SPIモヌド2のタむミング図です。このモヌドでは、クロックの極性を1に蚭定しおいたす。そのため、アむドル状態におけるクロック信号はハむになりたす。クロックの䜍盞に぀いおは0に蚭定しおいるので、デヌタは、クロック信号の立䞋がり゚ッゞ橙色の点線でサンプリングされ、立䞊がり゚ッゞ青色の点線でシフトされたす。

図 4. SPIモヌド 2 のタむミング 図 。CPOL は1、CPHAは0 、アむドル 状 態の CLK は ハ むです。デヌタを立䞋がり゚ッゞで サンプリングし、立 侊 がり゚ッゞでシフトしたす。
図 4. SPIモヌド 2 のタむミング 図 。CPOL は1、CPHAは0 、アむドル 状態の CLK は ハむです。デヌタを立䞋がり゚ッゞで サンプリングし、立䞊がり゚ッゞでシフトしたす。

図5は、SPIモヌド3のタむミング図です。このモヌドでは、クロックの極性を1に蚭定しおいたす。したがっお、アむドル状態のクロック信号はハむになりたす。クロックの䜍盞に぀いおは1に蚭定しおいるため、デヌタは、クロック信号の立䞊がり゚ッゞ橙色の点線でサンプリングされ、立䞋がり゚ッゞ青色の点線でシフトされたす。

図5. SPIモヌド3のタむミング 図 。CPOL は1、CPHAは1、アむドル 状 態の CLK は ハ むです。デヌタを立 侊 がり゚ッゞで サンプリングし、立䞋がり゚ッゞでシフトしたす。
図5. SPIモヌド3のタむミング 図 。CPOL は1、CPHAは1、アむドル 状態の CLK は ハむです。デヌタを立䞊がり゚ッゞでサンプリングし、立䞋がり゚ッゞでシフトしたす。

マルチサブノヌド構成

先述したように、SPIでは1぀のメむンに察しお、耇数のサブノヌドを䜿甚するこずが可胜です。サブノヌドは暙準モヌドたたはデむゞヌチェヌン・モヌドで接続できたす。

暙準モヌド

図6. SPIによっおマルチサブノヌド構成を実珟した䟋
図6. SPIによっおマルチサブノヌド構成を実珟した䟋

暙準モヌドでは、メむンから各サブノヌドに察しお、個別にCS信号を送信する必芁がありたす。メむンがCS信号をむネヌブルにするロヌに匕き䞋げるず、遞択されたそのサブノヌドに察しお、クロックずMOSI/MISO䞊のデヌタが有効になりたす。耇数のCS信号がむネヌブルになるず、MISO䞊のデヌタが壊れおしたいたす。どのサブノヌドからデヌタが送信されおいるのか、メむンは識別できないからです。

図6に瀺すように、サブノヌドの数が増えるに連れお、メむンからのCS信号線の数も増えおしたいたす。メむンに必芁な入出力の数が著しく増加しおしたうので、珟実的には䜿甚できるサブノヌドの数には限りがあるずいうこずになりたす。この問題に぀いおは、いく぀かの察凊法がありたす。蚀い換えるず、暙準モヌドにおけるサブノヌドの数を無理なく増やすこずも可胜だずいうこずです。䟋えば、マルチプレクサを䜿甚しおCS信号を生成するずいう方法を採甚すれば、この問題に察凊できたす。

デむゞヌチェヌン・モヌド

図7. デむゞヌチェヌン・モヌドでマルチサブノヌド構成を実珟した䟋
図7. デむゞヌチェヌン・モヌドでマルチサブノヌド構成を実珟した䟋

マルチサブノヌド向けのもう1぀の接続方法がデむゞヌチェヌン・モヌドです。この方法では、すべおのサブノヌドに察しお、同䞀のCS信号を䟛絊したす。そしお、1぀のサブノヌドから次のサブノヌドぞず順にデヌタが䌝搬されるように、耇数のサブノヌドを配眮したす。この構成では、すべおのサブノヌドが同じクロックを同時に受信したす。メむンからのデヌタは1぀目のサブノヌドに匕き枡され、そこから順次、次のサブノヌドぞずデヌタが䌝搬しおいきたす。

この方法では、1぀のサブノヌドから次のサブノヌドぞず順にデヌタが䌝搬されたす。そのため、各サブノヌドにデヌタが到達するたでに必芁なクロック・サむクルの数は、デむゞヌチェヌンにおける各サブノヌドの䜍眮に比䟋したす。䟋えば、図7の䟋が8ビットのシステムであるずするず、3぀目のサブノヌドたでデヌタを送信するには、24個のクロック・パルスが必芁になりたす。それに察し、暙準モヌドであれば8個のクロック・パルスで枈みたす。図8に、デむゞヌチェヌンにおけるクロック・サむクルずデヌタの䌝搬の関係を瀺したした。なお、デむゞヌチェヌン・モヌドは、すべおのSPIデバむスでサポヌトされおいるずは限りたせん。補品のデヌタシヌトで、同モヌドを䜿甚できるかどうかを確認しおください。

図8 . デむゞヌチェヌンにおけるクロック・サむクルずデヌタの䌝搬の関係
図8 . デむゞヌチェヌンにおけるクロック・サむクルずデヌタの䌝搬の関係

アナログ・デバむセズのSPI向けスむッチマルチプレクサ

アナログ・デバむセズは、SPIを䜿甚する際に掻甚できるスむッチICを提䟛しおいたす。特に、最新䞖代の補品を䜿甚すれば、スむッチに起因する性胜劣化を生じさせるこずなく、実装スペヌスを倧きく削枛するこずができたす。以䞋では、SPIを最適な圢で利甚できるように蚭蚈されたスむッチマルチプレクサを掻甚するこずによっお、システム・レベルの蚭蚈を倧幅に簡玠化する方法を説明したす。具䜓的には、GPIOの必芁本数に泚目しお、その効果を瀺すこずにしたす。

たずは、シンプルなスむッチICを䜿甚した堎合にどのようなこずが起きるのかずいうずころから説明したす。「ADG1412」は、クワッド・タむプのSPST単極単投スむッチICです。図9は、マむクロコントロヌラに1個のADG1412を接続する堎合の抂念図です。この䟋では、マむクロコントロヌラの4本のGPIOを各スむッチの制埡入力に接続しおいたす。

図9 . マむクロコントロヌラのGPIOをスむッチの制埡信号ずしお䜿甚する䟋
図9 . マむクロコントロヌラのGPIOをスむッチの制埡信号ずしお䜿甚する䟋

このようなシンプルな方法を採甚した堎合、基板䞊のスむッチの数が増えるに連れ、必芁なGPIOの本数が激増しおしたいたす。䟋ずしお、テスト甚の蚈枬システムを蚭蚈するケヌスを考えたす。その堎合、システムのチャンネル数を増やそうずするず、非垞に倚くのスむッチが必芁になりたす。仮に、4個のADG1412を䜿甚しお、4 × 4のクロスポむント・マトリクスを構成するずしたしょう。そうするず、必芁なGPIOの数は16本に達したす。暙準的なマむクロコントロヌラを䜿甚したい堎合、このこずが足かせになっおしたうかもしれたせん。぀たり、システム党䜓ずしお芋た堎合、GPIOの数が䞍足しおしたう可胜性があるずいうこずです。図10に、マむクロコントロヌラの16本のGPIOを䜿甚しお、4個のADG1412を制埡する䟋を瀺したした。

図10 . マルチサブノヌド構成の䟋。この方法では、スむッチの数を増やすず、必芁なGPIOの数が激増したす。
図10 . マルチサブノヌド構成の䟋。この方法では、スむッチの数を増やすず、必芁なGPIOの数が激増したす。

必芁なGPIOの数を枛らすための1぀の方法は、図11に瀺すように、シリアル‐パラレル倉換噚を䜿甚するこずです。この回路では、同倉換噚をSPIのシリアル・むンタヌフェヌスによっお蚭定し、出力されるパラレル信号をスむッチの制埡入力ずしお䜿甚したす。この方法の欠点は、远加のコンポヌネントが必芁になるため、郚品点数BOMBill of Materialが増加しおしたうこずです。

図11. シリアル‐パラレル倉換噚を利甚したマルチサブノヌド構成
図11. シリアル‐パラレル倉換噚を利甚したマルチサブノヌド構成

この問題に぀いおは、有甚な代替策がありたす。それは、SPIによっおスむッチを制埡する機胜を備えたスむッチICSPI察応スむッチICを採甚するこずです。SPI察応スむッチICを䜿甚すれば、必芁なGPIOの数を枛らせるだけでなく、シリアル‐パラレル倉換噚も远加しなくお枈みたす。「ADGS1412」は、アナログ・デバむセズが提䟛しおいる代衚的なSPI察応スむッチICです。図12では、同ICを4個䜿甚しおいたす。それぞれの制埡は、マむクロコントロヌラからSPIの信号を䟛絊するこずによっお行いたす。そのために必芁なGPIOの数は、16本からわずか7本に削枛されたす。

図12 . SPI察応スむッチICを利甚したマルチサブノヌド構成。同ICを䜿甚するこずにより、必芁なGPIOの本数を節玄するこずができたす。
図12 . SPI察応スむッチICを利甚したマルチサブノヌド構成。同ICを䜿甚するこずにより、必芁なGPIOの本数を節玄するこずができたす。

たた、ADGS1412をデむゞヌチェヌン・モヌドで䜿甚すれば、必芁なGPIOの数を曎に枛らすこずができたす図13。同モヌドでは、マむクロコントロヌラがSPIメむンずしお機胜するために必芁なGPIOの数は、システムで䜿甚するADGS1412の数にかかわらず、わずか4本で枈みたす。

図13. SPI察応スむッチICをデむゞヌチェヌン・モヌドで䜿甚する䟋。この方法を採甚すれば、GPIOの必芁本数を曎に削枛できたす。
図13. SPI察応スむッチICをデむゞヌチェヌン・モヌドで䜿甚する䟋。この方法を採甚すれば、GPIOの必芁本数を曎に削枛できたす。

図13は、ADGS1412の䜿い方を説明するための抂念図です。実際には、同ICのデヌタシヌトに蚘茉されおいるように、SDOピンにはプルアップ抵抗を付加するこずが掚奚されたす。ADGS1412をデむゞヌチェヌン・モヌドで䜿う方法に぀いおは、同ICのデヌタシヌトをご芧ください。なお、図13では、回路を簡玠化するためにスむッチの数を4個ずしたした。実際には、システムで䜿甚するスむッチの数が増えるに連れ、基板の簡玠化ずスペヌスの削枛ずいう面で埗られる効果が非垞に倧きくなりたす。䟋えば、SPI察応スむッチICの補品矀の䞭からクワッド・タむプのSPSTスむッチを遞択し、それを8個䜿っお4 × 8のクロスポむント構成を実珟するずしたす。6局基板を䜿甚しおそのような回路を構成した堎合、基板䞊の占有面積を20%削枛できたす。なお、高粟床のSPI察応スむッチICを䜿甚しおチャンネル密床を高める方法に぀いおは、「高粟床のSPIスむッチにより、チャンネル密床を高める」を参照しおください

アナログ・デバむセズは、SPI察応スむッチICず同マルチプレクサICを数倚く提䟛しおいたす。詳现に぀いおは、こちらをご芧ください。

参考資料

ADuCM3029 デヌタシヌト「パワヌ・マネヌゞメントを統合した超䜎消費電力ARM Cortex-M3 MCU」AnalogDevices、2017幎3月

Stephen Nugent「高粟床の SPI スむッチにより、チャンネル密床を高める」Analog Dialogue、AD51-05

Miguel Usach、AN-1248、アプリケヌション・ノヌト「SPIむンタヌフェヌス」Analog Devices、2015幎9月

著者

Piyu Dhaker

Piyu Dhaker

Piyu Dhakerは、アナログ・デバむセズのアプリケヌション・゚ンゞニアです。2017幎6月から北米セントラル・アプリケヌション・グルヌプに所属。それ以前は、車茉パワヌ・トレむン・グルヌプやパワヌ・マネヌゞメント・グルヌプに所属しおいたした。2007幎にサンノれ州立倧孊で電気工孊の修士号を取埗しおいたす。