プロセッサ・アーキテクチャ

ARM Cortex-M

マイコン向けArmコア。低消費電力でリアルタイム制御向き。

概要

ARM Cortex-Mは、Armホールディングスが設計したマイコン(MCU)向けの32ビットRISCプロセッサコアファミリです。低消費電力・低コスト・リアルタイム性を重視した設計で、組み込みシステムの世界では事実上の標準アーキテクチャとなっています。

Cortex-Mファミリには複数のバリアントが存在し、M0/M0+/M1/M3/M4/M7/M23/M33/M35P/M55などがあります。用途や要求性能に応じて選択でき、STM32・nRF・NXP・Microchipなど主要なMCUベンダーがこのコアをライセンスして製品化しています。

RTOSとの親和性が高く、FreeRTOS・Zephyr・TOPPERS/ITRONなどの代表的なRTOSが公式サポートしています。また、Thumb-2命令セットにより、32ビット性能を保ちながらコードサイズを削減できるのも特徴です。

歴史・背景

Armは1990年にAcorn Computers・Apple・VLSIテクノロジーの合弁で設立されました。もともとAcornのACORN RISC Machine(後にAdvanced RISC Machine)として1985年にARM1が登場。Armビジネスモデルの特徴は、チップを自社製造せずIPコアとしてライセンス販売することです。

Cortex-Mシリーズは2004年にCortex-M3として初登場しました。それ以前のARM7TDMIに比べ、割り込み処理の高速化(NVIC: Nested Vectored Interrupt Controller)・デバッグ機能強化(CoreSight)・Thumb-2命令採用を実現しました。

2009年にはCortex-M0が登場し、8ビット・16ビットマイコンの置き換えを狙った超低コアとして普及。2010年のCortex-M4ではDSP拡張命令とオプションFPUが追加され、センサーフュージョン・音声処理などに対応しました。

近年ではCortex-M33でTrustZoneセキュリティ拡張、Cortex-M55でHelium(MVE: M-Profile Vector Extension)によるAI/ML処理の加速が追加され、エッジAI用途への対応が進んでいます。

技術仕様

バリアント比較

コアビット幅パイプライン段数FPUDSPTrustZone主な用途
Cortex-M032bit3段なしなしなし超低コスト・低消費電力
Cortex-M0+32bit2段なしなしなし最低消費電力
Cortex-M132bit3段なしなしなしFPGA向け
Cortex-M332bit3段なしなしなし汎用制御
Cortex-M432bit3段オプションありなしDSP・センサー処理
Cortex-M732bit6段ありありなし高性能制御
Cortex-M2332bit2段なしなしありセキュア低電力
Cortex-M3332bit3段オプションありありセキュア汎用
Cortex-M5532bit-ありありありエッジAI

NVIC(割り込みコントローラ)

Cortex-Mの重要な特徴の一つがNVIC(Nested Vectored Interrupt Controller)です。

  • 最大240個の外部割り込みをサポート(実装依存)
  • 割り込み優先度: 8段階〜256段階(実装依存、通常4〜16段階)
  • 割り込みネスト(高優先度が低優先度を割り込み)をハードウェアでサポート
  • 割り込みレイテンシ: M0で最大15サイクル、M3/M4で12サイクル
  • テールチェイニング: 連続割り込み時のプロローグ/エピローグを省略し6サイクルで処理

メモリマップ

Cortex-Mは固定の4GBアドレス空間を持ちます:

0x00000000 - 0x1FFFFFFF : Code領域(フラッシュ)
0x20000000 - 0x3FFFFFFF : SRAM領域
0x40000000 - 0x5FFFFFFF : ペリフェラル領域
0x60000000 - 0x9FFFFFFF : 外部RAM領域
0xA0000000 - 0xDFFFFFFF : 外部デバイス領域
0xE0000000 - 0xFFFFFFFF : プライベートペリフェラル(NVIC・SysTick・Debug)

Thumb-2命令セット

Thumb-2は16ビット命令と32ビット命令を混在させる命令セットです:

  • ARM(32ビット)命令に比べてコードサイズを約26%削減
  • Thumb(16ビット)命令に比べて性能を約25%向上
  • M0/M0+はThumb命令のみサポート(一部32ビット命令を追加)
  • M3以降はThumb-2フルサポート

動作原理

パイプライン処理

Cortex-M3/M4は3段パイプライン(フェッチ・デコード・実行)を採用しています。パイプラインにより、複数の命令を並行処理して実効スループットを高めます。

サイクル:  1    2    3    4    5    6
命令A:   Fetch Dec  Exec
命令B:        Fetch Dec  Exec
命令C:             Fetch Dec  Exec

分岐命令では分岐予測ミス時に2〜3サイクルのペナルティが発生します。Cortex-M7は6段パイプライン(デュアルイシュー)でスループットをさらに向上させています。

例外・割り込み処理

// 割り込みハンドラの例(STM32 HAL)
void EXTI0_IRQHandler(void) {
    // 自動でコンテキスト保存(R0-R3, R12, LR, PC, xPSR)
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
    // RTOSコンテキストスイッチが必要な場合はPendSVをトリガー
}

Cortex-Mのハードウェアは割り込み発生時にR0〜R3、R12、LR、PC、xPSRを自動的にスタックに退避(ハードウェアスタッキング)します。これにより、割り込みハンドラをC関数として記述でき、手動でのレジスタ退避が不要です。

SysTick タイマー

24ビットのダウンカウンタで、RTOS のティック割り込みに使われます:

// 1msティック設定例(72MHzクロック時)
SysTick_Config(72000);  // 72000カウントで割り込み(1ms)

用途・ユースケース

産業機器・制御

Cortex-M4/M7はDSP命令を持ち、モーター制御(FOC: Field-Oriented Control)やセンサーフュージョンに適しています。STM32H7(Cortex-M7、480MHz)はリアルタイムモーター制御のリファレンスプラットフォームとして広く採用されています。

IoT・ウェアラブル

Cortex-M0+は消費電力が極めて低く(スリープ時1µA以下も可能)、コイン電池動作のセンサーノードやウェアラブルに最適です。Nordic nRF52シリーズ(Cortex-M4)はBLE搭載でウェアラブルの定番です。

セキュリティ要件

Cortex-M23/M33はTrustZoneをサポートし、セキュア世界と非セキュア世界を分離できます。決済端末・スマートカード・IoTセキュリティモジュールに採用が増えています。

エッジAI・TinyML

Cortex-M55はHelium(MVE)でSIMD演算を効率化し、TFLite MicroなどのTinyMLフレームワークの推論を高速化します。キーワード検出・異常検知・画像分類などのユースケースに対応します。

実装・開発のポイント

開発環境

IDE:
  - Keil MDK(ARM純正、業界標準)
  - IAR Embedded Workbench(高最適化コンパイラ)
  - STM32CubeIDE(STMicro提供、Eclipse+GCC)
  - VS Code + arm-none-eabi-gcc + OpenOCD(オープンソース)

デバッガ:
  - J-Link(SEGGER製、高速・信頼性高い)
  - ST-Link(STMicro製EVBに内蔵)
  - CMSIS-DAP(オープン規格)

スタック・ヒープ設定

// リンカスクリプトでのスタック・ヒープサイズ設定(GCC)
_Min_Heap_Size = 0x400;   /* 1KB ヒープ */
_Min_Stack_Size = 0x800;  /* 2KB スタック */

RTOSを使う場合、各タスクにスタックを割り当てます:

// FreeRTOS タスク生成例
xTaskCreate(
    vSensorTask,    // タスク関数
    "Sensor",       // タスク名
    256,            // スタックサイズ(ワード単位)
    NULL,           // パラメータ
    2,              // 優先度
    NULL            // タスクハンドル
);

CMSIS(Common Microcontroller Software Interface Standard)

CMSISはARMが策定したソフトウェア標準で、ペリフェラルアクセス・DSPライブラリ・RTOSインタフェースを統一します:

  • CMSIS-Core: コア機能(NVIC・SysTick・MPU)へのAPI
  • CMSIS-DSP: DSP演算ライブラリ(FFT・フィルタ・行列演算)
  • CMSIS-RTOS2: RTOS抽象化API
  • CMSIS-NN: ニューラルネットワーク推論ライブラリ
#include "cmsis_os2.h"  // CMSIS-RTOS2

// CMSIS-DSPでFFT
arm_rfft_fast_instance_f32 fftInstance;
arm_rfft_fast_init_f32(&fftInstance, 256);  // 256点FFT初期化
arm_rfft_fast_f32(&fftInstance, input, output, 0);  // FFT実行

消費電力最適化

// スリープモード移行(Cortex-M標準)
__WFI();  // Wait For Interrupt: 割り込みまでスリープ
__WFE();  // Wait For Event: イベントまでスリープ

// STM32のLow Powerモード例
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

他技術との比較

Cortex-M vs Cortex-A

項目Cortex-MCortex-A
対象マイコン・リアルタイム制御アプリケーションプロセッサ
OSベアメタル/RTOSLinux・Android等
MMUなし(MPUのみ)あり(仮想メモリ)
クロック〜480MHz〜3GHz+
消費電力µA〜mA数百mA〜W
起動時間ミリ秒数秒〜十数秒
コスト安価高価

ARM Cortex-Aはスマートフォン・SBC・組み込みLinux向けで、MMUによる仮想メモリが必須のフルOSを動作させます。

Cortex-M vs RISC-V

RISC-VはオープンなISAで、ライセンス料が不要です。ESP32-C3/C6などに採用が増えていますが、エコシステム・ツールチェーン・サポートの成熟度ではCortex-Mが優位です。処理性能・機能は同等レベルに近づいており、今後の競合が注目されます。

Cortex-M vs Xtensa

XtensaはESP32で採用されるTensilica製コアです。Wi-Fi/Bluetoothスタックとの統合に優れ、IoT開発者に人気ですが、汎用マイコン市場ではCortex-Mの採用数が圧倒的に多く、開発リソースも豊富です。

関連用語

参考リンク