本帖最后由 084425 于 2023-11-1 16:54 编辑
目前越来越多的微控器(MCU)应用需要使用到复杂的算法及中间件解决方案(middleware solution),因此,如何保护软件方案商开发出来的核心算法等知识产权代码(IP-Code),便成为微控制器应用中一项很重要的课题。
因为这一重要的需求,AT32F402/405系列提供了安全库区(SLIB)的功能,以防止重要的IP-Code被终端用户的程序做修改或读取,进而达到保护的目的。
本文档将详细阐述AT32F402/405系列安全库区的应用原理和软件使用方法。
安全库区的应用原理
- 设定以密码保护主闪存中指定范围的程序区(即安全库区), 软件方案商可将核心算法存放到此区域, 以达到保护的功能, 其余空白程序区可以提供给终端商客户进行二次开发。
- 安全库区划分为唯读区(SLIB_READ_ONLY)及指令区(SLIB_INSTRUCTION), 并可选择部分或是整个安全库区存放唯读区或者指令区。
- 唯读安全库区(SLIB_READ_ONLY)的数据能透过I-Code和D-Code总线读取, 不能写入。
- 指令安全库区(SLIB_INSTRUCTION)内的程序代码仅能被MCU透过I-Code总线抓取指令(仅能被执行), 不能透过D-Code总线以读取数据的方式读取(包含ISP/ICP/调试模式以及从内部RAM启动的程序), 以读取数据的方式去访问SLIB_INSTRUCTION时, 读到的数值全都是0xFF。
- 安全库区的程序代码及数据, 除非输入正确的密码, 否则无法被擦除。在密码不正确时, 对安全库区执行写入或擦除, 将会在FLASH_STS寄存器的EPPERR位置"1"提出警告。
- 终端用户执行主闪存的整片擦除时, 安全库区的程序代码及数据不会被擦除。
- 当安全库区的保护功能被启动后, 可以透过在SLIB_PWD_CLR寄存器写入先前设置的密码来解除保护功能。解除安全库区的保护时, 芯片将会执行主闪存的整片擦除(包含安全库区的内容)。因此即使软件方案商设置的密码被泄漏,也不会有程序代码外泄的疑虑。
AN0183_AT32F402_405_Security_Library_Application_Note_ZH_V2.0.0.pdf
(2.07 MB)
|