Menu Close

什么是 MCU?微控制器和 CPU 有什么不同?

一、什么是 MCU?

MCU 是 Microcontroller Unit 的缩写,中文通常称为微控制器,也经常被称为单片机。

它是一种专门用于控制电子设备的集成电路,通常把处理器核心、程序存储器、数据存储器以及多种输入输出接口集成在同一颗芯片内部。

MCU 广泛应用于各种电子产品,例如智能家电、汽车电子、工业控制设备、医疗仪器、智能传感器、机器人、电子玩具和物联网设备。

许多日常生活中看似简单的电子功能,实际上都是由 MCU 控制完成的。

例如,电饭煲需要根据温度传感器的数据决定何时加热、何时保温;洗衣机需要控制电机转速、进水阀和排水泵;汽车电子控制单元需要读取传感器信号,并根据控制算法调整执行器的工作状态。

这些任务通常不需要一台完整的个人计算机,却需要一个能够稳定运行、成本较低、功耗较小的控制系统。

MCU 正是为这样的应用而设计的。

与普通计算机不同,MCU 通常不需要外接独立内存芯片就能够执行基本程序。它把运行程序所需要的主要资源集成到芯片内部,因此可以独立完成许多控制任务。

不过,MCU 并不是没有 CPU。恰恰相反,CPU 是 MCU 内部最重要的组成部分之一。理解 MCU 与 CPU 的关系,是认识嵌入式系统的第一步。

二、MCU 和 CPU 到底有什么区别?

CPU 是 Central Processing Unit 的缩写,中文称为中央处理器。它负责执行程序指令、进行算术与逻辑运算,以及控制程序的执行流程。

MCU 则是一个相对完整的微型计算系统。除了 CPU 核心以外,MCU 通常还集成 Flash 程序存储器、SRAM 数据存储器、GPIO 通用输入输出接口、定时器、通信接口以及其他专用控制电路。

因此,CPU 和 MCU 并不是两个完全对立的概念。

CPU 是执行指令的处理器核心,而 MCU 是包含 CPU 及其他系统组件的集成芯片。

例如,一颗典型的 32 位 MCU 可能包含一个 Arm Cortex-M 处理器核心、256 KB Flash、64 KB SRAM、多个定时器、UART、SPI、I²C 通信接口以及模数转换器。这样的芯片连接电源、时钟和必要的外围电路后,就可以运行程序并控制外部设备。

相比之下,个人计算机中的高性能 CPU 通常依赖外部 DDR 内存、主板上的其他组件以及完整的软件系统,才能实现计算机的全部功能。

需要注意的是,现代桌面和服务器处理器也可能集成缓存、内存控制器、图形处理单元和多种系统功能。

因此,不能简单地说 CPU 只包含运算核心,而 MCU 才包含其他电路。两者的主要区别在于产品定位、集成资源、运行环境以及所面向的应用任务。

MCU 更强调控制功能、低功耗、低成本和外围设备集成,而高性能通用 CPU 更强调复杂软件的执行能力和整体计算性能。

三、MCU 内部有哪些主要组成部分?

一颗典型 MCU 可以看作是一台高度集成的小型计算机。虽然不同型号的内部结构存在差异,但常见 MCU 通常包含以下几个主要部分。

1. CPU 核心

CPU 核心负责读取和执行程序指令,例如加法、减法、比较、数据移动、条件跳转以及访问存储器等操作。

MCU 中的 CPU 可以采用不同的指令集架构,例如 Arm Cortex-M 使用的 Arm 指令集、RISC-V 指令集、AVR 指令集以及某些厂商自己的专用架构。

MCU 的 CPU 核心通常比桌面计算机处理器简单,执行频率也一般较低,但足以完成大量控制任务。

2. Flash 程序存储器

Flash 是一种非易失性存储器,也就是说,即使切断电源,内部保存的数据通常仍然存在。

MCU 经常使用片上 Flash 保存程序代码、固定配置和部分需要长期保留的数据。

例如,电饭煲的温度控制程序可以保存在 MCU 的 Flash 中。每次接通电源时,MCU 就可以从规定的启动位置开始执行程序,而不必重新安装软件。

部分 MCU 使用其他非易失性存储技术,或者需要外部存储器保存程序,因此片上 Flash 并不是所有 MCU 的必备条件。

3. SRAM 数据存储器

SRAM 是 Static Random Access Memory 的缩写,中文称为静态随机存取存储器。

MCU 使用 SRAM 保存程序运行过程中需要频繁读取和修改的数据,例如变量、计算结果、缓冲区以及函数调用使用的栈空间。

SRAM 通常属于易失性存储器,断电后数据一般会丢失。由于 MCU 的片上 SRAM 容量有限,嵌入式程序通常需要比较谨慎地管理内存。

4. GPIO 通用输入输出接口

GPIO 是 General-Purpose Input/Output 的缩写,中文称为通用输入输出接口。它允许 MCU 直接读取外部数字信号,或者输出数字控制信号。

例如,MCU 可以读取按钮是否被按下,也可以控制 LED 灯亮灭。通过适当的驱动电路,还可以利用 GPIO 控制继电器、蜂鸣器和其他外围设备。

GPIO 是 MCU 与外部电子世界交互的基本方式之一。

5. 定时器和计数器

定时器用于测量时间、产生周期事件或者统计外部信号。许多 MCU 还支持 PWM,也就是 Pulse Width Modulation,中文称为脉宽调制。

PWM 可以通过改变周期信号中高电平所占的比例,控制 LED 亮度、电机驱动器的平均输出以及其他设备的工作状态。

6. ADC 和 DAC

ADC 是 Analog-to-Digital Converter 的缩写,中文称为模数转换器。它可以把一定范围内的模拟电压转换为数字数值,让 MCU 读取温度、压力、光线等传感器经过适当电路处理后的信号。

DAC 是 Digital-to-Analog Converter 的缩写,中文称为数模转换器。它可以把数字数值转换成模拟输出信号,适用于波形生成和模拟控制等应用。

并非所有 MCU 都具有内置 DAC,具体取决于芯片型号。

7. 通信接口

MCU 通常集成 UART、SPI、I²C 等常用通信接口,有些型号还支持 CAN、USB、Ethernet 或其他通信功能。

这些接口使 MCU 能够与传感器、显示器、存储芯片、其他 MCU 以及上位机进行数据交换。

通过这些集成资源,MCU 可以在很小的电路板上完成相当复杂的控制功能。

MCU工作原理

四、MCU 是怎样工作的?

MCU 的工作原理可以通过一个简单的温度控制系统来理解。

假设我们需要设计一个自动温度控制器。当温度低于设定值时,系统打开加热装置;当温度达到目标范围后,系统关闭加热装置。

首先,温度传感器检测环境温度,并通过模拟信号或者数字通信接口把测量结果发送给 MCU。如果传感器输出模拟电压,MCU 可以使用 ADC 将其转换成数字数值。如果传感器本身具有数字接口,MCU 就可以通过 I²C、SPI 或其他方式直接读取数据。

接下来,MCU 内部的 CPU 执行已经保存在 Flash 中的控制程序。程序读取当前温度,将它与设定温度进行比较,然后决定是否需要启动加热装置。

最后,MCU 通过 GPIO 或 PWM 等输出控制信号,驱动继电器、功率晶体管或者专门的功率控制电路。

这个过程可以不断重复,让设备根据环境变化自动调整工作状态。

例如,控制程序可能每隔 100 毫秒读取一次温度,而不是让 CPU 持续以最高速度运行。实际系统还可以通过定时器中断、低功耗等待以及其他机制提高效率。

在工程设计中,温度控制通常还需要加入适当的滞回区间,避免温度接近设定值时加热装置频繁开启和关闭。同时,过温保护等安全措施也不应完全依赖普通软件判断。

这类读取输入、执行判断、控制输出的循环,就是 MCU 应用中的典型工作模式。

五、MCU 为什么通常比桌面 CPU 功耗低?

MCU 经常用于电池供电的设备,因此低功耗是它的重要设计目标之一。

一颗普通 MCU 的工作频率可能只有几十 MHz 到几百 MHz,而桌面计算机的高性能 CPU 通常可以达到数 GHz。

由于 MCU 的处理器结构通常较简单,晶体管规模较小,工作电压和运行频率也针对嵌入式应用进行了优化,因此整体功耗往往明显低于高性能桌面处理器。

但工作频率并不是决定功耗的唯一因素。芯片功耗还与电压、开关活动、制造工艺、外围设备、漏电流和工作状态有关。

许多 MCU 提供 Sleep、Stop、Standby 等不同级别的低功耗模式。

程序可以在不需要计算时让 CPU 停止执行,关闭部分时钟或外围模块,并在定时器、按钮或其他事件发生时重新唤醒。

例如,一个电池供电的无线温度传感器可能每隔几分钟醒来一次,测量温度并发送数据,然后再次进入低功耗状态。

这种间歇式运行方式可以大幅减少平均功耗,使设备在合适的硬件和软件设计下长期依靠电池工作。

需要注意的是,并不是所有 MCU 都具有相同的低功耗性能。

不同厂商、芯片型号和工作模式之间可能存在明显差异,外接无线模块、传感器和其他电路也可能消耗相当多的电能。

六、MCU 的实时性为什么重要?

MCU 经常用于需要及时响应外部事件的控制系统,因此实时性是嵌入式设计中的一个重要概念。

实时性并不简单意味着处理器运行得非常快,而是指系统能够在规定的时间限制内完成必要的操作。

例如,在工业电机控制系统中,控制器可能需要按照固定周期采样电流、计算控制输出并更新 PWM 信号。如果控制操作超过规定的时间限制,就可能影响电机的运行稳定性。

MCU 通常具有硬件定时器、中断控制器和其他用于精确控制执行时序的机制。外部事件发生时,硬件可以发出中断请求,让 CPU 暂时处理相应事件,然后继续执行其他任务。

许多嵌入式系统还使用 RTOS,也就是 Real-Time Operating System,中文称为实时操作系统。RTOS 可以提供任务调度、同步、定时和中断协作等机制,帮助开发者管理具有时间要求的任务。

常见的嵌入式实时操作系统包括 FreeRTOS 和 Zephyr。某些简单 MCU 应用则完全不需要操作系统,只需运行一个主循环并配合中断处理即可。

需要强调的是,使用 MCU 并不自动保证系统满足严格的实时要求。实时性能还取决于中断响应、最坏执行时间、任务优先级、硬件设计以及软件实现。

同样,运行 Linux 的嵌入式处理器也可以通过适当的实时机制满足某些实时任务。因此,实时性并不是 MCU 独有的能力。

七、MCU 为什么通常不运行 Windows 或普通桌面 Linux?

普通桌面操作系统需要较多计算资源,包括内存管理、进程调度、文件系统、网络协议栈、用户界面和大量设备驱动程序。

Windows 和常见桌面 Linux 系统通常面向具有较大内存容量、较高计算性能以及较完整硬件支持的平台。

许多 MCU 的资源则相对有限。例如,一颗普通 MCU 可能只有数百 KB 的 SRAM 和几 MB 的 Flash。

这些资源足以运行控制程序或轻量级实时操作系统,却通常不足以运行完整的桌面操作系统。

此外,很多 MCU 所使用的 CPU 核心没有内存管理单元,也就是 MMU。MMU 是支持虚拟内存地址转换和进程地址空间隔离的重要硬件组件。

传统的通用 Linux 内核通常要求目标处理器具备相应的 MMU 支持,而许多 Cortex-M 等微控制器核心并没有这种硬件。

不过,这并不意味着所有 MCU 都完全无法运行 Linux 类系统。

某些处理器平台可以使用针对无 MMU 系统设计的特殊 Linux 配置,也存在资源较丰富、硬件能力较强的微控制器和嵌入式 SoC。

因此,更准确的说法是:绝大多数传统 MCU 更适合运行裸机程序或者轻量级 RTOS,而不是 Windows 或完整的桌面 Linux 系统。

八、MCU、MPU 和 SoC 有什么区别?

在嵌入式开发中,除了 MCU,还经常遇到 MPU 和 SoC 这两个术语。

MPU 是 Microprocessor Unit 的缩写,中文通常称为微处理器。它主要强调处理器计算功能。传统 MPU 往往需要配合外部存储器和其他外围电路,才能构成完整的计算系统。

例如,一些基于 Arm Cortex-A 的应用处理器可以运行 Linux 或 Android,适用于复杂用户界面、网络应用和多媒体处理。它们通常需要外部 DRAM,并具有较高的计算能力。

SoC 是 System on Chip 的缩写,中文称为片上系统。它指在一颗芯片中集成多个系统组件,例如 CPU、GPU、内存控制器、通信模块、视频处理单元以及其他专用硬件。

智能手机中的应用处理器通常属于复杂的 SoC,而许多高集成度嵌入式处理器也采用 SoC 架构。

MCU 从广义上看也是一种高度集成的片上计算系统,但行业通常使用 MCU 这个名称强调其面向控制任务的产品定位和典型资源配置。

因此,MCU、MPU 和 SoC 并不是完全互斥的分类。MCU 侧重嵌入式控制,MPU 强调微处理器功能,而 SoC 强调系统级集成。

九、常见的 MCU 有哪些?

MCU 的种类非常丰富,不同厂商提供了大量面向不同应用的芯片产品。

1. 8051 系列

8051 是历史悠久的 8 位微控制器架构,最初由 Intel 推出。它在工业控制、教学和低成本嵌入式系统中曾得到广泛应用。

现代仍然存在许多兼容 8051 指令集的 MCU 产品,但它们的制造工艺、外围功能和运行速度可能与早期芯片存在很大差异。

8051 的特点之一是架构相对容易用于学习基础单片机概念。

2. AVR 系列

AVR 是一种广泛应用于嵌入式系统的微控制器架构。经典的 ATmega328P 就是 Arduino Uno R3 开发板所使用的 MCU。

ATmega328P 是一颗 8 位 MCU,具有 Flash、SRAM、GPIO、定时器以及多种常见通信接口。

Arduino 生态系统降低了 MCU 编程的入门难度,使初学者能够通过简单程序控制 LED、读取传感器以及连接各种电子模块。

需要注意的是,Arduino 是开发平台和生态系统的名称,并不是一种单独的 CPU 架构。不同 Arduino 开发板可能使用 AVR、Arm、ESP32 或其他 MCU。

3. Arm Cortex-M 系列

Arm Cortex-M 是现代 32 位 MCU 中非常重要的处理器核心系列。它被广泛用于工业控制、消费电子、物联网、汽车电子和医疗设备。

STMicroelectronics 的 STM32 系列就是采用 Arm Cortex-M 核心的著名 MCU 产品家族。

不同 STM32 型号在 CPU 核心、主频、存储器容量和外围设备配置上存在明显差异。有些适合低功耗传感器,有些适合电机控制,还有一些能够处理较复杂的数字信号和嵌入式应用。

4. ESP32 系列

ESP32 是 Espressif Systems 推出的 MCU 产品系列,在物联网和无线通信设备中非常常见。

不同 ESP32 型号可能采用 Xtensa 或 RISC-V CPU 核心,并提供不同的 Wi-Fi、Bluetooth 及其他外围功能。

ESP32 的重要特点是某些型号在 MCU 中集成了无线通信能力,使开发者能够较方便地构建无线传感器、智能家居设备以及远程控制系统。

5. RISC-V MCU

RISC-V 是一种开放的指令集架构,越来越多的 MCU 产品采用 RISC-V 处理器核心。

RISC-V 并不是某一家芯片公司的专有处理器产品,而是一套可以由不同组织实现的指令集规范。

采用 RISC-V 的 MCU 可以根据实际需求选择不同的指令集扩展和硬件设计,适用于低成本控制器、物联网设备以及其他嵌入式应用。

不过,RISC-V 只规定软件可见的指令集及相关架构规则,并不直接决定 MCU 必须具备哪些 GPIO、存储器和通信接口。这些功能仍然由具体芯片设计决定。

十、8 位、16 位和 32 位 MCU 有什么区别?

MCU 经常根据处理器的数据处理能力和架构特征,被称为 8 位、16 位或者 32 位微控制器。

8 位 MCU 通常具有面向 8 位数据运算的处理器架构,适用于简单控制、低成本设备和资源需求较低的应用。

16 位 MCU 在数据处理宽度、寻址能力和运算效率等方面通常提供不同的设计选择。某些 16 位 MCU 特别适合低功耗控制和特定工业应用。

32 位 MCU 则通常具有更强的整数运算能力、更丰富的指令集和较大的地址空间,在复杂控制、物联网、数字信号处理以及嵌入式软件开发中非常常见。

不过,处理器的位数并不能直接代表 MCU 的整体性能。执行频率、指令集效率、存储器速度、硬件乘法器、浮点运算单元和专用外围设备都会影响实际运行效果。

例如,一颗针对电机控制设计的 16 位 MCU,可能在特定实时控制任务上比一颗普通 32 位 MCU 更合适。

选择 MCU 时,应当从应用需求出发,而不是简单认为位数越大就一定越好。

十一、MCU 和 FPGA 有什么不同?

MCU 和 FPGA 都广泛用于嵌入式系统,但它们的工作方式具有本质区别。

MCU 通过内部 CPU 核心执行软件指令。开发者通常使用 C、C++、Rust 或其他编程语言编写程序,再通过编译工具生成机器代码,交由 CPU 按照指令执行。

FPGA 是 Field-Programmable Gate Array 的缩写,中文称为现场可编程门阵列。FPGA 通过可配置逻辑单元、互连资源和专用硬件模块,构建能够并行工作的数字逻辑电路。

MCU 的并行能力通常受到 CPU 核心数量、中断机制和外围硬件的限制,而 FPGA 可以根据逻辑资源和设计要求构造多个真正并行运行的硬件数据通路。

例如,如果需要读取传感器数据、判断温度并控制一个继电器,MCU 通常是简单而经济的选择。

如果需要对多个高速数字信号通道进行严格定时的并行处理,FPGA 可能更有优势。

这并不意味着 FPGA 一定比 MCU 更快,而是两者擅长的任务不同。MCU 强调软件控制的灵活性,FPGA 强调硬件逻辑的可配置性和并行性。

一些系统还会同时使用 MCU 和 FPGA,让 MCU 负责配置、通信和系统管理,让 FPGA 执行高速并行数据处理任务。

十二、MCU 程序是怎样开发的?

MCU 程序的开发过程通常与普通电脑软件有所不同。

开发者首先根据应用需求选择合适的 MCU,并参考芯片的数据手册、参考手册和开发工具文档,了解其存储器布局、GPIO、时钟系统以及其他外围设备。

接下来,开发者使用 C、C++、Rust 或汇编语言编写程序。对于许多 MCU 项目,C 仍然是最常见的开发语言之一。

程序经过交叉编译后,会生成适用于目标 MCU 指令集的机器代码。交叉编译是指在一种计算机平台上生成能够在另一种目标平台上运行的程序。

生成的固件通常会通过 SWD、JTAG、UART、USB 或芯片专用烧录方式写入 MCU 的非易失性存储器。

在调试过程中,开发者可以使用调试器查看寄存器、内存、变量以及程序运行位置,也可以通过串口输出日志或者使用示波器和逻辑分析仪观察外部信号。

与桌面程序不同,MCU 程序经常需要直接访问硬件寄存器。每个寄存器通常对应某种硬件控制功能,例如设置 GPIO 方向、启动定时器或者读取通信接口状态。

为了降低开发难度,许多芯片厂商提供 HAL,也就是 Hardware Abstraction Layer,中文称为硬件抽象层。HAL 可以把复杂的寄存器操作封装成相对容易使用的软件接口。

不过,在对执行时间、代码大小或硬件控制有严格要求的场景中,开发者仍然可能需要直接操作寄存器。

十三、MCU 为什么在物联网中如此重要?

物联网,也就是 Internet of Things,简称 IoT,是指让各种物理设备通过网络交换信息,并根据数据执行监测或控制任务。

许多物联网设备实际上并不需要复杂的计算机系统。例如,一个智能温度传感器只需要定期读取温度,将数据发送到服务器,并在大部分时间进入低功耗状态。

MCU 能够在一颗小型芯片中提供处理器、存储器、数字接口和控制功能,因此适合用于这些资源有限、成本敏感的设备。

某些 MCU 还集成 Wi-Fi、Bluetooth Low Energy 或其他无线通信功能,进一步降低了电路复杂度。

在典型物联网系统中,MCU 负责读取传感器、执行基本判断和控制外部设备。网络通信模块负责交换数据,远程服务器或云平台可以进行数据存储、分析和管理。

不过,物联网设备不仅需要考虑计算功能,还必须关注安全性。固件更新、设备身份认证、通信加密、安全启动和密钥保护,都是现代 MCU 系统设计中的重要问题。

由于许多物联网设备会长期运行并直接连接真实世界中的设备,系统的可靠性和安全性有时比单纯的处理速度更加重要。

十四、怎样选择合适的 MCU?

选择 MCU 时,首先应该明确设备需要完成哪些任务。例如,是否需要读取模拟传感器、控制电机、连接无线网络、处理音频信号,或者执行复杂的数字计算。

其次,需要评估计算能力和存储器容量。对于简单的按钮和 LED 控制,低成本的 8 位 MCU 可能已经足够。如果需要运行 RTOS、复杂通信协议或者数字信号处理算法,则可能需要性能更强的 32 位 MCU。

外围设备也是重要的选择条件。实际项目可能需要多个 UART 接口、SPI 控制器、I²C 接口、ADC 通道、PWM 输出或者 CAN 通信接口。如果 MCU 缺少必要的硬件功能,即使 CPU 速度很快,也可能不适合当前项目。

对于电池供电设备,需要特别关注不同运行模式下的电流消耗,以及芯片从低功耗状态恢复工作的时间。

在工业和汽车应用中,还需要考虑工作温度、电磁兼容性、可靠性、产品生命周期以及相关安全要求。

此外,开发工具、软件生态、调试支持、芯片供货和长期维护成本也非常重要。成熟的开发环境和完善的文档,往往能够显著降低整个项目的开发成本。

因此,选择 MCU 的关键不是购买性能最高的芯片,而是选择能够以合理成本、功耗和开发复杂度可靠完成任务的器件。

十五、总结:MCU 与 CPU 的真正关系

MCU 是现代嵌入式系统中最常见的核心器件之一。它把 CPU、存储器和各种外围控制功能集成在一颗芯片内部,使电子设备能够以较低成本和较小功耗完成自动控制任务。

CPU 是执行程序指令的核心,而 MCU 是围绕 CPU 构建的集成控制系统。MCU 内部包含 CPU,因此两者并不是互相替代的关系,而是不同层次的概念。

与高性能桌面处理器相比,MCU 通常不追求最高计算吞吐量,而更加重视硬件集成、控制功能、低功耗、成本、可靠性和响应时序。

从简单的 LED 控制,到复杂的工业自动化、汽车电子和物联网设备,MCU 都在发挥重要作用。

理解 MCU,也就意味着开始理解嵌入式计算机与普通个人计算机之间的区别。

计算机并不一定需要显示器、键盘、大容量内存和完整的桌面操作系统。

只要具有能够执行指令的处理器、必要的存储资源以及与外部环境交互的接口,一颗小小的 MCU 就可以成为一个完整控制系统的核心。

CPU 负责执行指令,MCU 则把 CPU、存储器和控制外设集成起来,形成面向实际电子设备的小型计算系统。 这就是 MCU 与 CPU 之间最重要的区别。

Posted in 芯片基础知识