2040475_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2040475_ja-JP

2040475_ja-JP

MPC5674FでのSPIタイムアウト遅延の計算

Hello,

264MHzで動作するMPC5674Fマイクロコントローラ用のSPIドライバに取り組んでおり、ポーリングベースのSPIトランザクションのタイムアウト遅延を計算する必要があります。SPI 転送の完了は、転送完了フラグ (TCF) を使用して監視され、反復回数に基づくタイムアウトが使用されます。

システムクロックの詳細:

  • MCU周波数 = 264MHz
  • クロック周期 = 1/264MHz = 3.78787879 ns (サイクルあたり約 3.79 ns)

コード スニペット:


#define SPI_MAX_WAIT_ITERATIONS 100

// Wait until the transfer is complete.
// The TCF bit indicates that all bits in a frame have been shifted out.
while (p_spi_config->port->SR.B.TCF == 0)
{
    if (iteration_counter++ > SPI_MAX_WAIT_ITERATIONS)
    {
        // If this point is reached, the SPI transfer did not complete
        // within the expected iterations.
        spi_status = eSPI_TIMEOUT;
        iteration_exceeded = true; // Set flag to break `for` loop
        break;                     // exit from while loop
    }
}


遅延計算:

イテレーションが次のもので構成されると仮定します。

  1. TCF ビットの読み取り (p_spi_config->port->SR.B.TCF == 0) → 2サイクル
  2. 1サイクルiteration_counter →インクリメント
  3. iteration_counter > SPI_MAX_WAIT_ITERATIONS → 1サイクルの比較
  4. ループ開始→1サイクルに戻る

イテレーションあたりの合計 ≈ 5 クロック サイクル

SPI_MAX_WAIT_ITERATIONS = 100 の場合、タイムアウト前の合計サイクル数:

合計サイクル = 100×5 = 500
合計時間 = 500×3.79 ns = 1.89マイクロ 秒

問:

  1. この遅延計算はMPC5674Fに対して正しいですか?
  2. 100回の反復は妥当なタイムアウトですか、それとも調整する必要がありますか?
  3. MPC5674F SPIモジュールには、ステータスレジスタごとにオーバーラン、フレームエラーなどのエラーを検出するためのフラグがありません。エラーを検出する方法はありますか?

コミュニティからの洞察は大歓迎です!

よろしくお願いいたします!

ナレンドラC

MPC5674F、#POWERPC アーキテクチャ

 



Re: MPC5674F での SPI タイムアウト遅延計算

Hi,

1)それはあなたが概説したほど単純ではなく、より多くなります。あなたはむしろ、コードがどのようにコンパイルされ、アセンブラコードに基づいて、コアマニュアルの命令セットの状態の助けを借りて、より多くを推測することができますかを確認する必要があります。ただし、I/Dキャッシュ、メモリ待機状態、クロスバー設定/レイテンシなど、MCUの別の設定が役割を果たします。
ただし、内部タイマーを使用したり、ピンを切り替えて特定のコード実行時間を測定したりできます。
2) 実際のSPI転送/ビットレート設定による
3)TXFIFOアンダーフローとRXFIFOオーバーフローの表示があります。転送属性は通信前に設定されるため、マスター/スレーブで同じである必要があり、SPIはシリアルクロックと同期通信であるため、このようなエラーは予想されません。

BR, Petr

Tags (1)
No ratings
Version history
Last update:
‎01-04-2026 11:56 PM
Updated by: