你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32 的MPU实现代码隔离和访问控制

[复制链接]
STMCU 发布时间:2020-7-17 15:51
目标:只允许“高级函数”访问OTP中的数据,其它应用程序不能直接读取OTP内容
例程@ F413-Nuclo,F401-Nucleo

内容
1 问题/目标与方案分析
2 使用MPU实现访问控制的思路
3 构建示例程序——通过MPU实现访问控制

问题/目标与方案分析
需要解决的问题和达到的目标
• 用户需要将一部分数据写入NVM,一次性希望写入后该部分数据不能再被修改
• 该端数据只能被部分关键代码访问,其他的应用数据无法直接读取该段数据的内容
• 目标环境
• 应用程序使用的MCU为STM32F4
• 分析(以F413为例)
• F413带有528字节的OTP,可以满足数据一次性写入之后无法被修改的需求
• 为了实现只允许部分代码访问OTP的要求,需要将代码分区,并设置不同的访问权限
• F413带有MPU功能,通过合理配置MPU和不同代码的运行级别,可以实现访问控制
• 首先可以将代码区分为运行于特权级别的代码(关键函数),和运行于用户级别的代码(普通应用)
• 设置不同的MPU region及其访问权限,使得OTP所在的region只能被运行在特权级别的代码读取

使用MPU实现访问控制的思路

11.png

构建示例程序——通过MPU实现访问控制
代码结构变化
• Main函数
• 调用MPU配置函数,进入应用程序前降级到用户模式
• MPU配置源文件
• 配置MPU region,使能MPU
• 关键代码源文件
• 实际访问OTP区域的代码和操作
• 关键代码wrapper源文件
• API函数,供用户级应用程序调用
• 触发SVC中断进入特权级别
• 调用关键代码实际操作函数
• 退回用户级别,返回应用程序
• SVC中断Handler
• 处理SVC call中断,判断PCrange
• 转入特权级别执行应用程序

Linker文件配合
• Linker file中定义两个RAM区,用于分别放置特权级和用户级代码使用的堆栈
• Linker file中定义放置关键代码wrapper目标文件block,及其对应在Flash中的地址
• SVC中断处理函数将使用该地址做PC范围检查

MPU region考虑
• OTP区域,特权级只读访问
• 用户级代码使用的SRAM区,完全读写访问,不可执行
• 一般外设,完全读写访问,不可执行
• DMA(假设应用不使用)完全不可访问(避免应用通过DMA访问OTP区域)
• Flash代码区,只读访问,可执行
• 其他:缺省模式,只允许特权模式访问

22.png
33.png
44.png
55.png
66.png
77.png
88.png
99.png
10.png
111.png
示例程序说明
• NUCLEO-F413ZH_MPU_PRIV_Protection.7z
• 包含基于NUCLEO-F413ZH的示例程序,实现通过MPU进行访问控制
• 其中的MPU region定义、文件结构如前文描述
• 支持IAR工程项目
• NUCLEO-F401RE_MPU_PRIV_Protection.zip
• 包含基于NUCLEO-F401RE的示例程序,实现通过MPU进行访问控制
• 其中的MPU region定义根据F401RE芯片的地址空间映射做了部分调整,大致思路一致
• 支持IAR和KEIL工程项目

示例程序说明
222.png



收藏 1 评论0 发布时间:2020-7-17 15:51

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版