SPIスレーブは全二重モードで送信を開始できますか?


8

私の知る限り、SPIスレーブのSPI送信は以下のように機能します。

  1. マスターはSSピンを使用してスレーブを選択します
  2. マスターとスレーブが同時にデータを互いに送信する
  3. マスターはクロックとデータ送信を同時に開始します(書き込み操作の前にクロックはありません)
  4. スレーブは送信するデータがまだある場合でも、マスターは必要に応じていつでも(書き込み操作とクロック生成を停止することにより)送信を停止します。

スレーブがマスターの許可なしにデータを送信できるようにするSPIスレーブ構成はありますか?

大声で考えているだけです。スレーブが1つだけあり、マスターなどから連続クロックが提供されていると仮定します。

SPIのスタートストップビットがないため、想定されたステートメントがtrueであっても、マスターとスレーブはバイト同期を失いません(つまり、ビットストリームを受信しません)。

このドキュメントの次のセクションを読んだので、私はそのような質問をしています

2.2 SPIの例

添付のSPIの例は、同期モードでのUSARTの使用を示しています。USART2がマスターであるのに対し、USART1はスレーブとして構成されています。以下のトランザクションが行われます。

  • マスターからスレーブへのデータ送信。
  • スレーブからマスターへのデータ送信。
  • マスターからスレーブへのデータ送信とスレーブからマスターへのデータ送信を同時に行います。

このドキュメントではSPIの例を示していますが、USARTデバイスを使用して例を実現しています。そして私は、USARTスレーブがマスターの許可なしに送信を開始できることを理解しています。

ドキュメントで参照されているソースコードが見つかりませんでした。


4
スレーブは、定義により、トランザクションを開始することはできません(ただし、マスターに割り込みをかけてトランザクションを開始させることはできます)。
Peter Smith、

5
従来のSPIでの単方向データ転送は、他の方向に向かう回線の状態を無視するだけの人です。書き込み、読み取り、および双方向転送は、実際には何の違いもありません。実際、たとえば、多くのSPIペリフェラルは、何が要求されているかを知る前に、最初のワードでステータスワードをクロックアウトします。
Chris Stratton

回答:


17

いいえ、SPIでは、すべての通信がマスターデバイスによって駆動されます。マスターが単純に連続クロックを提供することはできないのは正しいことです。バイト境界を検出する方法はありません。

多くの場合、スレーブデバイスには、使用可能なデータがあることをマスターに通知するための個別の出力ピンがあります。このピンは、マイクロコントローラの入力に接続され、割り込みとしてよく使用されます。

次に、デバイスはピンをアサートして、マイクロコントローラーにSPIバスをスピンアップさせることができます。


詳細については、次を参照してください:)これは、ここにある説明を少し変更したバージョンです

スレーブデバイスは、マスターからクロックが提供された場合にのみ通信できます。これにより、スレーブが応答するのに十分なクロックサイクルをマスターに提供させる必要があるため、スレーブからの読み取りが複雑になります。

マスターからSPIコマンドを送信すると、実際には同じ8つのクロックパルス中に2つの送信が発生します。1つ目は、バイトがMOSIラインからクロック出力されることです。しかし、同時に、データはMISOラインを介してマイクロコントローラーに入力されます。

しかし、スレーブはこれらのトランザクションが終了するまで完全なコマンドを取得しないため、バスにデータを提供しません。この結果、受信した値は0x00または0xFFになります。

次に、スレーブが実際の値を返すことができるように、8つのクロックを追加する必要があります。多くのコード実装では、これは「ダミーバイト」をスレーブに送信することによって行われます。

最初の送信では、マスターはスレーブから到着したものをすべて無視することに注意してください。2回目の送信では、スレーブはマスターから送信されたものをすべて無視します。

それは一般的なケースを説明しています。さらに複雑になる可能性があります。たとえば、一部のスレーブICは、マスターからコマンドを受信するのと同時に、ある種のステータスバイトを実際に出力します。したがって、この場合、マスターは最初に受信したバイトを破棄すべきではありません。


2
「マスターは単に連続したクロックを提供することはできません」実際、私はそれを正確に実行するデバイスをそれほど前に見たことがありません。それは奇妙な小さな獣でした。残念ながらP / Nは思い出せません。
アーロン

@アーロン知っておくと良いです!人々はどんどん賢くなり続けています:-)
ビットマック

7

いいえ、マスターはチップセレクトを調停してクロックを駆動するマスターです。スレーブは常にクロックとチップセレクトのみをリッスンします。データ転送は全二重でも可能です。クロックを連続させることができる実装もいくつかありますが、いずれにせよバイト境界を同期するためにチップセレクトが使用されるため、それほど重要ではありません。ただし、マルチマスターシステムがあるため、基本的には、デバイスがスレーブとマスターを決定するためのメカニズムを使用できます。または、スレーブがマスター用のデータパケットを持っていることをマスターに通知するための個別の「割り込み」ワイヤを含めるだけです。


マルチマスターシステムの例を追加できますか?
davidcary
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.