在上一章中,我们搭建好了环境并成功生成了镜像。

但如果你现在直接尝试操作硬件,系统很可能会立即进入HardFault。
为什么?因为
STM32MP257
的世界里,硬件资源(GPIO、UART、DMA、DDR)不再是“公共厕所”,而是被严格划分为不同的“领地”。
如果
M33
RIF?(三个核心要素)
RIF
的设计初衷是为了防止多核环境下资源的非法访问。
它由三个子模块组成:
RISCF
(Resource
Framework):负责外设(如
I2C、UART)的访问过滤。
RIMC
(Resource
Controller):管理总线主设备(如
DMA、CPU)的身份属性。
RISAF
(Resource
Filtering):负责内存(DRAM/SRAM)的区域切分。
实战规则:每个外设都有一个CID
(Context
核通常对应CID1,A35
核对应CID2。
/>3.2
的配置寄存器。
寄存器:
RIF_RISCF_PERx_PRIVCFGR(特权配置)寄存器:
RIF_RISCF_PERx_CIDCFGR(CID分配配置)
实战逻辑:
我们将
(M33),并设置为**非安全(Non-secure)但特权(Privileged)**模式。
/>3.3
初始化函数
在main.c运行之前,我们需要执行一段“圈地”代码。
#include
"stm32mp2xx_hal.h"
/**
/>*
/>__HAL_RCC_RIF_CLK_ENABLE();
/*
---
设置为特权模式,允许非安全访问(方便后续
Linux
RIF_RISCF_PRIVCFGR_PRIV;
/*
---
RIF_RISCF_PRIVCFGR_PRIV;
/*
---
数据,你还需要配置RIMC,告诉系统:这个
DMA
发起的总线访问会被拦截,导致总线错误中断。
void
{
/>RIF_RIMC_GPDMA1_CH0->CIDCFGR
=
给“回收”了。
实战操作:在
M33
初始化中,通过RISAF将
SRAM1的一部分标记为CID1独占。
这样即使
Linux
/或者内核驱动跑飞,它也绝对无法修改
M33
配置
故意不配置
RIF:尝试直接写
UART7->TDR=
'A',你会发现程序死在了
BusFault_Handler。正确配置后:程序正常向下运行。
Debug
STM32CubeIDE
的
SFR视图,找到RIF节点,实时检查CIDCFGR寄存器的值是否为0x00000003(CID1+
Tips)
致命陷阱:RIF
ROM
是改不动的。
解决方案:确保你修改的是
fsbl阶段的代码,或者在启动的最早期(SystemInit)就接管RIF。
引脚复用:RIF
RIF
AF(复用模式)都改不了。
/>
总结:本章我们完成了最枯燥但最重要的“主权声明”。
现在
M33
- 上一篇: 河南省交通基本建设质量检测监督站网站应学习哪些内容?
- 下一篇: 企业如何有效推广潮州网站建设?


