作为专栏的开篇,我们必须先解决“谁是老大”的问题。

在传统的
SoC
MCU(M核)。
但在本实战中,我们要反其道而行之:让
Cortex-M33
先启动,完成关键外设初始化,再由它引导
Linux。
本章重点:
STM32MP257F-DK
启动链路剖析。
硬件
Boot
配置实战。
RIF
(资源隔离框架)
的初步概念。
/>1.1
系列最大的不同在于它引入了更高级的安全架构。
传统模式:ROM
TF-A
固件。
本实战模式(M33
Pilot):ROM
直接加载并运行
核心。
这种模式的优势在于:实时外设(如控制
LED
I2C)在系统上电后的几百毫秒内就能进入工作状态,无需等待
Linux
进入我们预想的启动模式,首先要处理板子上的SW1拨码开关。
MP257
支持多种启动源(SD卡、eMMC、USB、UART
状态对照表
(STM32MP257F-DK)
为了进行实战开发,我们通常使用SD
Card
启动模式。
| 模式 | SW1.1 (BOOT0) | SW1.2 (BOOT1) | SW1.3 (BOOT2) | 描述 |
| OFF-OFF-OFF | 0 | 0 | 0 | Recovery (USB/UART) |
| ON-OFF-ON | 1 | 0 | 1 | SDCard(推荐实战用) |
| OFF-ON-ON | 0 | 1 | 1 | eMMC (生产用) |
注意:由于
MP257
OTP(一次性可编程存储器)已经被锁定为特定模式,拨码开关可能会失效。
对于全新的
板,请确保拨至ON-OFF-ON。
/>1.3
启动之前,你必须理解RIF。
这是
MP257
就像是一个“物权法控制器”,它规定了:
哪个核(CID)拥有某个外设(UART/I2C)的访问权。
是否有安全权限(Secure/Non-Secure)。
实战逻辑:
我们在
M33
配置,宣布:“UART7(调试串口)和
I2C2(IMU
环境搭建:工具链与第一个工程
由于本章要求
M33
环境,使用最纯净的交叉编译工具链。
1.安装交叉编译器
官网下载STM32CubeMP2软件包。
这是我们要操作
MP257
的汇编启动与跳转
为了让系统跑起来,我们需要准备一个最小化的启动镜像,包含两个文件:startup_stm32mp257xx.s(汇编启动)和main.c。
关键代码片段:M33
复位向量
(Reset_Handler)
/*
*/
*/
.section
/>.type
*/
关键代码片段:main.c
main(void)
/>RIF_Config_UART7_For_M33();
/>
/>SystemClock_Config();
//
串口初始化
/>UART7_Init();
while
(1)
部署与验证
编译:使用
arm-none-eabi-gcc将代码编译为.bin文件。打包:MP257
ROM
Header。
我们将使用
STM32CubeProgrammer提供的signing工具。烧录:通过
USB
分区,或通过串口下载。
观察:连接
Type-C
调试口,打开串口终端。
如果你看到
M33Running
Master...,恭喜你,你已经成功重构了
MP257
Tips)
Q:
为什么串口没输出?
A:
UART7,连接到
M33。
Q:
为什么
核心没有动静?
A:
M33
章,我们将学习如何手动释放它。


