這是一張有關標題為 選擇適合的 MCU 或 SoC 作為產品開發的基石 的圖片

選擇適合的 MCU 或 SoC 作為產品開發的基石

從技術規格書出發評估 MCU 與 SoC,檢視電源模式、CPU 效能、Flash 與 SRAM 配置,以及腳位與 I/O 限制,以判斷其是否滿足運算效能需求。

前言

隨著嵌入式應用日益多元,現代微控制器單元(microcontroller unit,MCU)已從早期單純的 8-bit 晶片,快速演進為以 ARM 架構為主、兼具高效能與低功耗的 32-bit 產品。選擇合適的 MCU 或是系統單晶片(system-on-chip,SoC),早已不再僅僅是比較規格或價格,更需全盤考量核心架構、記憶體子系統、周邊設定,以及開發生態與長期維護等層面。

除了硬體規格,現代嵌入式系統也需因應多任務處理、即時性與資訊安全等需求。即時作業系統(real-time operating system,RTOS)已成為主流設計選項,而針對更高階應用,部分 MCU 更能直接執行嵌入式 Linux,進一步擴充系統彈性與功能。隨著 TrustZone、記憶體保護單元(memory protection unit,MPU)等安全機制成為標準配備,單一 MCU 的選型,實際上牽動著整體軟體架構與未來維護成本。

本文將直接從技術規格書(datasheet)出發,說明現今主流 MCU 所具備的關鍵規格、常見特性,以及選型時必須注意的重點,並分享我在實務開發中累積的判斷標準與經驗。

當前的主流

MCU 廠商

MCU 主要用於外部控制與通訊。目前全球主流的 MCU 廠商由英飛凌(Infineon)、恩智浦(NXP)、意法半導體(STMicroelectronics)、德州儀器(TI)、瑞薩電子(Renesas)、微芯科技(Microchip)六大廠商主導。近年研究顯示,前五大廠商合計約佔 55%–60% 的市佔率。

SoC 廠商

SoC 是在 MCU 或微處理器單元基礎上整合特定功能模組的進階晶片。例如 ESP32 即為 SoC,因其在 MCU 基礎上整合了 Wi-Fi 與藍牙無線通訊模組,同時內建靜態隨機存取記憶體(SRAM)、唯讀記憶體(ROM),以及豐富的周邊介面如 SPI、I2C、UART、ADC、DAC 等。

依應用領域劃分為各垂直市場,廠商針對特定需求整合 MCU 核心、微處理器核心、記憶體、專用加速器、無線通訊模組及周邊介面等元件。主要應用領域及代表廠商包括:

智慧型手機與行動裝置

  • MediaTek:天璣系列涵蓋中高階市場。
  • Apple:A 系列與 M 系列 SoC,軟硬體深度整合。
  • Qualcomm:以 Snapdragon 系列主導行動 SoC 市場。

影像視訊處理

  • Axis Communications:自有 ARTPEC 系列 SoC。
  • HiSilicon(海思):華為旗下,曾於 2018 年在監控攝影機 SoC 市場顯著領先;惟 2020 年後受出口限制影響,全球市佔迅速下滑。
  • Novatek(聯詠):NT98539 等 AI ISP IPCAM SoC,代理商技術資料宣稱最高約 3 TOPS 邊緣 AI 算力。
  • Socionext:提供面向監控的影像處理 SoC 與 AI 功能整合解決方案。
  • Ambarella:專注於 AI 電腦視覺 SoC,應用於安防監控、汽車先進駕駛輔助系統(ADAS)、消費電子。
  • Rockchip(瑞芯微):RV1106 等視覺處理器 SoC。

汽車雷達與 ADAS

  • Calterah(加特蘭):77 / 79 GHz 毫米波雷達 SoC,支援汽車功能安全 ASIL-B。
  • NXP:SAF85xx / SAF86xx 系列射頻 CMOS 雷達 SoC。
  • Texas Instruments:單晶片 4D 成像雷達 SoC 與設計資源。
  • Infineon:24 GHz 與 76–81 GHz 汽車雷達 SoC。

通訊與網路

  • Broadcom:Trident / Tomahawk / Jericho 系列乙太網路交換晶片。
  • Marvell:Prestera / Teralynx 系列,專注資料基礎設施 SoC。
  • Realtek:涵蓋交換器、實體層收發器、家庭多媒體 SoC。

嵌入式與 IoT

  • Espressif:ESP32 系列整合 Wi-Fi / 藍牙之物聯網(IoT)SoC。
  • Silicon Labs:EFR32 無線 SoC 覆蓋藍牙、Zigbee、Thread / Matter 與 Sub-GHz。
  • UNISOC(紫光展銳):5G / 蜂巢式網路與廣域 IoT 晶片方案。

AI 與高效能運算

  • NVIDIA:圖形處理器(GPU)架構 SoC。
  • Intel:從微處理器擴展至 AI 與自動駕駛領域。
  • Kneron(耐能):邊緣 AI SoC 處理器。

MCU 與 SoC 參數規格

電壓與電源管理

MCU 的電源設計遠比單純接上 3.3 V 來得複雜。現代 MCU 為了追求極致低功耗與高整合度,通常具備多組電源軌與精細的省電模式。

電壓標準與寬電壓設計

雖然 5 V、3.3 V 和 1.8 V 是常見的標準電壓,但現代 MCU 多採用「寬電壓」設計以適應不同電源來源:

  • 1.71 V ~ 3.6 V:主流 Cortex-M 系列常見範圍,可直接由單顆鋰電池(3.7 V 降壓)或兩顆鹼性電池供電。
  • 2.7 V ~ 5.5 V:常見於工業級或抗雜訊要求較高的 5 V 系統。

多重電源軌(Power Rails)

MCU 內部不同單元對電源有不同需求,因此常見以下電源腳位:

  • VDD / VSS:數位核心與 I/O 的主要電源。
  • VDDA / VSSA:類比周邊(ADC、DAC、相位鎖定迴路 PLL)專用電源。為了確保量測精準度,通常建議透過濾波電路與 VDD 隔離,避免數位開關雜訊干擾類比訊號。
  • VBAT:備用電池電源。當主電源 VDD 斷電時,自動切換由 VBAT 供電,維持即時時鐘(RTC)運作與備份暫存器(Backup Registers)資料不流失。

功耗模式(Power Modes)

低功耗設計的核心在於「依需求休眠」。現代 MCU 提供多種低功耗模式,工程師需在「功耗」、「喚醒時間」與「資料保存」三者間權衡。

值得注意的是,實際數值會隨 MCU 系列(如高效能型 vs 超低功耗型)、電源調節器型態(LDO vs DC/DC)及次模式(Sub-modes)設定而有巨大差異。下表以一般通用型 MCU 為參考範圍:

模式典型電流範圍喚醒時間RAM 資料保存說明
Run20 ~ 500 µA/MHzN/A依製程與架構差異大。超低功耗系列可低至 20 µA/MHz。
Sleep數 µA ~ 數 mA< 1 µsCPU 停止,周邊持續運作。電流取決於開啟的周邊數量。
Stop< 1 µA ~ 數十 µA數 µs ~ 數十 µs視模式而定依保留的 SRAM 大小與喚醒源多寡而異。
Standby< 1 µA ~ 5 µA數百 µs ~ 數 ms否(僅 Backup RAM)喚醒等同系統重置。需考量振盪器穩定時間。

喚醒機制與電源效率

進入休眠後,系統需透過特定事件喚醒:

  • 外部事件:GPIO 電壓準位變化、外部中斷。
  • 通訊介面:收到 UART 數據或控制器區域網路(controller area network,CAN)封包。
  • 計時器:RTC 鬧鐘或低功耗計時器(low-power timer,LPTIM)溢位。

為了進一步提升能效,部分高階 MCU(如 STM32U5)內建 DC-DC 降壓轉換器 取代傳統 LDO。雖然 DC-DC 轉換效率可達 90% 以上(LDO 降壓時效率較低),能顯著延長電池壽命,但其開關雜訊較大,設計時需評估對類比電路的影響。

案例分析:NXP KW45 電源架構

NXP KW45 是一款整合藍牙功能的無線 MCU,其電源系統設計提供了極高的彈性,主要支援以下兩種核心供電模式:

  • Bypass Mode(旁路模式):所有電源域共用同一組外部電源。此模式下硬體成本最低,外部電路最少,但相對地功耗最高。

  • DC-DC Buck Mode(降壓模式):這是功耗與硬體成本的最佳平衡點。利用內部整合的 DC-DC 模組進行電壓調節,當射頻處於閒置狀態時,系統可動態降低 DC-DC 輸出電壓,進一步達到節能效果。

此外,針對更複雜或極低功耗的需求,該晶片還支援 電源管理晶片模式(PMIC Mode)智慧電源開關模式(Smart Power Switch Mode),詳細電氣特性與設定方式可參閱官方技術規格書。

這種靈活的電源架構設計使得工程師可以根據產品的電源來源(電池 / 外部供電)、功耗需求和成本考量,選擇最合適的供電方案。

實務選用檢查清單

在評估電源系統時,建議確認以下重點:

  • 系統電壓匹配:現有電源是否在 MCU 寬電壓範圍內?是否需要額外 電位轉換器(Level Shifter)
  • 類比精度需求:若 ADC 精度要求高,是否選用了具備獨立 VREF+ 腳位的封裝?
  • 低功耗策略:系統大部分時間處於哪種狀態?Stop 模式的電流是否滿足電池續航目標?
  • 喚醒延遲:應用能否接受 Standby 模式喚醒時的重置時間?

CPU

傳統的 MCU,內部的中央處理器(CPU)架構需要廠商自行設計開發。現代 MCU 則採用更有效率的商業模式:晶片廠商(如 NXP、TI)向 CPU IP 供應商授權購買處理器核心的 IP,再於標準核心周圍整合自家設計的記憶體、周邊介面和其他功能模組。

主流的 CPU IP 供應商包括 ARM(提供 Cortex-M0 / M3 / M4 / M7 / M33 等微控制器核心)和 Synopsys(提供 ARC EM 系列如 EM6 等超低功耗核心)。這種商業模式讓晶片廠商能專注於差異化功能開發,同時享有成熟穩定的處理器核心、完整的軟體開發工具鏈,以及廣泛的生態系統支援。

全球 CPU IP 市場主要由四大陣營主導:ARM(市占率約 43.6%)、Synopsys 新思科技(22.5%)、Cadence(5.9%)和 Alphawave(3.2%),前四大廠商合計掌握超過 75% 的市場份額。


NXP 的 MCU 型號 S32K3XX,使用的是 Arm Cortex-M7 核心、32-bit CPU,提供最高 320 MHz 時脈,內建數位訊號處理(DSP)、內建單精度浮點數單元(FPU)。

加特蘭(Calterah)的毫米波雷達晶片如 Alps 系列,採用 Synopsys 的 ARC EM6 處理器核心。ARC EM6 是專為超低功耗嵌入式應用設計的 32-bit 精簡指令集(RISC)核心,同樣配備 FPU。這種組合特別適合頻率連續調變連續波(FMCW)雷達訊號處理需求,能在低功耗下完成複雜的快速傅立葉轉換(FFT)運算、距離-都卜勒處理和目標追蹤、檢測等演算法。


如何衡量 CPU 效能

通常要衡量 CPU 多快,是比較困難的指標。在此,我們以 CoreMark / MHz 作為主要效能指標,這是現代 MCU 評估運算效能的主流標準。

CoreMark 由嵌入式微處理器效能評測聯盟(EEMBC)制定,為開源基準測試工具,可免費於 GitHub 下載並於目標 MCU 上執行,測得具體分數。與傳統的 Dhrystone MIPS(DMIPS)相比,CoreMark / MHz 更能真實反映現代嵌入式處理器在各種場景下的綜合效能。

如遇官方未提供 CPU 效能數值時,建議可在開發板上自行執行 CoreMark 測試,或詢問原廠以獲取更完整的資料,亦可參考學界或業界的公開數據做初步評估。

部分沒有 FPU 的 CPU,在處理複數訊號、有小數點的計算會花費更多時間,在考量成本、犧牲一定精度的情況下,可改用定點數進行計算並得出相似的結果,是實務上的權衡。

CPU 效能指標對照表

MCU 型號CPU 核心時脈頻率DMIPS/MHzCoreMark/MHz總 DMIPS總 CoreMarkFPU
NXP S32K144ARM Cortex-M4F112 MHz1.253.27140366.6單精度
TI TMS570LS0332ARM Cortex-R480 MHz1.663.47132277.6
STM32U585ARM Cortex-M33160 MHz1.54.07240651.2單精度
ESP32-S3-WROOM(單核)Xtensa LX7240 MHz1.32.56312614.4單精度

上表為單核心效能比較。ESP32-S3-WROOM 採用雙核心架構(Xtensa LX7 × 2),雙核心模式下總 CoreMark 實測值為 1330。

實戰評估:FFT 與 FIR 運算需要多久?

在嵌入式系統中,評估階段常問:「這顆 MCU 跑 256 點 FFT 需要多久?」這不僅是效能指標,更是評估系統能否滿足即時性需求的關鍵。

基本換算公式

$$ \text{執行時間 (µs)} = \frac{\text{週期數 (Cycles)}}{\text{時脈頻率 (MHz)}} $$

然而,實際週期數受指令集(FPU / DSP)、記憶體延遲(Flash Wait States)及編譯最佳化影響巨大。以下數據基於 CMSIS-DSP 函式庫在理想記憶體條件下的實測參考。

  1. FFT 基準測試:實數 FFT(real FFT,RFFT)F32 vs Q31

    許多人誤以為定點數(Q31)一定比浮點數(F32)快,但在具備 FPU 的現代核心(M4F / M7)上,F32 往往更快,且開發更便利。

    核心架構測試條件256 點 RFFT(F32)1024 點 RFFT(F32)關鍵發現
    Cortex-M7@ 320 MHz(如 S32K3)~ 8,726 週期(27.3 µs~ 36,337 週期(113.6 µs雙發射管線優勢顯著,F32 比 Q31 更快
    Cortex-M4F@ 168 MHz(如 STM32F4)~ 14,285 週期(85.0 µs~ 55,538 週期(330.6 µs性價比高,適合一般音訊處理
    Cortex-M4F@ 112 MHz(如 S32K144)~ 14,285 週期(127.6 µs~ 55,538 週期(495.9 µs頻率直接影響最終時間
    Cortex-M3@ 72 MHz(無 FPU)N/A(極慢)N/A需軟體模擬浮點,不建議用於即時 DSP

    注意:若使用複數 FFT(complex FFT,CFFT),運算量約為 RFFT 的兩倍。

  2. FIR 濾波器效能

    除了 FFT,有限脈衝響應(FIR)也是常見指標。根據 ST 在 STM32F7(M7)上的實測,29-tap 低通濾波器的執行效率:F32(66 µs) > Q31(73 µs) > Q15(99 µs)。這進一步證實了在高效能核心上,善用 FPU 進行浮點運算,反而比傳統的 16-bit 定點運算更具優勢。

  3. 影響效能的隱形殺手:記憶體延遲

    上述數據皆為「核心全速運作」的理想值。

    • 問題:現代 MCU 核心頻率(如 320 MHz)遠高於 Flash 讀取速度(約 50 MHz)。若程式直接在 Flash 執行,CPU 需插入大量等待狀態(Wait States),導致效能慢 3 ~ 7 倍。
    • 解法:務必將關鍵演算法(FFT / FIR)搬移至 緊密耦合記憶體(tightly coupled memory,TCM) 或 SRAM 執行,以確保零等待狀態的效能。
  4. 硬體加速器

    若 CPU 效能仍不足,應考慮內建硬體加速器的 MCU:

    • NXP PowerQuad / TI LEA(low-energy accelerator):獨立於 CPU 的運算單元。
    • Calterah Alps-Pro BBA(baseband accelerator):雷達專用基頻加速器,以數據吞吐量為目標,實現 < 5 µs 的等效處理速度。

如何自行測量?

若需驗證具體時間,建議使用以下方法:

  1. DWT 週期計數:ARM Cortex-M 內建 DWT (data watchpoint and trace) 暫存器,可精確計算 CPU 執行週期。測量結果可能受快取命中率及記憶體存取延遲影響,需視系統架構與測試條件解讀。
  2. GPIO 翻轉:在 FFT 函式呼叫前將指定的 GPIO 腳位(例如 GPIO_PIN_X)設為高電位,函式結束後設為低電位,利用示波器觀測高電位脈衝寬度,以量測 FFT 函式的實際執行時間。此方法能反映包含所有系統延遲的真實執行時間,最接近實際物理耗時。

記憶體

在 MCU 的系統設計中,記憶體架構不僅決定了硬體成本,更是影響系統效能的關鍵。選用時,必須清楚區分「揮發性記憶體(RAM)」與「非揮發性記憶體(Flash / non-volatile memory,NVM)」的功能定位。

簡單來說:Flash 用來存程式碼與固定的資料;RAM 用來放運算中的變數與暫存資料。

非揮發性記憶體

Flash 用於永久儲存韌體(firmware)與常數數據,斷電後資料不會消失。

Flash 架構主要分為兩類:

  • NOR Flash:支援隨機讀取,允許 CPU 直接讀取指令就地執行(execute-in-place,XIP),是 MCU 存放程式碼的標準介質。
  • NAND Flash:密度高、成本低,但無法隨機定址執行程式,主要用於檔案系統的大容量儲存。

為了平衡成本與耐用度,部分 MCU(如 NXP S32K、Infineon Traveo 系列)會將內部 Flash 劃分為以下功能性分區:

  • Program Flash(P-Flash):主程式儲存區。針對程式碼儲存最佳化,讀取速度快,但寫入壽命較有限(約 1k ~ 10k 次)。
  • Data Flash(D-Flash):資料儲存區。針對資料記錄最佳化,具備高寫入耐受度(100k 次以上),常用於模擬電子抹寫唯讀記憶體(EEPROM)儲存參數。

注意:並非所有 MCU 都有 D-Flash 硬體分區,許多通用型 MCU 僅提供單一 Flash 區塊,需搭配特定驅動程式與保留區域來模擬 EEPROM。此外,壽命數字僅為等級概念,實際規格請參閱技術規格書。

程式碼存在 Flash 裡,CPU 如何執行?主要有兩種模式:

  • XIP(就地執行)

    • 機制:CPU 直接從內部 Flash 讀取指令執行,不複製到 RAM。
    • 現狀:這是絕大多數現代 MCU 的預設運作模式。
    • 優缺點:節省大量 RAM,實現零複製啟動;但 Flash 讀取速度較慢,通常需搭配指令快取(instruction cache,I-Cache)來提升效能。
  • RAM 執行(Code in RAM)

    • 機制:將程式碼從 Flash 複製到 RAM 執行。
    • 應用場景:通常僅針對特定效能敏感函式(如中斷服務常式(interrupt service routine,ISR)、DSP 迴圈)進行最佳化,以利用 RAM 的零等待特性;或是系統使用外部儲存(NAND / NOR Flash)搭配同步動態隨機存取記憶體(synchronous DRAM,SDRAM)時才需將整個程式搬移。
    • 迷思:一般 MCU 不會把「整個」程式搬到 SRAM 跑,那樣太浪費寶貴的 SRAM 資源。

揮發性記憶體

RAM 用於儲存變數、堆疊(stack)與堆積(heap),斷電後資料即消失。常見的 RAM 類型包括:

類型全名特性與定位適用場景
SRAMStatic RAM速度最快、成本最高。MCU 內部主流,無需重新整理,可與 CPU 同步(零等待)。核心運算、堆疊、關鍵變數。
DRAMDynamic RAM密度高、成本低。需週期性重新整理(Refresh),延遲較高,通常為外部擴充。嵌入式 Linux、大型影像緩衝區。
PSRAMPseudo-Static RAM折衷方案。內部是 DRAM 架構(高密度),但介面偽裝成 SRAM(易控制)。AIoT 模型權重、音訊緩衝、圖形介面。

  • 程式寫很多(Code Size 大) $\rightarrow$ 需要更大的 Flash。 只要 MCU 支援 XIP,程式碼再多也只會佔用 Flash 空間,不會佔用 SRAM。(註:此處指 .text.rodata,不含 .data 與刻意搬到 RAM 的程式段
  • 變數用很多(Data Size 大) $\rightarrow$ 需要更大的 SRAM。 當內建 SRAM 不夠放大型陣列、AI 模型或螢幕緩衝區時,才需要外掛 PSRAM 來擴充。

實戰評估:記憶體到底夠不夠?

要精確評估記憶體需求,可以從編譯後的記憶體區段(Memory Segments)來分析。

編譯後,工具鏈的 size 指令通常會輸出如下摘要:

1
2
text    data     bss     dec     hex
20480   1024     2048    23552   5c00

各區段的意義如下:

  • .text(Code):程式碼與唯讀常數(.rodata)。$\rightarrow$ 佔用 Flash
  • .data(Init Data):已初始化的全域變數(如 int a = 10;)。$\rightarrow$ 佔用 Flash(存初始值)+ 佔用 RAM(執行時)
  • .bss(Zero Data):未初始化或為 0 的變數(如 int b;)。$\rightarrow$ 只佔用 RAM

評估 Flash 與 SRAM 需求的公式如下:

  • Flash 需求估算

    $$ \text{Flash Usage} \approx \text{.text} + \text{.data} $$

    • 建議預留 20% 空間給未來 OTA(over-the-air) 更新升級或功能擴充。
  • SRAM 需求估算

    $$ \text{SRAM Usage} = (\text{.data} + \text{.bss}) + \text{Stack} + \text{Heap} $$

    SRAM 的使用包含以下部分:

    • 靜態佔用.data + .bss(編譯完就確定了)。
    • 動態佔用
      • Stack(堆疊):函式呼叫與區域變數。需估算最深呼叫鏈(Worst-Case)。
      • Heap(堆積):malloc 動態分配。嵌入式系統建議少用。

    建議保留 30% 安全邊際,避免堆疊溢位(stack overflow)。

在評估大型陣列對 SRAM 的影響時,可直接計算其位元組大小:

  • 基礎範例:宣告一個用於 ADC 採樣的緩衝區 uint16_t raw_data[1024];

    • 計算方式:$1024 \text{(elements)} \times 2 \text{(bytes/element)} = 2048 \text{ bytes} = 2 \text{ KB}$
    • 此陣列將直接佔用 2 KB 的 SRAM 空間。
  • 影像範例:320 × 240 的 RGB565 影像

    • 計算方式:$320 \times 240 \times 2 \text{ bytes} = 153,600 \text{ bytes} \approx 150 \text{ KB}$
    • 這對於內建僅 128 KB SRAM 的 MCU 來說顯然不足,需考慮外掛 PSRAM。
  • 進階範例:4096 點 FFT 的 SRAM 需求

    在訊號處理應用中,FFT 是記憶體大戶。以 4096 點複數 FFT 為例,若輸入資料型態為 complex float(實部 float + 虛部 float = 8 bytes):

    • 基本需求(in-place buffer):若演算法支援 In-place 運算(輸出覆蓋輸入),僅需一個緩衝區:$ 4096 \times 8 \text{ bytes} = 32 \text{ KB} $

    • 額外工作區(scratch buffer):若演算法需要額外一個同尺寸的工作區,總需求變為:$ 2 \times 4096 \times 8 \text{ bytes} = 64 \text{ KB} $

CMSIS-DSP 函式庫中的所有 FFT 函式都設計為 In-place 運算(參數標註為 [in,out]),運算結果會直接覆蓋輸入緩衝區。因此在本情況下,僅需 32 KB 的 SRAM 即可完成 4096 點浮點 FFT 運算,無需額外輸出緩衝區。

記憶體最佳化策略

當發現 RAM 不足時,可以採取以下策略:

  1. 善用 const:將查表陣列或固定參數宣告為 const,強制將其放入 Flash(.rodata),釋放 RAM 空間。
  2. 時間換空間:大型數據不要一次載入 RAM,改為從 Flash 分批讀取處理。
  3. 優化資料型別:能用 uint8_t 就別用 int16_t,積少成多。
  4. 硬體擴充:若軟體優化已達極限,則需選用支援外掛 PSRAM 的 MCU。

I/O 與通訊能力

隨著製程微縮,MCU 內部整合的周邊(Peripherals)數量呈指數成長,但封裝的腳位數量(Pin Count)卻受限於物理尺寸與成本。這導致了「腳位多工(Pin multiplexing,PinMux)」成為現代 MCU 的標配。

PinMux 並非單純的軟體定義,其背後是實體的場效應電晶體開關。每個開關都有導通電阻($R_{ON}$)與寄生電容($C_{PAR}$)。共用的功能越多,掛在節點上的電容就越大,這會限制訊號頻寬。因此在選用時,對於高速介面(如簡化式千兆媒體非相依介面(RGMII)、高速 SPI),應優先選擇專用或多工功能較少的腳位,以確保訊號完整性。

設定方式的演進

面對複雜的 PinMux(電氣屬性、衝突檢測),手動查閱數千頁的參考手冊來編寫 pin_mux.c 已不合時宜且極易出錯。

  1. 傳統方法:datasheet 與暫存器地獄

    早期開發者需要自行查找每個腳位對應的基底位址(base address)與偏移量(offset),並計算正確的位元遮罩(bit mask)來寫入暫存器。例如,為了設定一個 UART TX 腳位,可能需要同時設定 clock gate、多工模式(MUX)、驅動強度與上拉電阻。一旦硬體改版換了腳位,所有相關的程式碼都必須逐行檢查修正。

  2. 現代方法:圖形化設定工具(GUI Config Tools)

    現代 MCU 廠商提供了強大的 GUI 設定工具,如 TI SysConfigNXP S32 Configuration ToolsSTM32CubeMX

    工程師只需在 GUI 上直接指定腳位功能(例如將 PTA12 映射為 CAN0_TX),工具便會自動偵測可用選項並即時阻擋潛在的腳位衝突。這些配置確認後,會被保存為專屬的設定檔(如 .syscfg.mex.ioc),並在編譯階段由工具鏈自動解析,產生對應的 .c.h 驅動程式碼(如 ti_drivers_config.c)。

    最終,開發者在應用層僅需呼叫如 Board_init()PINS_DRV_Init() 的頂層初始化函式即可驅動硬體,完全免去了手動修改底層暫存器的繁瑣過程;若未來面臨硬體變更,也僅需更新 GUI 設定並重新編譯即可。

電氣與周邊設定

除了基本的腳位路由,現代 GUI 工具更重要的功能是將複雜的「電氣特性」與「周邊參數」視覺化,讓工程師能像填寫表格一樣完成設定,而無需翻閱暫存器定義。

現代 MCU 的 I/O 控制器(如 NXP PCR 模組)提供精細的電氣控制,主要包括:

  • 輸入 / 輸出方向(direction):設定腳位為 Input 或 Output。

  • 電阻設定(Resistors)

    • 上拉 / 下拉(pull-up / pull-down):啟用內部上拉或下拉電阻,節省外部元件。
    • 高阻抗(high-Z / floating):高阻抗模式,適用於類比輸入或省電模式。
  • 驅動強度(drive strength)

    • 高驅動(high drive):推動大電容負載或長走線,但電磁干擾(electromagnetic interference,EMI)輻射強。
    • 低驅動(low drive):降低 EMI,適合短走線或低速訊號。
  • 迴轉率(slew rate):控制訊號邊緣的陡峭度。除非跑高頻,則建議設為 Slow 以減少振鈴(ringing)。

  • 輸入濾波(passive filter):啟用硬體去彈跳(debounce),適合按鍵輸入。

工具不僅設定腳位,還能直接產生周邊的初始化代碼,例如:

  • UART:直接設定鮑率(baud rate,例如 115200)、同位檢查(Parity:None / Even / Odd)、停止位元(stop bits)等。

  • PWM:設定頻率、佔空比、死區時間(dead-time)等。

  • CAN / CAN-FD(flexible data-rate)

    • FD Enable:一鍵啟用 CAN-FD 支援。
    • Bitrate:分別設定仲裁速率(如 500 kbps)與資料速率(如 2 Mbps)。

這種「所見即所得」的設定方式,大幅降低了底層驅動的開發門檻。

Linux 與 MCU 設定差異

當系統從 MCU 轉向執行 Linux 的 SoC 時,硬體設定的邏輯發生了根本變化。

  • MCU(bare-metal / RTOS): 設定是靜態編譯的。產生的 C 程式碼直接寫入暫存器。驅動程式與硬體設定緊密耦合。

  • Linux Kernel(device Tree & pinctrl): 設定是宣告式(declarative) 的。驅動程式(driver)不包含硬體位置資訊,而是透過 裝置樹(device tree,DT) 描述硬體結構。

  • 腳位控制子系統: Linux 核心將腳位控制抽象化。驅動程式只需請求狀態(如 “default” 或 “sleep”),由 Pinctrl 子系統根據裝置樹原始碼(DTS)的描述來操作底層暫存器。這實現了驅動程式與板級設定(board file)的完全解耦。

Linux CAN Bus 實戰

在 MCU 上,我們習慣直接操作 CAN 暫存器或呼叫 CAN_Send() SDK 函式。但在 Linux 中,CAN 被視為一個網路介面,這就是著名的 SocketCAN 架構。

使用 SocketCAN 的步驟如下:

  • DTS 配置(.dts

    首先,需在 DTS 中定義 CAN 控制器及其腳位:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
&flexcan1 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_flexcan1>;
    status = "okay";
};

pinctrl_flexcan1: flexcan1grp {
    fsl,pins = <
        MX8MP_IOMUXC_SAI2_RXC__CAN1_TX      0x154
        MX8MP_IOMUXC_SAI2_RXD__CAN1_RX      0x154
    >;
};
  • 啟用介面

    Linux 啟動後,不會看到 CAN_Init() 這樣的函式,而是使用標準網路指令:

1
2
3
# 設定 Bitrate 為 500 kbps 並啟動介面
ip link set can0 type can bitrate 500000
ip link set can0 up
  • 傳送與接收數據

    應用層完全不需要知道底層是 SPI 轉 CAN 還是內建 CAN,統一使用 Socket API 進行操作。常用的除錯工具包括 can-utils

    • 接收資料(Dump)candump can0
    • 發送 ID 123,資料 DEADBEEF(Send)cansend can0 123#DEADBEEF

    這種抽象化讓應用程式具備極高的可移植性,無論底層硬體如何更換,上層軟體幾乎無需修改。

結論

選擇適合的 MCU 或 SoC,本質上是系統工程的核心決策。當前晶片的整合度持續提升,無論是電源模式、CPU 架構、記憶體子系統,或是 I/O 與通訊能力,都直接影響整體系統的效能、功耗與可維護性。唯有從技術規格書切入,逐項檢視,才能在專案初期建立足夠的技術把握度。

實務開發中,工程師必須在成本、效能、功耗與未來擴充性之間取得平衡。若應用偏向即時訊號處理,需關注 CPU 效能、記憶體延遲與硬體加速器;若系統長時間以電池運作,則需優先考量低功耗模式、喚醒延遲與電源管理策略;若產品包含大量通訊與周邊整合,PinMux 配置、訊號完整性與既有生態系就成為關鍵。

最終,選用不只是挑一顆能「跑得動」的晶片,而是挑選一個能支撐整體架構、降低開發風險、符合長期維運需求的技術基石。透過完整評估並掌握上述關鍵觀點,便能為後續韌體開發、硬體設計與產品量產奠定穩定且可預期的技術基礎。

參考文獻

  1. System On Chip (SoC) Companies - Top Company List
  2. Design IP Market Increased by All-time-high: 20% in 2024! - SemiWiki
  3. Calterah Semiconductor’s Automotive Radar SoC Enters Mass Production Using Synopsys DesignWare ARC Processor IP
  4. text, data and bss: Code and Data Size Explained | MCU on Eclipse
  5. The DSP capabilities of ARM® Cortex®-M4 and Cortex-M7 Processors DSP feature set and benchmarks
  6. S32K3xx Data Sheet
  7. Measuring Cortex-M4 instruction clock cycle counts
  8. Exclusive: Huawei unit ships Chinese-made surveillance chips in fresh comeback sign | Reuters
  9. KW45 Data Sheet
  10. KW45 Power Management Application Note
  11. K32W148-EVK User Manual
  12. Getting Started with the i.MX 8M Plus EVK
主題 Stack 由 Jimmy 設計