YTM32的flash应用答疑-详解写保护功能

news2024/11/26 8:47:37

YTM32的flash应用答疑-详解写保护功能

文章目录

  • YTM32的flash应用答疑-详解写保护功能
    • Introduction
    • Principle
    • Operation & Demonstration
      • Demo #1 验证基本的写保护功能
      • Demo #2 编程CUS_NVR设定EFM_ADDR_PROT初值
      • Demo #3 启用写保护后试试块擦除操作
    • Conclusion

Introduction

客户提出了一种应用场景:在使用某些授权软件(算法)的场景中,软件(算法)供应商向MCU的一些预留的存储区中写入专用的授权凭证,该凭证一机一码,各不相同,从而确保软件(算法)不会被非法复制。但对于MCU的应用开发者来说,经常需要刷写片内存储空间,更新程序或者数据,此时希望小心保存位于MCU内部存储器上的凭证,在开发和后期正常使用的过程中,不要被意外擦除,否则重新授权需要又需要额外的费用、时间和流程等。

绝大多数MCU的片内flash存储器管理模块都提供了写保护功能,当对已经设置保护功能的存储区进行擦写操作时,擦写的实际效果将失效,被保护存储区中的数据得以幸免留存,已达到防止误擦除的效果。

Principle

YTM32B1MD14微控制器为例,其中片内flash控制器模块EFM,对应有EFM_ADDR_PROT[0]EFM_ADDR_PROT[1]寄存器,其中每个比特可以保护8KB的存储区,按序分布,覆盖全部的片内flash的地址区域。

EFM_ADDR_PROT寄存器位的值为0时,写保护发生作用,对应位的值为1时,写保护不起作用,可以正常擦写。

有两种方式可以配置EFM_ADDR_PROT寄存器的值:

  • CUS_NVR0x100x18地址写数,这里的配置值将作为EFM_ADDR_PROT寄存器的初值,在硬件复位后自动生效(由boot rom复制到EFM_ADDR_PROT寄存器中)。但写入每个寄存器初值时要注意,高32位数必须为0x5A5A5A5A ,然后才是32位的有效配置值。
  • EFM_ADDR_PROT寄存器直接写数,写数之后在程序运行过程中生效,但复位后受CUS_NVR中的初值影响,在软件生效之前,需要保护的区域可能有被篡改的风险。
    • 在软件中,从1写0是可以的,但从0写1是无效的。在程序运行中,只能上锁不能解锁。如果想重新操作,只能复位重来。

需要特别注意的是,CUS_NVR也是位于flash存储器上,具体是在pflash1的尾端。如图x所示。

在这里插入图片描述
在这里插入图片描述

图x CUS_NVR的物理存储位置

这里的EFM_ADDR_PROT保护的是地址空间,而不是物理存储。对于YTM32B1MD14这种用两个pflash物理存储器集成在一起具有硬件AB面分区的内部存储设备,若交换了物理存储区,切换了地址空间和实际物理存储器的映射关系,则原有的配置下实际执行保护的区域也会发生变化。实际上,CUS_NVRBOOT SWAP操作的初始化参数共用的一个 Sector,因此在执行 BOOT_SWAP命令(交换pflash0pflash1的地址映射区域) 后,关闭调试接口和地址保护的配置会丢失,需要重新配置。同理,擦除CUS_NVRSWAP BOOT信息也会丢失,如需要重映射后的地址空间,需要重新执行BOOT SWAP操作。

另外,如果在flash块上对任意一块存储区启用了写保护,则整块flash存储器的块擦除操作都不能生效。但如果通过在CUS_NVR中解除写保护配置后复位,就可以恢复对整块flash的擦除操作。

Operation & Demonstration

设计用例,演示flash写保护的起作用的情况。

Demo #1 验证基本的写保护功能

  • 默认上电复位后,MCU未对任何地址启用写保护功能。
  • 先向0x3E000 - 0x40000(pflash0的最后一个8KB存储块)擦除后再写一组数据。通过调试器观察flash存储区的数据已经生效。

在这里插入图片描述

  • 然后执行EFM_ADDR_PROT |= (1u << 31u),配置写保护。
  • 再试着擦除0x3E000 - 0x40000内存区间的数据。执行擦除操作之后,通过调试器观察flash存储区的数据是否仍留存。

在这里插入图片描述

通过实验可以观察到,当配置写保护后,再次试图擦除指定内存区域的存储空间后,原来写入的数据仍然保留,未受擦除操作影响。

Demo #2 编程CUS_NVR设定EFM_ADDR_PROT初值

在之前的用例中,可以看到在默认情况下,EFM_ADDR_PROT[0]EFM_ADDR_PROT[1]寄存器的值都是0xFFFFFFFF。如图x所示。

在这里插入图片描述

图x EFM_ADDR_PROT寄存器的默认值

通过向CUS_NVR0x100x18地址写数,更改写保护的初值。但此时,因为尚未复位,芯片硬件也没有执行从CUS_NVREFM_ADDR_PROT导入配置的操作,因此,仍然可以擦写 flash。如图x所示。

在这里插入图片描述

图x 在CUS_NVR启用写保护后未复位

在调试环境中复位芯片,重新执行演示用例程序,从log和寄存器观察窗口中可以观察到,CUS_NVR中配置的初值已经载入到了EFM_ADDR_PROT寄存器。在执行后续的擦写操作时,可以看到实际的flash存储的值没有因为擦写操作而变化,说明写保护作用已经生效。如图x所示。

在这里插入图片描述

图x 在CUS_NVR启用写保护后复位生效

注意:在MD和ME的芯片里,NVR里的数据对于用户不是直接可见的,需要通过专门的读操作才能拿到其中存放的数据。

再继续试一下解除写保护的情况。重新复位芯片,在log交换中解除写保护。发现此时不需要复位,EFM_ADDR_PROT的寄存器的值就已经同步过来了, 对应当下就可以恢复对flash的擦写操作。如图x所示。

在这里插入图片描述

图x 在CUS_NVR解除写保护后立即生效

Demo #3 启用写保护后试试块擦除操作

在测试用例中:

  • 先在未启用写保护的情况下,在flash中写好预设的数据,复位。
  • CUS_NVR中启用写保护,复位,让写保护生效。
  • 再试着执行块擦除操作。

在这里插入图片描述

图x 试图擦除启用写保护的flash块

从图x中可以看到,启用写保护之后,执行flash块擦除操作后,预先存入flash中的数据未受影响。

Conclusion

本文专门讲解和验证了YTM32的flash写保护的功能。

  • EFM_ADDR_PROT寄存器中的每个bit可以控制启用对应一块区域(8KB for MD),但只能开启写保护不能解除。如需解除必须复位,重新导入CUS_NVR的值。
  • 在运行软件时,可以直接写EFM_ADDR_PROT寄存器启用写保护。但只能1变0(启用写保护),不能0变1(解除写保护)。
  • EFM_ADDR_PORT寄存器的初值是从CUS_NVR导入的,因此可以通过擦写CUS_NVR设定片内flash存储的上电复位默认状态。
  • CUS_NVR中启用写保护需要复位后才能生效,但解除写保护是可以不等复位立即生效的。
  • 如果在flash块上对任意一块存储区启用了写保护,则整块flash存储器的块擦除操作都不能生效。

本文中使用了两个测试工程如下,或者私信作者获取。

  • https://gitee.com/suyong_yq/arm-mcu-sdk-release/blob/master/ytm32-evk/evb-ytm32b1md-q100_efm_flash_write_protect_mdk.zip
  • https://gitee.com/suyong_yq/arm-mcu-sdk-release/blob/master/ytm32-evk/evb-ytm32b1md-q100_efm_flash_write_protect_cus_nvr_mdk.zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1689010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS之ArkUI布局设计常见细节

这里写目录标题 1. Button设置带有渐变色的背景图片无效1.1 问题分析1.2 成功案例 2. 路由跳转失败2.1 问题分析 1. Button设置带有渐变色的背景图片无效 1.1 问题分析 说明&#xff1a;设置颜色渐变需先设置backgroundColor为透明色。 Button($r(app.string.login), { type…

python实现对应分析的随笔记

文档来源&#xff1a; Correspondence analysis 1 对应分析 参考&#xff1a; SPSS&#xff08;十二&#xff09;SPSS对应分析&#xff08;图文数据集&#xff09;案例6&#xff1a;SPSS–对应分析10 对应分析 对应分析的实质&#xff08;理论很复杂&#xff0c;但是结果很明…

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面&#xff0c;弱口令admin/123456 3.进入后台&#xff0c;文件上传点 4.上传一句话木马图片 5.复制图片&#xf…

爬虫基础1

一、爬虫的基本概念 1.什么是爬虫&#xff1f; 请求网站并提取数据的自动化程序 2.爬虫的分类 2.1 通用爬虫&#xff08;大而全&#xff09; 功能强大&#xff0c;采集面广&#xff0c;通常用于搜索引擎&#xff1a;百度&#xff0c;360&#xff0c;谷歌 2.2 聚焦爬虫&#x…

人工智能应用-实验4-蚁群算法求解 TSP

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

【GO基础】1. Go语言环境搭建

Go语言环境搭建 Go的三种安装方式Go标准包安装Windows 安装验证是否安装成功 4.Go的第一个程序 Hello World.go Go的三种安装方式 Go有多种安装方式&#xff0c;可以选择自己适合的。这里介绍三种最常见的安装方式&#xff1a; Go源码安装&#xff1a;这是一种标准的软件安装…

【NumPy】NumPy实战入门:统计与聚合(histogram、percentile、corrcoef、cov)详解

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

如何解决vcruntime140.dll丢失问题,详细介绍5种靠谱的解决方法

vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;它为使用Visual C编译器开发的应用程序提供必要的运行时环境。该DLL文件包含了大量应用程序运行时需要调用的库函数&#xff0c;这些函数是实现C标准库、异常处理机制、RTTI&#xff08;运行…

IO端口编址

统一编址 特点 独立编址 特点 内存地址分配 区别 应用 IO端口地址译码 硬件上的实现 示例1&#xff1a; 示例2&#xff1a; IO指令 软件上的实现 示例

golang通过go-aci适配神通数据库

1. go-aci简介 go-aci是神通数据库基于ACI(兼容Oracle的OCI)开发的go语言开发接口&#xff0c;因此运行时需要依赖ACI驱动和ACI库的头文件。支持各种数据类型的读写、支持参数绑定、支持游标范围等操作。 2. Linux部署步骤 2.1. Go安装&#xff1a; 版本&#xff1a;1.9以上…

CleanMyMac X2024垃圾清理神器,让你的Mac保持飞速运行

在数字时代的浪潮中&#xff0c;我们的苹果电脑扮演了至关重要的角色。然而&#xff0c;随着数据的增长和存储需求的不断上升&#xff0c;不合理的文件管理往往会导致系统性能逐渐下降&#xff0c;影响我们的工作效率。为了有效应对这一挑战&#xff0c;许多用户转向使用专为Ma…

抖音运营_抖音电商介绍

截止20年8月&#xff0c;抖音的日活跃数高达6亿。 20年6月&#xff0c;上线抖店 &#xff08;抖音官方电商&#xff09; 一 抖店的定位和特色 1 一站式经营 帮助商家进行 商品交易、店铺管理、客户服务 等全链路的生意经营 2 多渠道拓展 抖音、今日头条、西瓜、抖音火山版…

MyBatisPlus使用流程

引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency> 版本号根据需要选取 在实体类上加注解声明&#xff0c;表信息 根据数…

7、按钮无法点击

不能点击&#xff0c;打开f12&#xff0c;删除disabled

AIGC绘画设计基础-建筑设计应用

一、AI及AIGC 对于AI大家都不陌生&#xff0c;但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身&#xff0c;而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;&…

Pod进阶——资源限制以及探针检查

目录 一、资源限制 1、资源限制定义&#xff1a; 2、资源限制request和limit资源约束 3、Pod和容器的资源请求和限制 4、官方文档示例 5、CPU资源单位 6、内存资源单位 7、资源限制实例 ①编写yaml资源配置清单 ②释放内存&#xff08;node节点&#xff0c;以node01为…

阴影映射(线段树)

实时阴影是电子游戏中最为重要的画面效果之一。在计算机图形学中&#xff0c;通常使用阴影映射方法来实现实时阴影。 游戏开发部正在开发一款 2D 游戏&#xff0c;同时希望能够在 2D 游戏中模仿 3D 游戏的光影效果&#xff0c;请帮帮游戏开发部&#xff01; 给定 x-y 平面上的…

深度学习模型keras第二十一讲:使用BaseImageAugmentationLayer进行自定义图像增强

1、自定义图像增强技术概述 1.1自定义图像增强概念 深度学习的自定义图像增强技术是一种通过自定义的算法和策略对图像进行变换&#xff0c;以增加模型泛化能力和提高训练效果的技术。这些增强技术可以应用于各种深度学习任务&#xff0c;如图像分类、目标检测、图像分割等。…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

张大哥笔记:改变自己,才是改变一切的开始

人往往有一种惰性&#xff0c;总喜欢把希望寄托于别人&#xff01;比如会将注意力投向外部因素如环境、他人或命运从而期望为我们的生活带来突破和转机。但现实往往是残酷的&#xff0c;不会发生任何改变的&#xff01;真正的改变来自于自己&#xff0c;自我革新才是改变整个局…