嵌入式ARM芯片处理器性能深入对比选型分析

426 阅读15分钟

0. Contex-M for Beginners

075b806c8168da9785b9a609f76daa5.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png

1. STM32F103 芯片处理器

  • STM32F103RCT6 作为 MCU,它拥有的资源包括:
  • 48KB SRAM、256KB FLASH、
  • 2 个基本定时器、4 个通用定时器、2 个高级定时器、
  • 2个 DMA 控制器(共 12 个通道)、
  • 3 个 SPI、
  • 2 个 IIC、
  • 5 个串口、
  • 1 个 USB、
  • 1 个 CAN、
  • 3 个 12位 ADC、
  • 1 个 12 位 DAC、
  • 1 个 SDIO 接口
  • 及 51 个通用 IO 口。该芯片性价比极高

2. STM32F103 芯片处理器

  • STM32F103ZET6作为 MCU,它拥有的资源包括:
  • 该芯片具有 64KB SRAM、512KBFLASH、
  • 2 个基本定时器、4 个通用定时器、2 个高级定时器、
  • 2 个 DMA 控制器(共 12 个通道)、
  • 3 个 SPI、
  • 2 个 IIC、
  • 5 个串口、
  • 1 个 USB、
  • 1 个 CAN、
  • 3 个 12 位 ADC、
  • 1 个 12 位 DAC、
  • 1 个SDIO 接口、
  • 1 个 FSMC 接口
  • 以及 112 个通用 IO 口

3. STM32F407 芯片处理器

  • STM32F407ZGT6 作为 MCU,该芯片是STM32F407 里面配置非常强大,它拥有的资源包括:集成 FPU 和 DSP 指令,
  • 并具有 192KB SRAM、1024KB FLASH、
  • 12 个 16 位定时器、
  • 2 个 32 位定时器、
  • 2 个 DMA 控制器(共 16 个通道)、
  • 3 个 SPI、
  • 2 个全双工 I2S、
  • 3 个 IIC、
  • 6 个串口、
  • 2 个 USB(支持 HOST /SLAVE)、
  • 2 个CAN、
  • 3 个 12 位 ADC、
  • 2 个 12 位 DAC、
  • 1 个 RTC(带日历功能)、
  • 1 个 SDIO 接口、
  • 1 个 FSMC接口、
  • 1 个 10/100M 以太网 MAC 控制器、
  • 1 个摄像头接口、
  • 1 个硬件随机数生成器、
  • 以及 112个通用 IO 口等。
  • 该芯片的配置十分强悍,很多功能相对 STM32F1 来说进行了重大改进,比如FSMC 的速度,F4 刷屏速度可达 3300W 像素/秒,而 F1 的速度则只有 500W 左右

4. STM32 F429 芯片处理器

  • STM32F429IGT6 作为 MCU,该芯片集成 FPU 和 DSP 指令,
  • 并具有 256KB SRAM、1024KB FLASH、
  • 12 个 16 位定时器、2 个 32 位定时器、
  • 2 个 DMA 控制器(共 16 个通道)、
  • 6 个 SPI、
  • 2 个全双工 I2S、
  • 1 个 SAI、3 个 IIC、
  • 8 个串口、
  • 2 个 USB(支持HOST /SLAVE)、
  • 2 个 CAN、
  • 3 个 12 位 ADC、
  • 2 个 12 位 DAC、
  • 1 个 RTC(带日历功能)、
  • 1 个SDIO 接口、
  • 1 个 FMC 接口
  • 1 个 TFTLCD 控制器(LTDC)、
  • 1 个 10/100M 以太网 MAC 控制器、
  • 1 个摄像头接口、1 个硬件随机数生成器、
  • 以及 140 个通用 IO 口等。
  • CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32F429 并没有使用 CM4 内核的全部东西,而是只用了它的一部分STM32F429xx/STM32F439xx 则总共有 101 个中断,STM32F429xx 的 96 个中断里面,包括 10个内核中断和 91 个可屏蔽中断,具有 16 级可编程的中断优先级,而我们常用的就是这 91 个可屏蔽中断。

4.1 详细功能描述

  • STM32F429 使用 FMC外设来管理扩展的存储器,FMC 是 Flexible Memory Controller 的缩写,译为可变存储控制器。它可以用于驱动包括 SRAM、SDRAM、NOR FLASH 以及 NANDFLSAH 类型的存储器。在其它系列的 STM32 控制器中,只有 FSMC 控制器 (Flexible Static MemoryController),译为可变静态存储控制器,所以它们不能驱动 SDRAM 这样的动态存储器,因为驱动 SDRAM 时需要定时刷新,STM32F429 的 FMC 外设才支持该功能,且只支持普通的 SDRAM,不支持 DDR类型的 SDRAM。 image.png image.png

5. STM32 H7 芯片处理器

  • STM32H743IIT6 作为 MCU,该芯片采用六级流水线,自带指令和数据 Cache、集成 JPEG 编解码器、集成双精度硬件浮点计算单元(DPFPU)和 DSP 指令,芯片主频高达 400Mhz
  • 并具有 1060KB SRAM、2048KB FLASH、
  • 18 个 16 位定时器、2个 32 位定时器、
  • 4 个 DMA 控制器、
  • 6 个 SPI、
  • 1 个 QSPI 接口、
  • 3 个全双工 I2S、
  • 4 个 SAI、
  • 4个 IIC、
  • 9 个串口、
  • 2 个 USB(支持 HOST /SLAVE)、
  • 2 个 CAN、
  • 3 个 16 位 ADC、
  • 2 个 12 位DAC、
  • 1 个 SPDIF RX 接口、
  • 1 个 RTC(带日历功能)、
  • 2 个 SDMMC 接口、
  • 1 个 FMC 接口、
  • 1个 TFTLCD 控制器(LTDC)、
  • 1 个 10/100M 以太网 MAC 控制器、
  • 1 个摄像头接口、
  • 1 个硬件随机数生成器、
  • 以及 140 个通用 IO 口等

5.1 详细功能描述

  • STM32H743的EXTI控制器支持78个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的屏蔽设置,GPIO的引脚 GPIOx.0-GPIOx.15(x=A,B,C,D,E,F,G,H,I,J,K)分别对应中断线 0~15。这样每个中断线对应了最多 11 个 IO 口,以线 0 为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0、GPIOH.0、GPIOI.0、GPIOJ.0、GPIOK.0
  • STM32H743 内部包含 10 个通用定时器(TIM2-TIM5,TIM12-TIM17),每个定时器都可以用来产生 PWM 或者用作输入捕获,不过 TIM2-TIM5 有 4 个通道,TIM12~TIM17 只有 2 个通道。
  • STM32H743 的定时器除了 TIM6和7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达4路的 PWM 输出。
  • 16 位/32 位(仅 TIM2 和 TIM5)向上、向下、向上/向下自动装载计数器(TIMx_CNT),注意:TIM12~TIM17 只支持向上(递增)计数方式
  • CM7 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32H743 并没有使用 CM7 内核的全部东西,而是只用了它的一部分。STM32H743xx 总共有 118 个中断,以下仅以 STM32H743xx 为例讲解。STM32H743xx 的 160 个中断里面,包括 10 个内核中断和 150 个可屏蔽中断,具有 16 级可编程的中断优先级,而我们常用的就是这 150 个可屏蔽中断。
  • HAL 库为串口的使用开放了 MSP 函数(MCU Specific Package 单片机的具体方案)。在串口初始化函数HAL_UART_Init内部,会调用串口MSP函数HAL_UART_MspInit来设置与MCU相关的配置。函数 HAL_UART_Init 主要用来初始化与串口相关的参数(这些参数与 MCU无关),包括波特率,停止位等。而串口 MSP 函数 HAL_UART_MspInit 用来设置 GPIO 初始化,NVIC 配置等于 MCU 相关的配置。
  • STM32H743 内部有 4 个 DMA 控制器,1 个高速主 DMA(MDMA),MDMA 用于实现:内存→内存、内存→外设、外设→内存之间的高速数据传输,MDMA 支持 AXI 和 AHBS 总线之间的数据传输。注意:仅 MDMA 支持 AHBS 的访问(可访问 DTCM 和 ITCM),其他 DMA 都无法访问 AHBS 总线。2 个双口 DMA。双口 DMA 同样可以实现:内存→内存、内存→外设、外设→内存之间的高速数据传输,双口 DMA 支持 AHB 外设之间的数据传输,具有独立的 FIFO,支持不同位宽的数据传输。1 个基本 DMA(BDMA)。BDMA 用于实现:内存→内存、内存→外设、外设→内存、外设到外设之间的高速数据传输。
  • STM32H743 内部的2 个双口 DMA 控制器(DMA1 和 DMA2),共 16 个数据流(每控制器 8 个),每一个双口 DMA 控制器都用于管理一个或多个外设的存储器访问请求。每个数据流可以有多达115 个通道(或称请求)。每个数据流通道都有一个仲裁器,用于处理 DMA 请求间的优先级。
  • DMAMUX1 的 DMA 请求资源分配表: image.png
  • 由于 DMA1/DMA2 数据流 0~7 的 DMA 请求全部是来自 DMAMUX1 的设置(16 个通道),DMAMUX1 的所有通道都可以独立设置,因此,对于 STM32H7 来说,DMA1/DMA2 的任何一个数据流的请求都可以来自 115 个通道的任意一个,因此相对于 STM32 其他系列来说,STM32H7 的 DMA 配置更加灵活,无需固定通道对应固定外设请求,可以随意设置。
  • SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线(SCSN,SCLK,SDI,SDO)。SPI是Queued SPI的简写,是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了队列串行外围接口协议(即QSPI协议)。QSPI 是一种专用的通信接口,连接单、双或四(条数据线) SPI Flash 存储介质。共有SNCS,SCLK,BK0,BK1,BK2,BK3共6根接线,可以实现多种通信模式。

6. NXP IM6ULL 芯片处理器:

  • MCIMX6Y2CVM08AB(800MHz,实际 792MHz)作为主控 CPU,为工业级。自带 32KB 的 L1 指令和数据 Cache、128KB 的 L2Cache,集成 NEON,集成双精度硬件浮点计算单元 VFPv3,
  • 并具有 128KB OCRAM、
  • 2 个通用定时器(GPT)、
  • 4 个周期定时器(EPIT)、
  • 8 个 PWM、
  • 1 个 SDMA 控制器、
  • 4 个 ECSPI、
  • 3 个看门狗、
  • 3 个 SAI、
  • 4 个 IIC、
  • 7 个串口、
  • 2 个 USB(高速,带 PHY)、
  • 2 个 FlexCAN、
  • 2 个 12 位ADC、
  • 1 个 SPDIF 接口、
  • 1 个 SRTC、
  • 1 个 RTC、
  • 2 个 USDHC 接口、
  • 1 个 RGB LCD 控制器(ELCDIF)、
  • 2 个 10/100M 以太网 MAC 控制器、
  • 1 个摄像头接口、
  • 1 个硬件随机数生成器、
  • 以及 124 个通用 IO 口等,
  • 根据芯片型号的不同主频可以为 528Mhz、700MHz(实际 696MHz)、800MHz(实际 792MHz),轻松应对各种应用。

6.1 详细功能描述

  • *ECSPI,全称是Enhanced Configurable Serial Peripheral Interface,别看前面加了个“EC”就以为和标准 SPI 有啥不同的,其实就是 SPI。相比 I2C 接口,SPI 接口的通信速度很快,I2C 最多 400KHz,但是 SPI 可以到达几十 MHz。I.MX6U 也有4 个 SPI 接口,可以通过这 4 个 SPI 接口来连接一些 SPI 外设。ECSPI有64*32个接收FIFO(RXFIFO)和64*32个发送 FIFO(TXFIFO),I.MX6U 的 ECSPI 可以工作在主模式或从模式,I.MX6U 有 4 个ECSPI,每个 ECSPI 支持四个片选信号。
  • GPT,定时器来实现高精度延时,GPT 定时器是一个 32 位向上定时器(也就是从 0X00000000 开始向上递增计数),GPT 定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频。
  • EPIT, 全称是:Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,它主要是完成周期性中断定时的。EPIT 是一个 32 位定时器,在处理器几乎不用介入的情况下提供精准的定时中断,软件使能以后 EPIT 就会开始运行。
  • I.MX6U 提供了 4 个 I2C 外设,通过这四个 I2C 外设即可完成与 I2C 从器件进行通信。
  • I.MX6U 的总共使用了 128 个中断 ID,加上前面属于 PPI 和 SGI 的 32 个 ID,I.MX6U 的中断源共有 128+32=160个。
  • I.MX6U 的外设有很多,不同的外设时钟源不同,NXP 将这些外设的时钟源进行了分组,一共有 7 组,这 7 组时钟源都是从 24MHz 晶振 PLL 而来的,因此也叫做 7 组 PLL
  • I.MX6ULL 的IO分为两类:SNVS 域的和通用的,这两类 IO 本质上都是一样的,I.MX6U 的 GPIO 一共有 5 组:GPIO1、GPIO2、GPIO3、GPIO4 和 GPIO5,其中 GPIO1 有 32 个 IO,GPIO2 有 22 个 IO,GPIO3 有 29 个 IO、GPIO4 有 29 个 IO,GPIO5最少,只有 12 个 IO,这样一共有 124 个 GPIO。 image.png
  • STM32(Cortex-M)的中断控制器叫做 NVIC,I.MX6U(Cortex-A)的中断控制器叫做GIC,GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,目前 GIC 有 4 个版本:V1-V4,V1 是最老的版本,已经被废弃了。V2-V4 目前正在大量的使用。GIC V2 是给 ARMv7-A 架构使用的,比如 Cortex-A7、Cortex-A9、Cortex-A15 等。GIC V2 最多支持 8 个核。V3 和 V4 是给 ARMv8-A/R 架构使用的,也就是 64 位芯片使用的。中断源有很多,为了区分这些不同的中断源肯定要给他们分配一个唯一 ID,这些 ID 就是中断 ID。每一个 CPU 最多支持 1020 个中断 ID,中断 ID 号为 ID0-ID1019。这 1020 个 ID 包含了 PPI、SPI 和 SGI,那么这三类中断是如何分配这 1020 个中断 ID 的呢?这 1020 个 ID 分配如下:ID0-ID15:这 16 个 ID 分配给 SGI,ID16-ID31:这 16 个 ID 分配给 PPI,D32~ID1019:这 988 个 ID 分配给 SPI,像 GPIO 中断、串口中断等这些外部中断 。至于具体到某个 ID 对应哪个中断那就由半导体厂商根据实际情况去定义了。比如 I.MX6U 的总共使用了 128 个中断 ID,加上前面属于 PPI 和 SGI 的 32 个 ID,I.MX6U 的中断源共有 128+32=160个。 image.png

image.png

7. STM32MP1 芯片处理器

image.png

  • STM32MP157 根据封装、引脚、工作温度的不同也分为了多款不同的芯片,TM32MP157DAA1,这是一款 448 脚、LFBGA 封装的芯片。
  • 双核 32 位 Cortex-A7+单核 Cortex-M4,A7 主频为 800MHz,M4 主频为 209MHz。
  • A7 内核包含32KB 的 L1 I/D Cache,256KB 的 L2 Cache,支持 NEON 以及 TrustZone,
  • M4 内核包含 FPU 单元。
  • STM32MP1 支持 16/32bit 的 LPDDR2/LPDDR3-1066、DDR3/DDR3L-1066 内存,最大支持1GB,
  • 另外 STM32MP157 内部包含 708KB 的 SRAM。
  • 内部一个 3D GPU,支持 OpenGL ES2.0,
  • RGB LCD 接口支持 24bit,RGB888 格式,分辨率最高支持 1366*768 60fps image.png image.png image.png
  • 每个 I2C 有两根通讯总线 SDA 和 SCL,这些总线的接口接到不同的 GPIO 上 image.png

8. ZYNQ 主控芯片处理器

image.png

  • XC7Z020 和 XC7Z010 都集成了两个 Cortex-A9 处理器,AMBA®互连,内部存储器,外部存储器接口和外设。这些外设主要包括 USB 总线接口,以太网接口,SD/SDIO 接口,I2C 总线接口,CAN 总线接口,UART 接口,GPIO 等。
  • PS 系统部分的主要参数如下:基于 ARM 双核 CortexA9 的应用处理器,基于 ARM-v7 架构,高达 766Mhz(XC7Z020)/666Mhz(XC7Z010)核心频率
  • 每个 CPU 32KB 1 级指令和数据缓存,2 个 CPU 共享 512KB 2 级缓存
  • 集成片上 Boot ROM 和 256KB 片内 RAM
  • 集成外部存储接口,支持 16/32 bit DDR2、DDR3 接口
  • 支持两个千兆网控制器:支持 GMII,RGMII,SGMII 三种接口
  • 支持两个 USB2.0 OTG 接口,每个最多支持 12 节点
  • 支持两个 CAN2.0B 总线接口
  • 支持两个 SD 卡、SDIO、MMC 兼容控制器
  • 支持 2 个 SPI,2 个 UART,2 个 I2C 接口
  • 4 组 32bit GPIO,54 个(32+22)作为 PS 系统 IO,64 个连接到 PL

8.1 ZYNQ7020 功能描述

  • ZYNQ7020 核心板主控芯片采用 Xilinx 公司的 ZYNQ7000 系列的 XC7Z020,具体型号为XC7Z020CLG400-2。
  • ZYNQ 分为 PS(Processing System)和 PL(Programmable Logic)两部分。
  • PL部分拥有85K个逻辑单元、4.9Mbits的嵌入式存储资源、220个DSP单元、4个时钟管理单元(CMT)、
  • 16 个全局时钟网络、6 个用户 I/O BANK 和最大 253 个用户 I/O,是一款非常具有性价比的芯片。
  • 逻辑单元 Logic Cells:85K;
  • 查找表 LUT:53,200
  • 寄存器(flip-flops):106,400
  • 乘法器 18x25MACCs:220;
  • Block RAM:4.9Mb;
  • 两个 AD 转换器,可以测量片上电压、温度感应和高达 17 个外部差分输入通道,1Mbps 采样率

8.2 FPGA ZYNQ7010 功能描述

  • ZYNQ7010 核心板主控芯片采用 Xilinx 公司的 ZYNQ7000 系列的 XC7Z010,具体型号为XC7Z010CLG400-1。
  • ZYNQ 分为 PS(Processing System)和 PL(Programmable Logic)两部分。
  • PL 部分拥有 28K 个逻辑单元、2.1Mbits 的嵌入式存储资源、80 个 DSP 单元、2 个时钟管理单元(CMT)、
  • 16 个全局时钟网络、5 个用户 I/O BANK 和最大 228 个用户 I/O,是一款非常具有性价比的芯片。
  • 逻辑单元 Logic Cells:28K;
  • 查找表 LUT:17,600
  • 存器(flip-flops):35,200
  • 乘法器 18x25MACCs:80;
  • Block RAM:2.1Mb;
  • 两个 AD 转换器,可以测量片上电压、温度感应和高达 17 个外部差分输入通道,1Mbps 采样