引言 软件提供商正在开发被称为IP(知识产权)代码的复杂中间件解决方案,保护它们对微控制器而言是一个非常重要的问题。
为了满足这一重要要求,STM32L4、STM32L4 +和STM32G4系列MCU可提供以下保护功能:
• 读取保护(RDP):防止进行读取操作
• 写保护:防止进行不需要的写入或擦除操作
• 专利代码读取保护(PCROP):防止在闪存和SRAM存储器上进行读写操作。
• 防火墙:针对外部进程为敏感代码和数据提供访问保护。
本应用笔记对这些闪存保护功能进行了说明,重点介绍了专利代码读取保护(PCROP),并提供了PCROP保护的基本示例。
本文档随附的X-CUBE-PCROP固件封装包含了PCROP示例的源代码,以及基于STM32L4系列微控制器运行示例所需的所有固件模块,并且该封装可轻松移植到STM32L4 +和STM32G4系列微控制器上。
1 单分区存储器保护说明
基于Arm®(a)内核的STM32L4、STM32L4+和STM32G4系列微控制器采用多种机制,可对全存储器或特定段进行读写保护。
读保护用于保护代码免受外部访问的转储(SW IP保护),而写保护用于保护代码或数据不被意外擦除。除闪存外,这些保护还扩展到STM32L4和STM32L4+系列的SRAM2,以及STM32G4系列的CCM(内核耦合存储器)SRAM。
STM32L4xx MCU还具有防火墙机制,可在存储器中创建受信执行区域。
1.1 读取保护(RDP)
读取保护是全局闪存读保护,可保护嵌入式固件代码,可以预防复制、逆向工程、使用调试工具读出或其他方式的入侵攻击。该保护应在二进制代码载入嵌入式闪存后,由用户进行设置。读取保护适用于:
• 主闪存
• 实时时钟(RTC)中的备份寄存器
• SRAM2(STM32L4/STM32L4+)或CCM-SRAM(STM32G4)
• 选项字节(仅限级别 2)。
以下章节中对三个RDP级别(0,1和2)进行定义和描述。
1.1.1 读保护级别0
级别0是默认级别,闪存完全打开,可在所有引导配置(调试功能,从RAM、从系统内存引导加载程序或从闪存启动)下进行全部内存操作。在这种模式下没有保护,该模式可满足开发和调试需求。
1.1.2 读保护级别1
激活读保护级别1时,即使是从SRAM或系统内存引导加载程序来启动,也不能使用调试功能(如串行线路或JTAG)分别访问(读取,擦除和编程)STM32L4/L4+和STM32G4系列的闪存或SRAM2和CCM-SRAM。在这些情况下,任何对受保护区域的读请求都会生成总线错误。
但是,当从闪存启动时,则允许从用户代码访问闪存和SRAM2(STM32L4/L4+)或CCM-SRAM(STM32G4)。
将RDP选项字节重新编程为级别0,可禁用RDP级别1保护,这会导致闪存被批量擦除;而且SRAM2(STM32L4/L4+)或CCM-SRAM(STM32G4)和备份寄存器会复位。
1.1.3 读保护级别2
激活RDP级别2时,级别1下提供的所有保护均有效,MCU受到全面保护。RDP选项字节和所有其他选项字节都会被冻结,不能再修改。JTAG、SWV(单线查看器)、ETM和边界扫描全部禁用。
从闪存启动时,用户代码可以访问内存内容。但是,不再能从SRAM或从系统内存引导加载程序启动。
这种保护是不可逆的(JTAG熔断),所以不能回到保护级别1或0。
1.1.4 受RDP保护的STM32内部闪存内容更新
当Flash RDP保护激活时(级别1或级别2),内部闪存内容不能通过调试进行更新,或者当从SRAM或系统内存引导程序启动时也不能更新。因此对最终产品的一个重要要求就是,能够将内部闪存中的嵌入式固件升级为新的固件版本,添加新功能并修正潜在问题。该要求可以通过实现用户专用固件来解决,使用诸如USART的通信协议来进行重新编程过程,从而执行内部闪存的应用内编程(IAP)。
|