1

私は 16 MHz で動作する PIC18F45k20 に取り組んでおり、それを SPI スレーブとして使用しています。マスターからの SPI クロック レート (SCK) に関係なく、SPI の衝突や受信オーバーフローを回避するために、SPI バイト間にかなりの遅延 (~64 us) を常に追加する必要があることがわかりました。遅延がなく、SPI クロック レートが非常に遅い場合、SPI パケットの 95% は衝突やオーバーフローなしで通過します。

オンラインの投稿を見ると、これはこの PIC18 プロセッサやその他の PIC18 プロセッサの「機能」である可能性があると思われます。

  1. 他の人は、この同じスレーブの「機能」を観察しましたか?
  2. これが「機能」である場合、すべての PIC18 プロセッサに搭載されていますか?

次のようにして、割り込みなしで PIC18 をテストしました。

if (SSPSTATbits.BF)
{
  DataIn = SSPBUF;
  SSPBUF = DataOut;
}

割り込みを使用してテストしたところ、同じ課題が見られました。

本当にSPIクロックを正しく検出していないのだろうかと思います。

4

3 に答える 3

0

私が知っているように、PIC18 は 8 ビット マイクロコントローラーですが、その整数変数が 16 ビットにマップされていることが簡単にわかります。ただし、SPI は 8 ビット データで動作します。これは、マスターがこのマイクロコントローラーに 8 ビット以上 (16 ビットなど) を送信すると、SPI モジュールでオーバーフローが発生し、マスター クロックに応答できなくなることを意味します。したがって、スレーブ モードでは、マスターからのデータが 8 ビット構造であることを確認してください。ただし、pic18 が SPI 接続でマスターだった場合、スレーブが 16 ビット データを送信しても、pic18 は最初の 8 ビットの後にクロック データを保持し、バッファが読み取られて次の 8 ビットが空になるまで待機します。

于 2016-04-10T04:40:37.620 に答える
0

オシロスコープを使用している場合は、PIC が最後の SPI データ バイトを出力する前にチップ セレクトが解放されていないことを確認してください。チップ選択ラインを解放する前に、SPI ビジー ビットを待機する必要があります。

于 2013-03-20T13:15:45.017 に答える
0

私もこの問題に遭遇しましたが、考慮すべきことは、サポートされている SPI シンプルが MCU がSSPBUF に1バイトを受信できる速度を示すことです。

このバイトを SSPBUF から読み取ってバッファに格納するには、ポインタのインクリメントなどの作業が必要で、時間がかかります。これにより、マルチバイト SPI の実際の SPI 帯域幅が減少します。

于 2020-08-23T18:21:19.697 に答える