• No : 15094
  • 公開日時 : 2023/09/20 09:52
  • 印刷

【NXP:Kinetis】 KE14FがROMからブートすると何故処理性能が低下するのですか

KE14Fを使用して製品を開発しています。ROMからブートしますが、BCA(Bootloader Configuration Area)の設定により200ms経過するとタイムアウトとなり、フラッシュに書き込んだアプリケーションを実行するようにしています。
ROMからブートしてアプリケーションを実行を開始した場合、フラッシュからブートした場合と比較すると処理性能が半分以下に低下します。
この問題を解決する方法を教えてください。
カテゴリー : 

回答

KE14FでROMからブートしてアプリケーションを実行開始した場合、MSCM_OCMDRレジスタのビット5とビット4が'1'にセットされます。
これらのビットには、次の機能が割り当てられています。
• OCMDR bit 4: data prefetch. Value 0 means enable and value 1 means disable.
• OCMDR bit 5: flash speculate. Value 0 means enable and value 1 means disable.
ビット5とビット4が'1'にセットされるとデータのプリフェッチとフラッシュ投機読み出しがディセーブルになり、フラッシュからの読み出し時間が長くなります。
そのため、処理性能が低下します。
ROMからブートしてアプリケーションを実行開始する場合は、次のような関数を追加することでアプリケーションの初期化時にMSCM_OCMDRレジスタのビット5とビット4をクリアでき、処理性能が低下する問題を解決できます。
 
void SystemInitHook (void)
{
        MSCM->OCMDR[0] &= ~MSCM_OCMDR_OCMC1_MASK;
}