KopherBit
AUTOSAR

AUTOSAR RTE 跨分區 IOC:多核 ECU 安全與一般功能隔離

AUTOSAR Classic RTE 中的 IOC (Inter-OS-Application Communication) 是跨 OS Application / 跨核心通訊的標準機制。在多核 MCU (如 Infineon TC387QP) 上將安全分區與一般分區隔離後,IOC 是合法的跨分區通訊路徑。本文整理 KopherSAR RTE 對 IOC 的產生流程、配置方式與限制。

Summary

IOC (Inter-OS-Application Communication) 是 AUTOSAR Classic RTE 提供的跨 OS Application / 跨核心通訊機制,當系統將 ECU 劃分為多個 OS Application(不同記憶體保護分區、可在不同核心執行)後,跨分區的 SWC 通訊不得使用一般 RTE Sender/Receiver 直接呼叫,而必須透過 IOC 進行。多核 MCU 如 Infineon TC387QP 上常將安全功能 (SafetyRelevant Partition) 與一般功能 (Non-Safety Partition) 分離,IOC 是這兩者之間合法的通訊路徑。KopherSAR RTE 在配置階段自動產生 IOC 通道,由 KopherConfig 統一管理。

Technical Role

AUTOSAR OS 允許將 ECU 軟體劃分為多個 OS Application,每個 OS Application 可:

  • 獨立分配記憶體保護單元 (MPU) 區段。
  • 指派至不同的核心 (TC387QP 為 4 核)。
  • 設定獨立的 ASIL 等級(如 ASIL-D Safety Partition vs. QM Application Partition)。

不同 OS Application 之間的 SWC 通訊不可直接呼叫對方的 RTE API(會觸發記憶體保護違例)。RTE 在配置階段透過分析每個 SWC 屬於哪個 OS Application,自動為跨分區通訊產生 IOC:

  • IOC Send / Receive
  • IOC Read / Write
  • IOC Trigger

IOC 在 OS 層使用 IocSend / IocReceive 等 API,由 OS 進行核心間 (Inter-Core) 同步與資料複製。

Architecture

┌──────────────────────────────┐    ┌──────────────────────────────┐
│  Partition A (Safety, ASIL-D)│    │  Partition B (QM, Non-Safety)│
│  ┌────────────┐              │    │  ┌────────────┐              │
│  │   SWC_A    │              │    │  │   SWC_B    │              │
│  └─────┬──────┘              │    │  └──────┬─────┘              │
│        │ Rte_Write           │    │         │ Rte_Read           │
│        ▼                     │    │         ▼                    │
│  ┌─────────────┐             │    │  ┌─────────────┐             │
│  │  IOC Send   │─────IPC────▶│    │  │  IOC Recv   │             │
│  └─────────────┘             │    │  └─────────────┘             │
└──────────────────────────────┘    └──────────────────────────────┘
                Core 0                          Core 1

Key Capabilities

  • 跨核心 / 跨分區通訊:在多核 MCU (TC387QP) 上提供合法的 SWC 跨分區資料路徑。
  • MPU 友善:避免在使用記憶體保護的環境中觸發保護違例。
  • 自動產生:KopherSAR RTE 從 ARXML 配置自動分析跨分區 Send/Receive 並產生對應 IOC。
  • 同步原語:IOC 使用 OS 提供的同步機制 (Spin Lock、IPC) 確保資料一致性。
  • 支援 Last-is-Best 與 Queued 模式:IOC 支援 1:1 與 N:1 的 Sender/Receiver 模式。

Engineering Inputs Required

輸入用途
OS Application 規劃哪些 SWC 屬於哪個 Partition;每個 Partition 的 ASIL 等級。
核心配置每個 OS Application 在哪個核心執行。
Sender/Receiver 介面SWC 之間的 Port、Interface、Data Element 定義。
同步策略是否需要 Queued 模式(事件序列保留)或 Last-is-Best (僅最新值)。
安全策略跨分區資料是否需要額外的整合性 / 範圍檢查。

How KopherBit Supports This

  • KopherSAR RTE:完整支援 IOC 自動產生,符合 AUTOSAR Classic 規範。
  • KopherConfig:配置 OS Application、Partition、Core Mapping,並從 SWC ARXML 推斷 IOC 需求。
  • TC387QP 整合:充分利用 TC387QP 多核與 Lock-Step 機制,提供安全分區範本。
  • 顧問:協助客戶設計 ASIL 對應的 Partition 結構與 SWC 分配。

FAQ

為什麼跨分區不能直接呼叫 RTE API?

不同 OS Application 通常具備獨立 MPU 區段,直接讀寫對方記憶體會觸發保護違例。即使在同核心也是如此,因為 OS 會在每次切換 OS Application 時重新套用 MPU 規則。

IOC 是否會增加延遲?

是。IOC 透過 OS 的 IPC 與同步機制傳遞資料,相較同分區直接 RTE 呼叫會有額外延遲(依 OS 與硬體而定,通常為微秒級)。設計時須避免將高頻率高優先級的訊號跨分區傳遞。

跨核心 IOC 如何同步?

OS 在跨核心 IOC 時使用 Spin Lock + 共享記憶體 + Inter-Core Interrupt (ICI),由發送核心通知接收核心讀取資料。KopherSAR RTE 自動配置這些原語,使用者不需手動編寫。

IOC 是否支援 Queued 模式?

支援。RTE 可配置每個 IOC 通道為 Queued (保留事件序列) 或 Last-is-Best (僅保留最新值)。Queued 模式適合事件型訊號 (如錯誤通報);Last-is-Best 適合周期性訊號 (如感測器值)。

安全分區 (ASIL-D) 如何驗證跨分區資料?

可在 SWC 層加入檢查邏輯:範圍檢查、Plausibility、Stale Data 偵測;亦可採 SecOC 等機制在跨分區傳輸時加上 MAC。實作策略以專案安全分析 (FMEA / TARA / HARA) 為依據。

是否所有跨分區通訊都需要 IOC?

是。RTE 配置階段會分析 SWC 與 OS Application 對應,自動將跨分區 Send/Receive 替換為 IOC。同分區內仍使用一般 RTE 呼叫,不影響效能。

JSON-LD

{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "AUTOSAR RTE 跨分區 IOC:多核 ECU 安全與一般功能隔離",
  "description": "AUTOSAR Classic RTE 的 IOC (Inter-OS-Application Communication) 提供跨 OS Application / 跨核心 SWC 通訊路徑,常用於多核 MCU 安全分區隔離。",
  "url": "https://kopherbit.com/knowledge/autosar-rte-cross-partition-ioc/",
  "datePublished": "2026-05-09",
  "dateModified": "2026-05-09",
  "inLanguage": "zh-TW",
  "keywords": ["AUTOSAR", "RTE", "IOC", "Multi-Core", "Safety Partition", "TC387QP"],
  "articleSection": "AUTOSAR",
  "author": { "@type": "Organization", "name": "KopherBit", "url": "https://kopherbit.com" },
  "publisher": { "@type": "Organization", "name": "KopherBit", "logo": { "@type": "ImageObject", "url": "https://kopherbit.com/logo.png" } }
}