使用STM32的MPU(Memory Protection Unit)实现代码隔离和访问控制
[复制链接]
问题/目标与方案
目标:只允许“高级函数”访问OTP中的数据,其它应用程序不能直接读取OTP内容
例程@ F413-Nucleo,F401-Nucleo
• 目标环境
• 分析(以F413为例)
-
F413带有528字节的OTP,可以满足数据一次性写入之后无法被修改的需求
-
为了实现只允许部分代码访问OTP的要求,需要将代码分区,并设置不同的访问权限
-
F413带有MPU(Memory Protection Unit)功能,通过合理配置MPU和不同代码的运行级别,可以实现访问控制
-
首先可以将代码区分为运行于特权级别的代码(关键函数),和运行于用户级别的代码(普通应用)
设置不同的MPU region及其访问权限,使得OTP所在的region只能被运行在特权级别的代码读取
使用MPU实现访问控制的思路
构建示例程序——通过MPU实现访问控制
实际访问OTP区域的代码和操作
API函数,供用户级应用程序调用
• 触发SVC中断进入特权级别
• 调用关键代码实际操作函数
• 退回用户级别,返回应用程序
处理SVC call中断,判断PC range
转入特权级别执行应用程序
示例程序说明
NUCLEO-F413ZH_MPU_PRIV_Protection.7z
NUCLEO-F401RE_MPU_PRIV_Protection.zip
NUCLEO-F401RE_MPU_PRIV_Protection.zip (继续)
|