メディア

Arm Cortex-Mのメモリプロテクションユニット(MPU)って何?Q&Aで学ぶマイコン講座(108)(3/5 ページ)

» 2025年10月31日 10時00分 公開

投機的アクセスによるトラブル回避の実例

 例としてSTM32H735マイコンにOCTOSPIフラッシュメモリを接続して使う場合を示します。

 図2に示す通り、STM32H735マイコンは、0x90000000〜0x9FFFFFFFをOCTOSPI1メモリ領域として使用可能です。STM32H735マイコンに接続しているOCTOSPIフラッシュメモリの最大サイズを16MBとします。

<strong>図2:OCTOSPI1メモリ領域使用例</strong> 図2:OCTOSPI1メモリ領域使用例[クリックで拡大]

 図3に示すように、STM32H735マイコンのOCTOSPI1領域はメモリタイプが「Normal」であるため、OCTOSPIフラッシュメモリの終端付近をアクセスしている時に、その付近の領域に対してCortex-Mコアが投機的アクセスを実行する可能性があります。

<strong>図3:Cortex-M7デフォルトメモリタイプとSTM32H72x/H73x</strong> 図3:Cortex-M7デフォルトメモリタイプとSTM32H72x/H73x[クリックで拡大]

 図4のようにメモリサイズ外のOCTOSPIメモリ領域に投機的アクセスがかかるとトラブルが発生します。

<strong>図4:Cortex-M7投機的アクセスによるトラブル</strong> 図4:Cortex-M7投機的アクセスによるトラブル[クリックで拡大]

 このトラブルを回避するには、図5が示す下記のMPU設定が有効です。

<strong>図5:Cortex-M7搭載マイコン使用時の手当</strong> 図5:Cortex-M7搭載マイコン使用時の手当[クリックで拡大]

(1)OCTOSPIメモリ領域全域(256MB)を対象にしたMPUリージョンを作成し、アクセス不可、キャッシュ非対象、バッファー非対象に設定

(2)OCTOSPIフラッシュメモリ領域(16MB)を対象にしたMPUリージョンを作成し、アクセス可、キャッシュ対象、バッファー非対象に設定

MPU_Region_InitTypeDef MPU_InitStruct = {0};
 
HAL_MPU_Disable();
 
// MPU region (k)
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0x90000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_256MB;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
 
// MPU region (k+1)
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.Size = MPU_REGION_SIZE_16MB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
HAL_MPU_Enable(MPU_HFNMI_PRIVDEF);

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.