前言
隨著嵌入式應用日益多元,現代微控制器單元(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 資料保存 | 說明 |
|---|---|---|---|---|
| Run | 20 ~ 500 µA/MHz | N/A | 是 | 依製程與架構差異大。超低功耗系列可低至 20 µA/MHz。 |
| Sleep | 數 µA ~ 數 mA | < 1 µs | 是 | CPU 停止,周邊持續運作。電流取決於開啟的周邊數量。 |
| 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 測試,或詢問原廠以獲取更完整的資料,亦可參考學界或業界的公開數據做初步評估。
- CoreMark / MHz 各主流架構數值彙整參考:WikiChip CoreMark
- 官方完整成績查詢、認證標章說明及下載測試程式,請參考:EEMBC CoreMark® Scores
部分沒有 FPU 的 CPU,在處理複數訊號、有小數點的計算會花費更多時間,在考量成本、犧牲一定精度的情況下,可改用定點數進行計算並得出相似的結果,是實務上的權衡。
CPU 效能指標對照表
| MCU 型號 | CPU 核心 | 時脈頻率 | DMIPS/MHz | CoreMark/MHz | 總 DMIPS | 總 CoreMark | FPU |
|---|---|---|---|---|---|---|---|
| NXP S32K144 | ARM Cortex-M4F | 112 MHz | 1.25 | 3.27 | 140 | 366.6 | 單精度 |
| TI TMS570LS0332 | ARM Cortex-R4 | 80 MHz | 1.66 | 3.47 | 132 | 277.6 | 無 |
| STM32U585 | ARM Cortex-M33 | 160 MHz | 1.5 | 4.07 | 240 | 651.2 | 單精度 |
| ESP32-S3-WROOM(單核) | Xtensa LX7 | 240 MHz | 1.3 | 2.56 | 312 | 614.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 函式庫在理想記憶體條件下的實測參考。
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 的兩倍。
FIR 濾波器效能
除了 FFT,有限脈衝響應(FIR)也是常見指標。根據 ST 在 STM32F7(M7)上的實測,29-tap 低通濾波器的執行效率:F32(66 µs) > Q31(73 µs) > Q15(99 µs)。這進一步證實了在高效能核心上,善用 FPU 進行浮點運算,反而比傳統的 16-bit 定點運算更具優勢。
影響效能的隱形殺手:記憶體延遲
上述數據皆為「核心全速運作」的理想值。
- 問題:現代 MCU 核心頻率(如 320 MHz)遠高於 Flash 讀取速度(約 50 MHz)。若程式直接在 Flash 執行,CPU 需插入大量等待狀態(Wait States),導致效能慢 3 ~ 7 倍。
- 解法:務必將關鍵演算法(FFT / FIR)搬移至 緊密耦合記憶體(tightly coupled memory,TCM) 或 SRAM 執行,以確保零等待狀態的效能。
硬體加速器
若 CPU 效能仍不足,應考慮內建硬體加速器的 MCU:
- NXP PowerQuad / TI LEA(low-energy accelerator):獨立於 CPU 的運算單元。
- Calterah Alps-Pro BBA(baseband accelerator):雷達專用基頻加速器,以數據吞吐量為目標,實現 < 5 µs 的等效處理速度。
如何自行測量?
若需驗證具體時間,建議使用以下方法:
- DWT 週期計數:ARM Cortex-M 內建 DWT (data watchpoint and trace) 暫存器,可精確計算 CPU 執行週期。測量結果可能受快取命中率及記憶體存取延遲影響,需視系統架構與測試條件解讀。
- 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 類型包括:
| 類型 | 全名 | 特性與定位 | 適用場景 |
|---|---|---|---|
| SRAM | Static RAM | 速度最快、成本最高。MCU 內部主流,無需重新整理,可與 CPU 同步(零等待)。 | 核心運算、堆疊、關鍵變數。 |
| DRAM | Dynamic RAM | 密度高、成本低。需週期性重新整理(Refresh),延遲較高,通常為外部擴充。 | 嵌入式 Linux、大型影像緩衝區。 |
| PSRAM | Pseudo-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 指令通常會輸出如下摘要:
| |
各區段的意義如下:
.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 不足時,可以採取以下策略:
- 善用
const:將查表陣列或固定參數宣告為const,強制將其放入 Flash(.rodata),釋放 RAM 空間。 - 時間換空間:大型數據不要一次載入 RAM,改為從 Flash 分批讀取處理。
- 優化資料型別:能用
uint8_t就別用int16_t,積少成多。 - 硬體擴充:若軟體優化已達極限,則需選用支援外掛 PSRAM 的 MCU。
I/O 與通訊能力
隨著製程微縮,MCU 內部整合的周邊(Peripherals)數量呈指數成長,但封裝的腳位數量(Pin Count)卻受限於物理尺寸與成本。這導致了「腳位多工(Pin multiplexing,PinMux)」成為現代 MCU 的標配。
PinMux 並非單純的軟體定義,其背後是實體的場效應電晶體開關。每個開關都有導通電阻($R_{ON}$)與寄生電容($C_{PAR}$)。共用的功能越多,掛在節點上的電容就越大,這會限制訊號頻寬。因此在選用時,對於高速介面(如簡化式千兆媒體非相依介面(RGMII)、高速 SPI),應優先選擇專用或多工功能較少的腳位,以確保訊號完整性。
設定方式的演進
面對複雜的 PinMux(電氣屬性、衝突檢測),手動查閱數千頁的參考手冊來編寫 pin_mux.c 已不合時宜且極易出錯。
傳統方法:datasheet 與暫存器地獄
早期開發者需要自行查找每個腳位對應的基底位址(base address)與偏移量(offset),並計算正確的位元遮罩(bit mask)來寫入暫存器。例如,為了設定一個 UART TX 腳位,可能需要同時設定 clock gate、多工模式(MUX)、驅動強度與上拉電阻。一旦硬體改版換了腳位,所有相關的程式碼都必須逐行檢查修正。
現代方法:圖形化設定工具(GUI Config Tools)
現代 MCU 廠商提供了強大的 GUI 設定工具,如 TI SysConfig、NXP S32 Configuration Tools 或 STM32CubeMX。
工程師只需在 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 控制器及其腳位:
| |
啟用介面
Linux 啟動後,不會看到
CAN_Init()這樣的函式,而是使用標準網路指令:
| |
傳送與接收數據
應用層完全不需要知道底層是 SPI 轉 CAN 還是內建 CAN,統一使用 Socket API 進行操作。常用的除錯工具包括
can-utils:- 接收資料(Dump):
candump can0 - 發送 ID 123,資料 DEADBEEF(Send):
cansend can0 123#DEADBEEF
這種抽象化讓應用程式具備極高的可移植性,無論底層硬體如何更換,上層軟體幾乎無需修改。
- 接收資料(Dump):
結論
選擇適合的 MCU 或 SoC,本質上是系統工程的核心決策。當前晶片的整合度持續提升,無論是電源模式、CPU 架構、記憶體子系統,或是 I/O 與通訊能力,都直接影響整體系統的效能、功耗與可維護性。唯有從技術規格書切入,逐項檢視,才能在專案初期建立足夠的技術把握度。
實務開發中,工程師必須在成本、效能、功耗與未來擴充性之間取得平衡。若應用偏向即時訊號處理,需關注 CPU 效能、記憶體延遲與硬體加速器;若系統長時間以電池運作,則需優先考量低功耗模式、喚醒延遲與電源管理策略;若產品包含大量通訊與周邊整合,PinMux 配置、訊號完整性與既有生態系就成為關鍵。
最終,選用不只是挑一顆能「跑得動」的晶片,而是挑選一個能支撐整體架構、降低開發風險、符合長期維運需求的技術基石。透過完整評估並掌握上述關鍵觀點,便能為後續韌體開發、硬體設計與產品量產奠定穩定且可預期的技術基礎。
參考文獻
- System On Chip (SoC) Companies - Top Company List
- Design IP Market Increased by All-time-high: 20% in 2024! - SemiWiki
- Calterah Semiconductor’s Automotive Radar SoC Enters Mass Production Using Synopsys DesignWare ARC Processor IP
- text, data and bss: Code and Data Size Explained | MCU on Eclipse
- The DSP capabilities of ARM® Cortex®-M4 and Cortex-M7 Processors DSP feature set and benchmarks
- S32K3xx Data Sheet
- Measuring Cortex-M4 instruction clock cycle counts
- Exclusive: Huawei unit ships Chinese-made surveillance chips in fresh comeback sign | Reuters
- KW45 Data Sheet
- KW45 Power Management Application Note
- K32W148-EVK User Manual
- Getting Started with the i.MX 8M Plus EVK
