SPIデバイスを1つだけ使用する場合、SSピンをLowに接続できますか?


8

SPI対応デバイスへのSPIトランザクションを開始するには、SS(スレーブセレクト、別名チップセレクト)ラインをトランザクション全体でローに設定してから、エンドツーエンドトランザクションでハイにする必要があることをオンラインで読みました。SPIデバイスを1つだけ含む回路を作成する場合、SSラインの送信コマンドを下げてから毎回ssラインを上げる必要がありますか、それともssラインをローに接続してコマンドを無制限に送信できますか?私が使用しているデバイスはISD1700サウンドチップです。


3
通常、はい、SSピンはスレーブデバイスにトランザクションの開始と終了を通知します。それがなければ、同期を保つことを保証するものは何もありません。動作する可能性がありますが、同期が取れなくなると元に戻りません。
Kevin White

4
@kevinWhiteは実際には、多くのSPIデバイスが内部状態マシンを開始するためにSS遷移を必要とします。特定のデバイスのデータシートで答えが得られるはずですが、すでに入手している場合は、それを試してみませんか?
akohlsmith

1
@akohlsmith-同意します。SSが必要なのは、それなしでは逃げられないということではありません。内部操作の実行を必要としないデバイスでも、マスターとの同期が取れなくなる可能性があります。SSを使用しないことを推奨している唯一の製造元は、SSが利用できないように複数の機能がピンに割り当てられている一部のデバイスのアナログデバイスです。それがどのように信頼できるかわかりませんし、デバイスを同期に戻すためにリセットが必要であるという苦情を聞いています。
ケビンホワイト

@akohlsmithに同意します。そして、あなたが質問に答えたいなら、私は賛成票を投じます。これが私の主張です。私は定期的にSPIを介してデバイスと通信します。ただし、同じデバイスへのSPIも必要とする割り込み駆動機能があります。SSピンを使用すると、現在のSPIトランザクションを終了せずに中断できるはずです。割り込みを処理するときのSPIデバイスへのアクセスを速くする。
st2000

回答:


14

[@Kevinと@akohlsmithは、回答としてコメントを投稿する必要があります。
これは彼らのコメントを拡大することです。]

SPI 1は、SS(スレーブ選択ライン2)の正確な動作を規定していません。この動作は、個々のデバイスの実装に依存しています。私は、SSで永続的にアサートされる状態で動作できるデバイスを見てきました。SSの立ち下がりエッジと立ち上がりエッジを必要とするデバイスも見ました。

SSをトグルする必要があると明示的には述べていませんが
、設計ガイド(p.31)は、SSがSPIトランザクションを開始および終了することを述べています。SPIトランザクションを実行するにはSSを切り替える必要があると想定するのが賢明です。

1 SPIは、標準というよりはむしろカスタムです。
2 CS(チップセレクト)は、スレーブセレクトの別名です。


6
これは非常に良い答えです。多くの/ほとんどのSPIターゲットデバイスは、SPI_CSラインに完全に依存しており、デバイス内部のビットキャプチャステートマシンを初期化して、イニシエーターとターゲットデバイスを同期します。MOSI信号ライン上でオンザフライで同期またはオペコードパターンを認識するだけで再同期できるデバイスがいくつかあります。ただし、これらは少数派であり、SPIデバイスを使用してシステムを設計する場合は、イニシエーターデバイスで追加の回路やGPIOを使用してその機能を提供する場合でも、各ターゲットデバイスにSPI_CSを提供することをお勧めします。
Michael Karas

別の答えを追加する必要はありません。あなたの答えは、@ kevinwhiteと私が言っていたことをキャプチャします。:-)
akohlsmith 16

5

それは完全にスレーブデバイスに依存します。

スレーブデバイスのプロトコルに、固定長パケット、スタート/ストップバイト、またはパケット長を指定するヘッダーなど、何らかのフレーミングが含まれている場合、スレーブデバイスはチップセレクトなしで動作する可能性があります。現在作業中のボードにSPIフラッシュメモリチップがあり、チップセレクトの有無にかかわらず完全に満足しているようです。問題なく0V(有効)に永続的に配線できます。

これは実際に私たちにいくつかの問題を引き起こしました。請負業者がSPIを含む低レベルのI / Oのいくつかをセットアップしていて、私たち(そして彼ら!)は、チップセレクトが機能しないことに気づいていませんでした。同じバスに別のSPIデバイスを追加するためにSPI作業を拡張する必要があったのは、実際にはチップセレクトがないためでした。

逆に、多くのスレーブデバイスはデータをフレーム化するためにチップセレクトを必要とし、チップセレクトを最後に解放せずに予想されるパケットよりも多くのビット/バイトを送信すると、無効な転送と見なされて拒否されます。多くの場合、DACは新しい値をチップセレクトの立ち上がりエッジの出力にロードします。ADCも同様に、SPI転送を使用して変換を開始する(場合によっては時間を調整する)ため、トリガーとしてチップセレクトの立ち下がりエッジが必要です。

データシートには、実際に特定のチップをSPIで駆動する方法について何も書かれておらず、ググるほどのモチベーションがありません。読者のために残された運動...;)


インターネットから取得したデバイスのデータシートには、(データシートのピン定義テーブルによると)SSがデバイスを有効にするために使用されているとしか記載されていないので、SSを低く結び、それが機能することを祈ります。また、SSがハイの場合、他のSPIラインは高インピーダンス状態になると述べています。成功を祈っている。

@マイク今朝、やる気が出てきたので、「ISD1700」とググった。最初の2つのリンクは2つのPDFファイルでした。最初のものはあなたがリンクしたデータシートでした。2つ目は、チップの駆動方法を正確に説明した設計ガイドです。設計ガイドには次のように記載されています(31ページのセクション10.2)。「SPIトランザクションはSS〜ピンの立ち下がりエッジで開始されます。」したがって、データシートには、計画しているものを回避することはできないと記載されています。そして、私はここであまり卑劣になりたくありませんが、JFGIがあり、出てきた上位2つのリンクを読んだ場合は、あなた自身の質問に答えることができたでしょう。
Graham

3

SPIスレーブデバイスに関する具体的な知識がなければ、SSをLowに固定することはできません。

多くのデバイスは、SSのリーディングエッジを使用して、内部ロジックを新しいトランザクションの開始にリセットします。たとえば、メモリは最初の2バイトをアドレスとして解釈し、その後のバイトをデータとして解釈します。一部のメモリは、SSがディアサートされるまで物理的な書き込みを実行しません。

適切なプロトコルを備えた一部のデバイスでは、それを回避できる場合があります。ただし、市販のほとんどのデバイスでは動作しません。


これについては数年遅れました。そして私も答えを探していたのでここにいます。あなたがオリンを追加した非常に良い情報と他の人からの良い情報。問題は主に「チップセレクト」または「スレーブセレクト」という言葉の解釈にあると思います-何かを仮定することを強制された場合、仮定は単にそのデバイスをアクティブにし、他のすべてのスレーブデバイスをオフにすることを意味しますスレーブとマスター間の通信を妨害します。公正で論理的な「前提」。このトピックがこのスレッドでここにクリアされているのは素晴らしいことです。
ケニー

このトピックからの他の次の質問は-----チップセレクト/チップイネーブルピンを永続的に「有効」にしてはならない場合、spiスレーブデバイスをいつ有効または無効にする必要があるのでしょうか?たとえば、スレーブに送信された各コマンドの完了後にスレーブデバイスを無効にしますか?
ケニー、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.