SPI対応デバイスへのSPIトランザクションを開始するには、SS(スレーブセレクト、別名チップセレクト)ラインをトランザクション全体でローに設定してから、エンドツーエンドトランザクションでハイにする必要があることをオンラインで読みました。SPIデバイスを1つだけ含む回路を作成する場合、SSラインの送信コマンドを下げてから毎回ssラインを上げる必要がありますか、それともssラインをローに接続してコマンドを無制限に送信できますか?私が使用しているデバイスはISD1700サウンドチップです。
SPI対応デバイスへのSPIトランザクションを開始するには、SS(スレーブセレクト、別名チップセレクト)ラインをトランザクション全体でローに設定してから、エンドツーエンドトランザクションでハイにする必要があることをオンラインで読みました。SPIデバイスを1つだけ含む回路を作成する場合、SSラインの送信コマンドを下げてから毎回ssラインを上げる必要がありますか、それともssラインをローに接続してコマンドを無制限に送信できますか?私が使用しているデバイスはISD1700サウンドチップです。
回答:
[@Kevinと@akohlsmithは、回答としてコメントを投稿する必要があります。
これは彼らのコメントを拡大することです。]
SPI 1は、SS(スレーブ選択ライン2)の正確な動作を規定していません。この動作は、個々のデバイスの実装に依存しています。私は、SSで永続的にアサートされる状態で動作できるデバイスを見てきました。SSの立ち下がりエッジと立ち上がりエッジを必要とするデバイスも見ました。
SSをトグルする必要があると明示的には述べていませんが
、設計ガイド(p.31)は、SSがSPIトランザクションを開始および終了することを述べています。SPIトランザクションを実行するにはSSを切り替える必要があると想定するのが賢明です。
1 SPIは、標準というよりはむしろカスタムです。
2 CS(チップセレクト)は、スレーブセレクトの別名です。
それは完全にスレーブデバイスに依存します。
スレーブデバイスのプロトコルに、固定長パケット、スタート/ストップバイト、またはパケット長を指定するヘッダーなど、何らかのフレーミングが含まれている場合、スレーブデバイスはチップセレクトなしで動作する可能性があります。現在作業中のボードにSPIフラッシュメモリチップがあり、チップセレクトの有無にかかわらず完全に満足しているようです。問題なく0V(有効)に永続的に配線できます。
これは実際に私たちにいくつかの問題を引き起こしました。請負業者がSPIを含む低レベルのI / Oのいくつかをセットアップしていて、私たち(そして彼ら!)は、チップセレクトが機能しないことに気づいていませんでした。同じバスに別のSPIデバイスを追加するためにSPI作業を拡張する必要があったのは、実際にはチップセレクトがないためでした。
逆に、多くのスレーブデバイスはデータをフレーム化するためにチップセレクトを必要とし、チップセレクトを最後に解放せずに予想されるパケットよりも多くのビット/バイトを送信すると、無効な転送と見なされて拒否されます。多くの場合、DACは新しい値をチップセレクトの立ち上がりエッジの出力にロードします。ADCも同様に、SPI転送を使用して変換を開始する(場合によっては時間を調整する)ため、トリガーとしてチップセレクトの立ち下がりエッジが必要です。
データシートには、実際に特定のチップをSPIで駆動する方法について何も書かれておらず、ググるほどのモチベーションがありません。読者のために残された運動...;)
SPIスレーブデバイスに関する具体的な知識がなければ、SSをLowに固定することはできません。
多くのデバイスは、SSのリーディングエッジを使用して、内部ロジックを新しいトランザクションの開始にリセットします。たとえば、メモリは最初の2バイトをアドレスとして解釈し、その後のバイトをデータとして解釈します。一部のメモリは、SSがディアサートされるまで物理的な書き込みを実行しません。
適切なプロトコルを備えた一部のデバイスでは、それを回避できる場合があります。ただし、市販のほとんどのデバイスでは動作しません。