NXPの専門家の皆さん、こんにちは。
私のプロジェクトでは、S32K312 を I2C スレーブとして使用し、I2C マスター (FT4222) に接続します。
このプロジェクトでは、Mem43_Infls (Flash W/R) と I2c スレーブのみが使用され、マスターからの I2C メッセージの一部がフラッシュ消去と書き込みのサブプロセスをトリガーします。
私のテストでは、マスターからメッセージを受信した後、I2C スレーブがローを維持する可能性が高いことがわかりました。I2C スレーブを再初期化することによってのみ CAN 回復できます。
acnhyxgxl1_0-1755688037984.png
下の画像は LA 測定です。波形は正常です。SO、おそらく回路の問題ではないと思います。
私は2つの実験を行いました。ここにいくつかの手がかりがあります
実験1. `SchM_Mem_43_INFLS.c` 内のすべての ` OsIf_SuspendAllInterrupts` と ` OsIf_ResumeAllInterrupts` をコメントアウトしました。
故障率は劇的に減少し、I2C スレーブの誤動作を引き起こす可能性は約 1/500 になりました。さらに、フラッシュは割り込み停止なしでも正常に動作CANことがわかりました。
実験2Flash API をスタブ化し、フラッシュ ドライバを操作するのではなく、常に E_OK を返すようにしました。
この方法では、I2C スレーブが故障することはありません (もちろん Flash には機能がありません)。
SO私の質問は、この I2C スレーブ障害の問題を解決するために使用すべき設定や調整はありますか?また、割り込み保護なしでフラッシュを安全にCAN操作できますか?
コードの一部と LA レコードは添付ファイルにあります。I2Cスレーブに関するコードをアップロードすることはできません。
ハードウェアのセットアップ:
S32K312EVB-Q172
FT4222(I2Cマスター)、ボーレート:900KHZ-1000KHZ
ソフトウェアのセットアップ:
リリース: 5.0.0HF01
こんにちは@acnhyxgxl1さん、
RTD のインストール ディレクトリにある RTD_MEM_43_INFLS_UM.pdf を参照してください。
danielmartynek_0-1756189418778.png
SYNC モードでは、ドライバはフラッシュ操作が完了するまで I2Cバス をブロックします。
BR、ダニエル
元の設定では非同期モードを使用していましたが、同期モードでもタスクを実行 CAN。
Mem43_Infls で同期 / 非同期モードの両方を試しましたが、非同期モードのみがフラッシュにデータを正しく書き込むCANようです。
同期モードでは、`Mem_43_INFLS_Write` は `E_OK` を返しますが、フラッシュの内容は変更されませんでした (S32DS メモリ インターフェース経由で監視)。
同期モードでもこの I2C の問題を解決できませんでした。I2C コマンドがフラッシュ消去をトリガーするたびに、I2C スレーブは低く保持されます。
添付ファイルは、私の mex ファイルとフラッシュ HAL ソース コードです。たぶん、あなたは私に何か手がかりを与えてCAN。
こんにちは@acnhyxgxl1さん、
この関数は、AsyncMode == FALSE の場合にのみ呼び出されるようです。
danielmartynek_0-1755846251043.png
INFLS ドライバをどのように構成しましたか?
danielmartynek_1-1755846312547.png
よろしくお願いいたします。
ダニエル
フラッシュが ` Mem_43_INFLS_IPW_Erase` で ` C40_Ip_AccessCode ( Mem_43_INFLS_pConfigPtr -> MemAcCallBackPtr );` をプロセッシングしているときに、I2C スレーブが読み取りフレームを待機すると、I2C スレーブ障害が発生することがわかりました。
この問題を解決するための対策はありますか?
acnhyxgxl1_0-1755828201782.png
acnhyxgxl1_1-1755828451905.png