flash写保护原理_老司机带路:LPC82x 存储器及读写保护 手到擒来!

本文介绍了LPC82x系列MCU的存储器映射,包括Flash控制器、SRAM、ISP(在系统编程)和引导程序。详细讲解了如何控制Flash访问时间、获取签名,以及SRAM的作用。此外,还讨论了代码读取保护(CRP)以确保代码安全。
摘要由CSDN通过智能技术生成

点击上方“单片大师”可以订阅哦

存储器,顾名思义就是用来存放东西的地方,那么对于一款 MCU 而言,在性能描述的时候,我们都会说 SRAM,Flash 的容量大小有多少。对于初学者来说,可能不会去理会这些东西,拿到东西就只用。其实不然,一颗 MCU 的内存有多大是十分重要的,其主要是用来存放代码和和数据的器件。代码为什么可以运行,代码量是多少,定义的 int、short 等等类型的变量究竟是怎么分配和存储的,这些问题都和内存有关系。因此,在我们选择 MCU 进行开发的时候就要去评估其内存是否满足需求。今天,小编将带领大家一起去学习 LPC82x 系列存储器与读写保护。

首先,我们来看一下 LPC82x 系列的存储器映射(Memory Map)。

存储器映射(Memory Map)是指把芯片中或芯片外的 FLASH,RAM,ROM,Peripheral 外设等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部 RAM 或 FLASH 的情况下可进行自定义。

LPC82x 的地址空间是 4GB, 指向 2^32=4G 的地址空间,也就是 0x0000_0000——0xFFFF_FFFF 这一大块空间。

7bf97e17dbc9b5fc889ce70f44c24919.png

根据图中描述,Cortex-M0+ 内核将 0x0000_0000——0xFFFF_FFFF 这块 4G 大小的空间分成 6 大块:Flash、SRAM、MTB、ROM、外部设备、专用外设总线、特定厂商等。

  一、FLASH 控制器  

Flash 模块包括:Flash 主存储区(Main memory)、Flash 信息区(Information block),以及 Flash 存储接口寄存器区(Flash memory interface)。

针对 Flash 部分技术 Support,经常有客户会问如何控制 Flash 的访问时间和如何获得签名?

1. 控制闪存(FLASH)访问时间

    • 当 ARM 时钟速度调整前,需要调整闪存访问时间

       ① ARM 速度 20MHz 以上,闪存访问需要 2 个系统时钟

       ② ARM 速度在 20MHz 及以下,闪存访问需要 1 个系统时钟

    • 实例代码

typedefenum{/*!< 1 CPU clocks Flash accesses for up to 20 MHz CPU */FLASHTIM_20MHZ_CPU = 0,/*!< 2 CPU clocks Flash accesses for up to 30 MHz CPU */FLASHTIM_30MHZ_CPU = 1,} FMC_FLASHTIM_T;voidChip_FMC_SetFLASHAccess(FMC_FLASHTIM_T clks);

   • 注意,不要在低功耗模式下调整闪存访问时间

2. 获得闪存(FLASH)内容签名

       ① 提供 16 字节对齐起始闪存 (FLASH) 地址

       ② 提供 16 字节对齐结束闪存 (FLASH) 地址,并开始计算签名

       ③ 等待判断签名计算完成

       ④ 获得 32bits 闪存内容签名

    • 实例代码(计算从 0x4000 地址到 0x8000 地址的签名)

const static uint32_t FLASH_SIGNATURE_START_ADDR = 0x1000;const static uint32_t FLASH_SIGNATURE_END_ADDR = 0x4000;Chip_FMC_ComputeSignature(FLASH_SIGNATURE_START_ADDR,FLASH_SIGNATURE_END_ADDR);while(Chip_FMC_IsSignatureBusy());uint32_t flash_signature = Chip_FMC_GetSignature(0);

  二、SRAM  

以下是 LPC82x 参考手册中的一段原话:

15a84eebeac471d899117da508da3073.png

LPC824 起始地址是 0x1000 0000,终止地址是 0x1000 0050。

SRAM 的理解比较简单,其作用是用来存取各种动态的输入输出数据、中间计算结果以及与外部存储器交换的数据和暂存数据。设备断电后,SRAM 中存储的数据就会丢失。

  三、ISP(In System Programming)  

ISP 由英文 In-System Programming 三个首字母组成,译成中文即:在系统编程。通过调用芯片内部固化的 Bootloader 软件实现通过 UART 串口编程片内 Flash 的功能,实现小批量固件烧录,也可以实现固件升级。

1. ISP 的通常用法 - 1

    • 通过串口(USART)ISP 命令和 ISP 程序完成片上闪存(FLASH)的烧写编程

        - ISP 程序运行在 ROM 中

        - 进入 ISP 模式的方法

           ① 芯片启动时拉低管脚 P0_12

           ② IAP 命令“Reinvoke ISP”

b6071d35d390262d619bc8908c2cbc09.png

    • 通常用法

       - 固件烧录(小批量),固件升级

       - LPC82X 应用程序进入低功耗状态时,调试端口失效,无法从调试端口下载程序,而进入 ISP 模式可以通过调试端口下载用户程序

2. ISP 的通常用法 - 2

    • 在用户应用代码中或者用户第二级引导程序使用 IAP 系统函数完成片上闪存(FLASH)的烧写编程

       - 用户程序在 FLASH 或 RAM 中调用执行 IAP 系统函数

       - 通常用法

          ① 应用程序保存外设配置数据,校准数据到 FLASH 上

          ② 应用程序保存用户数据到 FLASH 上

          ③ 第二级引导程序对应用程序升级

  四、引导程序(Bootloader)  

看完上面的内容大家肯定会有疑问:ISP 功能都可以做固件升级了,为啥需要第二级引导程序?

    • ISP 只可以完成 MCU 的固件升级,一般不能完成外围器件的固件升级

    • ISP 只可以通过串口 0(USART0)完成片上闪存(FLASH)的烧写编程

    • ISP 的命令是有限的,有时候不能完全满足用户的功能需求

       ① 加密、校验启动

       ② 故障现场分析(RAM 内存导出)

       ③ 工厂测试

第二级引导程序(示例)

    • 第二级引导程序实例完成基于 I2C 总线的主机从机通信

    • 第二级引导程序等待主机指令,解析指令并处理主机指令

    • 第二级引导程序响应主机启动命令可以启动用户程序

df987b5c87a3bfadf72caa62783ce22b.png

  五、代码读取保护  

  (Code Read Protection)  

之前也看到有网友提出代码保护的问题,辛苦写的程序,怎么着也不想被别人拿去用!所以增加代码的读/写保护功能,对保护知识产权异常重要!所以最后来谈谈如果添加代码读取保护功能。

1. 代码读取保护(CRP)

    • 允许客户设置不同安全级别的闪存访问

    • CRP 模式

a797fac210b52d5a5adc0822e111c271.png

2. CRP 模式配置

    • 模式配置地址 0x000002FC

17377570f9a320d87dddbe083fe830c1.png 

    • CRP 模式的改变在 MCU 重新上电后生效

    • CRP 不影响 IAP 命令

    • 实例代码

;// keil_startup_lpc82x.s;// Code Read Protection level (CRP),0x000002FC;// <0xFFFFFFFF=> Disabled;// <0x4E697370=> NO_ISP;// <0x12345678=> CRP1;// <0x87654321=> CRP2;// <0x43218765=> CRP3 (Are you sure?)CRP_Level EQU 0xFFFFFFFF

    End   

508afb6f80c667370b82ba1dd95152ba.png

点击下方“”查看更多

↓↓↓
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值