4、STM32MP1系列概述:STM32MP157芯片介绍,Cortex-A7与Cortex-M4双核架构,外设资源概览

好,咱们今天来聊聊STM32MP157这颗芯片。说实话,我第一次拿到MP1系列的样片时,心里还挺激动的——ST终于把Linux和单片机揉到一颗芯片里了。这玩意儿,说白了就是一颗“双面人”芯片。

4.1 STM32MP157芯片长什么样?

STM32MP157,名字挺长,但拆开看就明白了:

  • STM32:老熟人,ST的32位MCU家族
  • MP:Microprocessor,微处理器,不是单片机了
  • 1:单核或双核Cortex-A7
  • 57:具体型号,带GPU和高级图形功能

嗯,这里要注意:MP157是带3D GPU的版本。如果你不需要图形加速,可以选MP153。我在项目中就吃过这个亏——选型时没仔细看,结果多花了钱买了用不上的GPU。

核心参数速览:

  • 双核Cortex-A7 @ 650MHz + 单核Cortex-M4 @ 209MHz
  • L1缓存:32KB指令 + 32KB数据(每核)
  • L2缓存:256KB(共享)
  • 内置DDR控制器,支持DDR3/LPDDR2
  • 3D GPU:Vivante GCNanoLite
  • 封装:TFBGA 257/361/448

4.2 双核架构:Cortex-A7与Cortex-M4的“分工合作”

为什么要把两个完全不同的核放在一起?你想想看,一个嵌入式系统里,有些任务需要跑Linux,比如网络协议栈、文件系统、用户界面;但有些任务要求实时性,比如电机控制、传感器采集。以前我们得用两颗芯片,中间还得走SPI或UART通信,麻烦得很。

MP1系列的做法是:A7跑Linux,M4跑裸机或RTOS。两个核共享内存和外设,通过硬件邮箱机制通信。

我的经验:我在一个工业HMI项目里,用A7跑Qt界面,M4负责读取编码器数据。一开始我担心两个核会抢资源,后来发现ST的RPMSG(远程处理器消息协议)做得挺稳。不过要注意——M4的代码要放在专用的内存区域,别让Linux给覆盖了。

4.2.1 Cortex-A7:跑Linux的“大脑”

  • 支持ARMv7-A架构,带NEON SIMD指令集
  • 每个核有自己的MMU,跑Linux没问题
  • 我建议把A7的主频设在500-600MHz,太低了Linux会卡

4.2.2 Cortex-M4:干实时活的“手脚”

  • 支持ARMv7E-M架构,带FPU和DSP指令
  • 没有MMU,跑裸机或FreeRTOS
  • 中断延迟极低,适合硬实时任务

为什么会这样设计?说白了,A7擅长“统筹全局”,M4擅长“快速响应”。两个核各司其职,比单核硬扛要优雅得多。

4.3 外设资源概览:该有的都有

MP157的外设,可以说是“MCU的底子,MPU的架子”。我列个表,大家看得更清楚:

外设类别 具体资源 数量 备注
通信接口 UART / USART 8路 支持DMA,最高12.5Mbps
SPI / I2S 6路 支持全双工
I2C 5路 支持SMBus
USB 2.0 OTG 2路 1路HS,1路FS
Ethernet 1路 支持GMII/RMII
存储接口 SDMMC 3路 支持eMMC、SD卡
FMC 1路 可接NAND、SRAM
QSPI 1路 支持XIP执行
模拟外设 ADC 2个 12位,最多16通道
DAC 2个 12位
定时器 高级定时器 2个 带死区插入,适合电机控制
通用定时器 10个 16/32位
图形 LTDC 1个 支持RGB接口,最高1080p
DSI 1个 MIPI DSI,4通道

避坑指南:我曾经在调试Ethernet时,发现RMII接口的时钟总是对不上。后来查手册才发现——MP157的ETH时钟必须从外部晶振引入,不能直接用内部PLL。嗯,这个坑我替你们踩过了。

4.4 双核通信机制:RPMSG与硬件邮箱

两个核怎么通信?ST的方案是:

  1. 硬件邮箱:两个核各有一个中断控制器,写特定寄存器就能触发对方中断
  2. 共享内存:在DDR里划出一块区域,两个核都能访问
  3. RPMSG协议:基于共享内存的虚拟串口,Linux端有现成驱动

我建议初学者先用RPMSG,它封装好了底层细节,你只需要像读写文件一样收发数据。等熟悉了再去看底层邮箱寄存器。

// M4端发送数据的伪代码
void send_to_a7(char *msg, int len) {
    // 1. 等待邮箱空闲
    while (MAILBOX_IS_BUSY);
    // 2. 把数据写入共享内存
    memcpy(SHARED_MEM_ADDR, msg, len);
    // 3. 触发A7中断
    MAILBOX_TRIGGER = 1;
}

4.5 知识体系总览

下面这张图,是我自己画的知识结构。你看一眼,心里就有数了:

STM32MP157 知识体系 STM32MP157 Cortex-A7 (双核) 跑Linux,负责应用、网络、UI Cortex-M4 (单核) 跑裸机/RTOS,负责实时控制 RPMSG + 硬件邮箱 通信接口 (UART/SPI/I2C/USB/ETH) 存储接口 (SDMMC/FMC/QSPI) 图形接口 (LTDC/DSI/GPU) 注:所有外设均可由A7或M4独占/共享访问

这张图把MP157的核心脉络理清了。你从上往下看:芯片本体 → 双核分工 → 通信桥梁 → 外设资源。后面我们讲设备树时,就是按照这个结构,一层层把硬件描述写清楚。

个人建议:刚开始接触MP1系列时,别急着看所有外设。先盯住UART、GPIO、SDMMC这三个,把Linux跑起来、能读写文件、能打印日志。其他的外设,用到哪个再学哪个。我当年就是一口气看了三天手册,结果啥也没记住。

好了,MP157的概览就到这里。记住一句话:A7是大脑,M4是手脚,设备树就是骨架。下一节我们开始真正动手——搭建开发环境,写第一个设备树文件。

可可精品资料库