Y モデム プロトコルを介してデバイス上のアプリケーション コードを再フラッシュできるようにするために、セカンダリ ブートローダーを開発しました。
私のブートローダはフラッシュと ECRP 値に保存され、たとえば停電中にブートロードする場合に最初のセクターが誤って消去されるのを防ぎます。
ただし、アプリケーション コードからブートローダーを更新できるようにしたいと考えています。ECRP 値はフラッシュの最初のページをロックするため、ドキュメントによると、ブートローダーの書き換えに進む前に、すべてのセクターを消去して (大量消去など) ロックを解除する必要があります。
Q1そんなことが可能なのか?
Q2. フラッシュセクターのロックを解除するには、すべてのセクターを消去した後にリセットが必要ですか?
Q3コードを書き、試してみましたが、チップを消去して、コードの最初のページをセクター 0 にフラッシュすることはできましたが、IAP コマンドを使用して 2 番目のページをフラッシュしても何も起こらず、その後、ページ 2 と IAP ステータス コード 19 (文書化されていない) の比較でコードが失敗しました。
実際のアプリケーションでは外部の世界から UART や SWD にアクセスできないため、可能であればアプリケーションから実行する必要があります。
ケリー
ハリー
結局、ブートローダーのフラッシュは実装しませんでした。
ステップ 2 はステップ 1 をオーバーライドします -> アプリケーション コードからブートローダーを更新し、リセットを発行すると、更新を実行している SRAM 内のコードが失われます。したがって、フラッシュ ロックを解除する別の方法がない限り、更新を実行する外部マスターなしではこれを実現することはできません。
こんにちは@kellykan
Q1: アプリケーション コードからブートローダーを更新することは可能ですか?
はい、可能です。ただし、ECRP 保護のため、いくつかの重要な手順と考慮が必要になります。ECRP 値はフラッシュの最初のページをロックして保護します。通常、ブートローダを更新するには、一括消去を実行して ECRP 保護を解除する必要があります。一括消去後、ブートローダを再プログラムし、ECRP 値を再度設定できます。
Q2: フラッシュ セクターのロックを解除するには、すべてのセクターを消去した後にリセットが必要ですか?
はい、通常、大量消去後にはフラッシュ コントローラを再初期化し、ECRP ロックが適切にクリアされていることを確認するためにリセットが必要です。リセットを行わないと、フラッシュ コントローラにロックの残りが残る可能性があり、後続のフラッシュ操作中に問題が発生する可能性があります。
Q3: IAPコマンドを使用して2ページ目をフラッシュする際の問題
1. 消去またはプログラミングが不完全: プログラミングを試みる前に、一括消去が成功し、フラッシュ セクターが正しく消去されていることを確認します。
2. IAP コマンド シーケンスが正しくありません: フラッシュ セクターの消去とプログラミングに正しい IAP コマンド シーケンスを使用していることを確認します。
3. リセット要件: 前述のように、ECRP ロックを完全にクリアするには、大量消去後にリセットを実行する必要がある場合があります。
これがお役に立てれば幸いです。
BR
下がる