私はSPI経由でMPC5775B MCUからMC17XS6500EEK HSDを制御しています。
基本的な出力制御は正常に動作しますが、ステータス レジスタを定期的に読み取ろうとすると問題が発生します。
現在やっていること
起動時にHSDを初期化します。
出力を構成する
初期化中にSOAモードを設定する
ウォッチドッグトグルを定期的に有効にする
出力はアプリケーションロジックに基づいて正常に動作します
1秒ごとにステータスを読み取ります:
SO/QSレジスタアドレスをINIレジスタに書き込む
SO/QSの応答を読み返す
障害が検出された場合は、特定のチャネルアドレスをINIレジスタに書き込み、その応答を読み取ります。
完了したら、ステップ1の元のINIレジスタ値を復元します。
ウォッチドッグは毎回切り替えられる
問題
これを実行すると、出力がちらつき、デバイスが再初期化されたように見えます。
実行時に INI レジスタを変更すると、構成された出力に副作用が生じるようです。
私の質問
SO/QS レジスタを読み取るためだけに、初期化後にINI レジスタを変更することは許可されていますか/安全ですか?
そうでない場合、構成された出力を妨げたり、ちらつきやリセットを引き起こしたりせずにステータス (SO/QS およびチャネル障害) を読み取るための推奨 SPI シーケンスは何ですか?
アプリケーションノートへのガイダンスや参照があれば役立ちます。
こんにちは、 @davidtosenovjan 、
MC17XS6500EEK HSD では、障害情報をどのようにポーリングできますか?これに関するサンプルコードはありますか?
現在、SOA モード ビットを I/O ステータスに設定して HSD を初期化し、I/O ステータス SO 応答アドレスを SO レジスタ アドレスとして使用しています。私のアプローチは、クイック ステータス レジスタ (QSR) を定期的にポーリングし、障害が検出された場合は、個々のチャネルをポーリングして詳細な障害情報を取得し、それに応じて処理することです。
ただし、チャネル固有の障害をポーリングすると、HSD は障害を自動的にリセットするようです。障害ステータスをリセットせずに障害情報を適切に取得する方法に関するサンプル コードまたはガイダンスを共有していただけますか?
出力のちらつきは、SO/QS レジスタへのアクセス方法による意図しない再初期化によって発生する可能性があります。
これを回避するには、各 SPI トランザクションに、次の内容を含む適切にフォーマットされた 16 ビットの入力ワードが含まれていることを確認してください。
- ウォッチドッグビット(D15)を修正
- 有効パリティ(D14)
- 適切なレジスタ アドレスとバンクの選択。
SPI フレーム外での INI レジスタの変更は避けてください。代わりに、NXP の AN5106 アプリケーション ノートに記載されている標準 SPI プロトコルを使用します。これにより、出力リセットをトリガーすることなく安定した動作が保証されます。