SPIはビットバンギングよりも大幅に高速ですか?


8

写真18f4550に基づくプロジェクトがあります。'595シフトレジスタに書き込むために、通常のioピンよりもspiを使用することには明確な利点がありますか?spiの方が速いと聞きましたが、どうだかわかりません。それはチップの他の部分とは異なる、より速いクロックを使用していますか、それとも単により効率的ですか?かなり少ない数の命令で、通常のioピンを介してバイトをビットバンギングできます。spiはより少ない処理能力を使用しますか?かなり激しい計算中にかなり頻繁にシフトアウトするので、できるだけ多くのサイクルを自分のプロセスに割り当て、シフトアウトしないようにします。

spiを使用したくない主な理由は、現在のレイアウトでは必要なピンへのアクセスが少し難しくなるためです。既にいくつかのピンを他のものに使用しており、それらをシャッフルする必要があるためです。物事を解体して移動する前に、どんなメリットがあるのか​​を知りたいと思いました。


5
あなたはビットバンギングによってSPIを行うことができます。
starblue

回答:


17

マイクロのspiペリフェラルまたは同期シリアル「エンジン」を「ビットバンギング」を介して同じシーケンスを生成することと比較していると仮定すると、はい、多少高速になる傾向がありますが、より重要なのは、プロセッサがバイト全体をペリフェラルを送信し、送信中に他のことを実行します。ビットバンギングの場合、プロセッサーは送信中に拘束される傾向があります(マイクロがマスターになる傾向があり、ほとんどのペリフェラルは完全に静的であるため、割り込みを処理したりポーリングするためにミッドバイトの一時停止を許容できます物事-インターフェースクロックのシリアルADCとサンプル間隔タスクは例外の顕著な例です)。

より有能なMCUでは、特に一方向のデータのみが重要な場合は、プロセッサからさらに注意を払うことなく、SPIエンジンを介してメモリからマルチバイト転送を実行するようにDMAコントローラをプログラムすることもできます。

しかし、多くのマイクロコントローラープロジェクトは、最終的にはそのタスクに高度に最適化されています。サイクルを節約し、速度の低下を許容できる場合は、ソフトウェアを複雑化してGPIOを使用できるようにして、物理的なレイアウトをきれいにすることは決して珍しい選択ではありません。


はい^。Chrisが述べているように、ハードウェアペリフェラルを使用する最大の利点は、データバイトをストリームからペリフェラルにハンドオフし、シフトアウトが完了して別のバイトの準備ができた場合に割り込みを介して通知できることです。これにより、バイトがシフトアウトされている間、CPU使用率が他のもののために解放されます。これは、これらのシリアルプロトコルのボーレートを考えると、マシンサイクルでの寿命になる可能性があります。
Jon L

3
SPIの寿命ではありません。速度について話している場合、SPIを10MHzで実行している可能性があります。これは、フルスピードで10 PIC命令にすぎません。それはほとんど年齢ではありません。次のバイトを準備するのにちょうど十分な時間です。割り込みを処理するのにかろうじて十分な時間です。
Rocketmagnet

2
規定されていない、意図された/必要なボーレートに多くが依存すると言うのは公平かもしれません。ただし、指摘したように、アプリケーションがスループットの不規則性/低下を許容できる場合、マイクロがマスターの場合、次のバイトの送信が遅れる可能性があります。
Chris Stratton

1
@Rocketmagnet、私は正直に立っています。SPIは思ったよりもはるかに高速です。UARTなどの低速のシリアルプロトコル(9600ボーは約10 kHz)を使用した場合と同じです。
Jon L

1
また、SPIマスターは比較的簡単に強打できることに注意してください。チップセレクトとクロックトランジションは、(外部割り込みピンのように)特別にタイミングを調整して処理する必要があるため、SPIスレーブは多少難しい場合があります。プロジェクトでSPIマスタービットバンスタイルを頻繁に使用しています。特に、高性能は必要ないがクリーンなボードが必要な場合(ホームエッチングにも適しています)。また、逆のことを行うのが一般的な慣例であることに注意してください。SPIとGPIO(ラッチピン)を使用して、データをシフトレジスタ(HC595など)にシフトします。
ハンス

10

ビットバンギングの利点:

  • プロトコルの絶対制御。
  • マイクロコントローラーで命令を実行する時間がSPIのボーレートよりも速い場合、それはより速くなる可能性がありますが、これはありそうもありません。比較的高速のマイクロコントローラーでは、非常に低速のSPIボーレートが必要です。
  • SPI割り込みよりもレイテンシを小さくできます。
  • ピンの選択。

ビットバンギングの欠点:

  • 処理するにはさらに多くのコードが必要-ボーレートタイミング-受信ビットの信頼できるサンプリング-プロセスフレーム境界*上記の各コードセグメントは、他のコードの実行に費やす可能性がある時間を消費します。

SPIの利点:

  • レジスタ構成は、ボーレートタイミング、受信ビットサンプリング、およびフレームカウントの処理を処理します
  • SPIを備えたほとんどのマイクロコントローラーには、各SPIペリフェラルに専用の割り込みベクターがあります(マイクロを再確認してください!)
  • 設定したら、SPI TX / RXバッファーが空/フルであるかどうかを確認し、バイトを書き込み/読み取りするだけです。
  • DMAが利用可能な場合、SPIはソフトウェアの干渉なしに連続したデータの大きなバッファを送信できます。

SPIの欠点:

  • 学習して構成するための追加の周辺機器(これは本当にデメリットですか?)
  • 追加のピンまたはピンの多重化が必要
  • 追加コスト(現在のマイクロコントローラーでは無視できる傾向があります)
  • SPIでノイズの問題が発生しましたが、それらは比較的高速(10MHz)のプロトタイプボード上にありました。
  • 非常に制限されたピンの選択

私にとって、ビットバンギングの利点は、SPIの利点と比較してわずかです。ビットバンギングの欠点は、SPIの欠点よりもはるかに大きくなります。ビットバンギングを選択する主な理由は、次の3つです。

  1. カスタム低速プロトコル
  2. 通信が低速で、アプリケーションの他の部分の計算要件が低い場合
  3. または、通信が低速でピンの選択が大きな問題である場合

8

PICでは、従来のビットバンSPIスタイルの実装では、ビットごとに約5サイクルかかります。18Fxxパーツに少し手を加えると、それを約4に削減できます(追加のオーバーヘッドのバイトあたり約3サイクルのコストがかかります)。その時間は、データをフェッチするために必要な時間(通常、バイトごとに3サイクル)に追加されます。したがって、バイトあたり約40〜43サイクルと計算します。ハードウェアSPIを使用すると、速度がビットあたり2サイクル+バイトあたり数サイクル増加します(他のものは連続転送を処理できますが、私が見たPICは処理できません)。SPIがバイトを送信している間プロセッサは次をフェッチできるため、全体で約18サイクル/バイトの時間を実現でき、速度は約2.5倍向上します。


0

ビットバンギング(BB)の場合、あなたは言及するのを忘れていました:

  1. 通信の期間中、プロセッサを拘束します。(SPIはレジスタをロードしてから、別のことをするために引き渡します)
  2. バックグラウンド割り込みはBBコードに深刻な干渉を与える可能性があり、シングルスレッドデザインでのみ役立ちます。BBコードはプロトコルの処理に100%の注意を払わなければならないことに注意してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.