SPIは中断しても安全ですか?


17

ファームウェア内からmicroSDカードに書き込んでいますが、これは優先度が最も低いタスクなので、読み取り/書き込み中に他のタスクによって中断される可能性があります。

ここで、UARTを使用してこのmicroSDカードと通信したとします。読み取り中の問題は、ハードウェアRX FIFOがオーバーフローすることであるため、努力できる最大遅延は(FIFOサイズ×バイト/秒)であり、書き込み中は問題はありません。次の文字を送信します。

SPIを使用している今、これはどのように機能しますか?書き込みの場合は問題ではなく、読み取りの場合はSPI FIFOサイズに依存する状況と同じですか?

回答:


22

SPIデバイスの大部分は、指定された最大値を下回るデータレートで完全に満足します。トランザクションの一部を実行し、任意の時点で休憩を取り、数年後に戻ってそれを完了することができます。クロック、セレクト、または電源ラインにグリッチがなければ、トランザクションは正常に完了します。

注意すべき3つの主な注意事項があります。

  1. 一般に、SPIバスでトランザクションが開始されると、そのトランザクションが完了するまで、バス上のワイヤを他の目的に使用することはできません。一般的に、これは、バスを使用する唯一のものである場合を除き、割り込みがSPIバスを使用できないことを意味します(割り込みがバスを排他的に使用することがあり、メイン他の時間に排他的に使用するプログラム)。一部のデバイスには、トランザクションの途中でバスを「無視」するための特別なピンが含まれていますが、そのような機能を備えていても、あるデバイスでSPIトランザクションを中断したり、他のデバイスでトランザクションを実行したりすることはお勧めできません。そして、基礎となるコードに最初のトランザクションを再開させます。割り込みに別のSPIバスを使用させる方が良いでしょう。
  2. 一部のデバイスは、トランザクションが長すぎると奇妙に動作する場合があります。たとえば、一部のリアルタイムクロックチップは、時刻/日付レジスタをダブルバッファリングせず、代わりにトランザクション中に発生する「タイムアドバンス」イベントをラッチし、トランザクションの完了後にそれらを適用します。トランザクションに時間がかかり、2番目の時間進行イベントが到着すると、後者のイベントは無視され、その時間だけクロックがスリップします。そのような方法でチップを設計する言い訳は本当にありません(データをダブルバッファリングするコストが必要ない場合でも、ソフトウェアが「更新遅延」ロジックを追加するよりも一貫性を確保する責任があることを明記し、クロック障害の可能性を最小限に抑えます)が、そのようなチップは存在します。
  3. クロックとデータ信号を使用するが、フレーミングを示すために「一時停止」を使用するデバイスがいくつかあります。私が遭遇したこの最も最近の例は、電球ごとのコントローラーのLEDライトストリングです。私はそのようなデザインが特に好きではありません(クロックを介さずにデータワイヤで3つの連続した立ち上がりエッジを使用してフレーミングを示すこともできます)が、このようなデバイスも存在します。

特定の種類の通信では特定のタイミングを使用する必要がありますが、SPIデバイスがそれらを必要とする理由はほとんどありません。それにもかかわらず、そのようなデバイスの存在に注意する必要があります。


3
+1いいね!あなたの意見/欲求不満のすべてに完全に同意します。それも何度も見ました。
DrFriedParts

11

仕様のコピー(著作権/ NDAの理由から引用できない)をチェックすると、0Hzから始まるSPIレートが指定されており、静的動作が問題ないことを示しています。SPIでは、デバイスがクロックされている間のみデータを取得するため、ハードウェアSPIを使用する場合は、データが送信された後(0 / do n't care)でも何かを受信します。その点で、いつでも非請求データを受信できるUARTとは異なります。


だから、私の唯一の心配は、MicroSDカードにはある種のタイムアウトビルドインがありますが、SPI自体はないということですか?
ミュイス

5
私が見ることができるすべての仕様によると、SDカードにもタイムアウトの形式はないはずですので、実際に問題があるはずだとは思わないでください。数年前、カスタムコードをいくつか作成しましたが、デバッグ中にコードを1ステップ実行すると、SPI操作の間に10秒以上の間隔が空けられ、すべてがうまくいきました。
PeterJ

1
+ 1、SPIを0 Hzまで実行できることは、デバッグのために知っておくと便利です。ありがとう。
アニンドゴーシュ

1
一部のSPIデバイスでは、データ出力が特定のクロックエッジでのみ変化できることに注意する価値がありますが、他の一部では、データ出力が非同期に変化する場合があります。これは、特に「ビジー」ビットで一般的です。一部のチップでは、「ビジー」ビットの状態をクロックアウトし、デバイスがビジーにならないときにまだ出力にある場合、出力は非同期に変化します。他の一部のチップでは、報告された「ビジー」状態は、再クロックされるまで変わりません。どちらのデザインにも長所と短所があるため、両方のタイプのデザインが存在することを知っておくと役立ちます。
supercat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.