2417321_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2417321_ja-JP

2417321_ja-JP

ソフトウェアの起動中に「同期中止」エラーが発生しました:「handler、esr 0x02000000」。

1. 断続的な障害 (数千回の再起動に 1 回発生): u-boot プロセス中にソフトウェアがフリーズします。障害メッセージは「Synchronous Abort」ハンドラ、esr 0x02000000 です。コードを逆アセンブルすると、次の呼び出しパスが明らかになります: initr_pci → pci_init → dm_pciauto_config_device (pci_auto.c:371) →dm_pci_hose_probe_bus (pci-uclass.c:607) → dm_pciauto_prescan_setup_bridge→ `bl dm_pci_get_bdf`と`ret`の後にポインタ0x8202fc20を取得しようとした際に例外が発生しました。問題は、`ret`が誤ったアドレスにアクセスしていたのに対し、`asr`呼び出しは単なるレジスタシフトであり、本質的にエラーが発生しやすい部分(メモリへのアクセスやジャンプ)がないことです。

2. このソフトウェアはCPLDを使用してウォッチドッグ(外部ウォッチドッグ)にアクティブに信号を送ります。問題発生後、PORESETを使用して外部ウォッチドッグをリセットしましたが、失敗しました。

Re: 软件启动时出现Synchronous Abort" handler, esr 0x02000000

こんにちは、

これはasr命令自体のエラーではない可能性が高い。主な症状は、 ret破損または不正なリンク レジスタから PC をロードし、 0x8202fc20から命令フェッチが発生することです。したがって、異常終了は命令フェッチ時に検出された可能性が高いが、データ破損はそれよりも前に発生したと考えられる。

考えられる原因

まず、以下の分野を調査してください。

  1. スタック破損またはスタックオーバーフロー

    • PCI再帰の各レベルでspをチェックしてください。
    • U-Bootスタック周辺にスタックカナリアを追加します。
    • PCI列挙が設定されたスタックサイズを超えていないことを確認してください。
  2. 無効な関数ポインタまたは破損したLR

    • bl dm_pci_get_bdf 直前と直後の x30/LR 、 SP 、 PC 、およびすべてのレジスタをキャプチャします。
    • スタックに保存されているLRが、想定される戻りアドレスと一致していることを確認してください。
    • ソースコードだけでなく、正確なバイナリを逆アセンブルしてください。
  3. メモリ破損

    • DDRの安定性、ECC/エラー状態、キャッシュ構成、およびDMAアクティビティを確認します。
    • 一時的にデータキャッシュ、推測的アクセス、並行DMAを無効にしてください。
    • 未使用のメモリとスタックを既知のパターンで埋め、障害発生後に破損状況を検査する。
  4. PCIe構成アクセスタイムアウト/エラー

    • 列挙前にリンクトレーニングとコントローラーリセットが完了していることを確認してください。
    • 存在しないデバイスが、ハングアップしたり無効なデータを生成したりするのではなく、正当な完了エラーを返すことを確認してください。
    • PCI初期化を無効にしてテストしてください。問題が解消する場合は、PCIeハードウェア/構成のタイミングに注目してください。

外部ウォッチドッグリセットが失敗する理由

CPUが破損したコードを実行している間もCPLDからウォッチドッグに給料を受けられるため、システムがウォッチドッグのタイムアウトに到達できない可能性があります。また、 PORESETシステムを障害状態に維持しているロジックをリセットしない可能性があり、あるいはそのパルスが必要な幅/シーケンスを満たさない可能性があります。

NXPのドキュメントでは外部ウォッチドッグロジックを独立したリセットトリガーとして説明していますが、その実際のリセットパスと影響を受けるドメインはSoCおよびボードリセットアーキテクチャで検証されなければなりません。

オシロスコープまたはロジックアナライザで確認してください。

  • CPLDウォッチドッグタイムアウト出力
  • SoCピンのPORESET
  • HRESET / システムリセット
  • PMICリセット入力/出力
  • リセット試行中の電源レール
  • リカバリ後のリセット原因レジスタ

推奨デバッグ実験

ウォッチドッグポリシーを修正して以下のようにします:

  • U-Bootは、制御された周期的な経路からのみ外部ウォッチドッグにデータを供給する。
  • PCI列挙中はウォッチドッグはフィードされません。
  • タイムアウトが発生すると、CPLDはSoC/PMICの仕様を満たすのに十分な長さのリセットパルスを生成します。
  • リセットの原因を記録し、故障したレジスタをSRAMまたは別の保持領域に保存します。

次に最も価値のある成果物は、 PC 、 LR/x30 、 SP 、 ESR 、 FAR 、 SPSR 、および保存された戻りアドレス周辺のスタックの内容を含む完全な例外ダンプです。そのデータがない場合、障害発生箇所は、破損した戻り値が検出された場所を特定するだけであり、破損が発生した場所を特定するものではありません。

 

よろしくお願いします。

タグ(1)
評価なし
バージョン履歴
最終更新日:
1週間前
更新者: