雅特力无线型MCU AT32WB415 Security Library使用指南
目前越来越多的微控器(MCU)应用需要使用到复杂的算法及中间件解决方案(middlewaresolution),因此,如何保护软件方案商开发出来的核心算法等知识产权代码(IP-Code),便成为微控制器应用中一项很重要的课题。
因为这一重要的需求,AT32WB415系列提供了安全库区(SLIB)的功能,以防止重要的IP-Code被终端用户的程序做修改或读取,进而达到保护的目的。本文档将详细阐述AT32WB415系列安全库区的应用原理和软件使用方法。
应用原理
安全库区的应用原理
设定以密码保护指定范围的程序区(即安全库区),软件方案商可将核心算法存放到此区域,以达到保护的功能,其余空白程序区可以提供给终端商客户进行二次开发。
安全库区划分为指令安全库区(SLIB_INSTRUCTION)及数据安全库区(SLIB_DATA),并可选择部分或是整个安全库区存放指令,但不支持整个安全库区存放数据。
指令安全库区(SLIB_INSTRUCTION)内的程序代码仅能被MCU透过I-Code总线抓取指令(仅能被执行),不能透过D-Code总线以读取数据的方式读取(包含ISP/ICP调适模式以及从内部RAM启动的程序),以读取数据的方式去访问SLIB_INSTRUCTION时,读到的数值全都是0xFF。
数据安全库区(SLIB_DATA)的数据仅能透过D-Code总线读取,不能写入。
安全库区的程序代码及数据,除非输入正确的密码,否则无法被擦除。在密码不正确时,对安全库区执行写入或擦除,将会在FLASH_STS寄存器的EPPERR位置"1"提出警告。
终端用户执行主闪存的整片擦除时,安全库区的程序代码及数据不会被擦除。
当安全库区的保护功能被启动后,可以透过在SLIB_PWD_CLR寄存器写入先前设置的密码来解除保护功能。解除安全库区的保护时,芯片将会执行主闪存的整片擦除(包含安全库区的内容)。因此即使软件方案商设置的密码被泄漏,也不会有程序代码外泄的疑虑。
下图是包含安全库区的主闪存区映射示意图,安全库区的程序代码可以很容易地被终端用户调用并执行, 但不能直接被读取,因而达到保护的功能。
安全库区的范围大小是以扇区(sector)为单位做设定,每一扇区的大小以实际MCU型号为准。表1是AT32WB415系列各型号的主闪存大小、每扇区大小及可设置范围。另外启动程序代码区开启了主存扩展功能后,整个18KB区域也是可以作为安全库区。
如何启动安全库区保护
默认状态下,安全库区设定寄存器始终是不可读且被写保护。要想对安全库区设定寄存器进行写操作,首先要对安全库区设定寄存器解锁,对SLIB_UNLOCK寄存器写入解锁0xA35F6D24值,通过查看SLIB_MISC_STS寄存器的SLIB_ULKF位确认解锁成功,随后便允许对安全库区设定寄存器写入设定值。
启动主闪存安全库区的步骤如下
检查FLASH_STS寄存器的OBF位,以确认没有其他正在进行的闪存操作;
对SLIB_UNLOCK寄存器写入0xA35F6D24,以进行安全库区解锁;
检查SLIB_MISC_STS寄存器的SLIB_ULKF位,以确认解锁成功;
在SLIB_SET_RANGE寄存器设定要保护的区域,包含指令区与数据区的地址;
等待OBF位变为‘0’;
在SLIB_SET_PWD寄存器设定安全区域密码;
等待OBF位变为‘0’;
烧录将存入安全库区的代码;
进行系统复位,重装载安全库区设定字;
读出SLIB_STS0/STS1寄存器用于判断安全库区设定结果。
注意事项
只可在主闪存中设置安全库区,实际可设置范围参见表1;
启动程序代码区中设置安全库区(需开启AP模式),设置范围为整个启动程序代码区;
主闪存和启动程序代码区,安全库区只能设置其中一个,不可同时设置;
安全库区代码必须以扇区为单位进行烧录,且起始地址必须与主闪存地址对齐;
中断向量表是数据型态且通常会被放置在闪存的第一扇区(扇区0)内,请勿将闪存的第一扇区设定为安全库区;
要被安全库区保护的程序代码,不可放置在闪存的前4KB内;
关于安全库区设定寄存器的详细说明,请参阅AT32WB415系列技术手册。启动安全库区的程序可参考安全库区应用范例project_l0中位于main.c中的slib_enable()函数。亦可使用雅特力的ICP或ISP刻录工具做设定,后面章节将会有详细的说明。
如何解除安全库区保护
当安全库区的保护功能被启动后,可以透过在SLIB_PWD_CLR寄存器写入先前设置的密码来解除保护功能。解除安全库区的保护时,芯片将会执行主闪存的整片擦除(包含安全库区的内容)。
解除主闪存安全库区的步骤如下
检查FLASH_STS寄存器的OBF位,以确认没有其他正在进行的编程操作;
在SLIB_PWD_CLR寄存器写入先前设置的安全区域密码;
进行系统复位,重装载安全库区设定字;
读出SLIB_STS0寄存器用于判断安全库区设定结果。
编排及执行安全库区的程序
如前面章节所提到,在指令安全库区(SLIB_INSTRUCTION)内的的程序代码可以被MCU经由I-Code总线抓取,但不能经由D-Code总线以读取数据的方式去读出,这样的保护是全面性的,也就是说在指令安全库区之内的程序代码,也不能读取同样被放置在指令安全库区之内的数据,例如C程序代码常被编译成的文字池(literal pool)、分支表(branch table)或常数(constant)等之类当指令被执行时会经由D-Code总线去读取的数据。
这代表指令安全库区之内只能放置指令,不能放置任何数据。因此用户在编排要放置在指令安全库区之内的程序代码时,必须配置编译程序(compiler)的设定去产生只执行(execute-only)的代码以避免上述那些型态的数据产生。
图2及图3是一般常见的文字池跟分支表的例子:
switch()是C程序中常用的跳转指令,此例子中的sclk_source变量是去读取CRM_CFG寄存器,图2可看到编译出来的汇编代码(assembly code)“LDR R7, [PC, #288]”,会用程序计数器(program counter, PC)间接寻址的方式去取得CRM_CFG寄存器的地址,而CRM_CFG的地址会被以常数的方式存放在邻近的指令区(也在指令安全库区之内),因此执行switch()指令时就会发生数据的读取。如果指令安全库区内有这类的程序代码,在执行的时候就会产生错误。
AN0127第三章的范例程序将会说明如何设定编译程序的配置来避免这样的问题。
一、不可将中断向量表设置为安全库区
中断向量表包含每个中断处理程序的入口点地址,由MCU通过D-Code总线读取。通常,中断向量表位于主闪存第一扇区(sector 0)的起始地址0x08000000,因此在设置指令安全库区时,必须遵守以下的规则:
不可将主闪存的第一扇区设置为安全库区
要被安全库区保护的程序代码,不可放置在闪存的第一扇区内
二、安全库区代码与用户区代码的关联性
受安全库区保护的程序代码(IP-code)可以从位于用户代码区(安全库区之外的区域)的函数库中调用函数。在这种情形下,IP-Code将会包含这些函数的地址,允许PC(程序计数器)在执行IP-Code时跳转到这些函数。一旦安全库区被启动,这些函数的地址就不能被改变,此时,这些位于用户代码区的函数的地址就必须固定下来,否则PC将跳转到错误的地址而无法正常工作。因此在设置安全库区的时候,应该将所有与IP-Code相关联的函数都一起编排到安全库区之内以避免此情况发生。下图显示出一个被保护的函数Function_A()调用到用户区内的函数Function_B()的例子。
此外,另一个最常见的情形就是使用到C语言的标准函式库,例如memset()及memcpy()这类函数。如果IP-Code跟用户区代码都有调用到这类函数,就会有上述问题的困扰。
列举两种常用的解决方法:
1) 将其编译到安全库区范围内,具体如何实现可以查看keil或IAR的相关文档。
2) 避免在IP-Code内使用C的标准函式库,若非要使用,就必须将用到的函数改写为其他名称,以下是一个范例,在IP-Code中写一个my_memset()函数取代原先的memset()。
三、软件浮点运算库的使用与编排
由于AT32WB415没有硬件符点运算单元(FPU),所以项目中如有符点数运算,Keil或IAR编译程序就会使用ARM提供的软件浮点运算库函数。但因为软件浮点运算库函数是已经编译过的代码,无法做修改,且其中有些函数内会有如同前面章节提到的文字池格式的代码,所以不能将浮点运算库函数一起编排到SLIB_CODE保护区之内,必须放到安全库区之外。如下图中Keil浮点运算库中的除法函数,就有文字池格式的汇编代码。
当sLib启用后,sLib保护区内的全部内容就不能被改动,所以SLIB_CODE调用到的每个浮点运算库函数的地址也就不能被改变。第三章的范例将会说明如何将使用到的浮点运算库函数,编排到SLIB-CODE保护区外且固定地址的区域,在启用SLIB保护之后,让SLIB-CODE保护区内的程序可以正确无误的调用。
Keil软件浮点运算库的详细说明,可参考安装目录下的ARM DUI0378G文档《ARM® Compiler v5.06 for μVision® ARM C and C++ Libraries and Floating-Point Support User Guide》。
IAR软件浮点运算库的详细说明,可参考安装目录下的EWARM_DevelopmentGuide文档《IAR C/C++ Development Guide》的PREBUILT RUNTIME LIBRARIES章节。
关于雅特力
雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM ®Cortex®-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM® Cortex®-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G、物联网、消费、商务及工控等领域。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由玉鹤甘茗转载自雅特力 微信公众号,原文标题为:AT32讲堂062 | 雅特力AT32WB415 Security Library使用指南,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
【经验】解析雅特力AT32系列MCU RTC入门指南
RTC计数逻辑位于电池供电域,内部为一个32位递增计数器,只要电池供电域有电,RTC便会一直运行,不受系统复位以及VDD掉电影响。本文雅特力将为大家介绍AT32系列MCU的RTC入门指南。
【经验】雅特力AT32 MCU USB设备库的架构和使用方法
本文主要介绍雅特力MCU AT32 USB设备库的结构和库的使用方法,AT32 USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。
【经验】雅特力AT32 MCU SPI/I2S入门指南
AT32的SPI接口提供软件编程配置选项,根据软件编程配置方式不同,可以分别作为SPI和I2S使用。本文将分SPI和I2S分别介绍SPI接口作SPI或I2S的功能特性以及配置流程。
雅特力32位MCU选型表
雅特力AT32 MCU的选型的相关技术参数如下,32位MCU,多种封装:TSSOP20,QFN28,QFN32,QFN48,LQFP48,LQFP64,LQFP100,LQFP144,稳定的工作温度:-40°C~85°C,-40°C~105°C,频率范围在96MHz~288MHz之间
产品型号
|
品类
|
Core
|
FPU
|
Speed(MHz)
|
Flash(KB)
|
SRAM(KB)
|
I/O
|
Advanced TM(16-bit)
|
GPTM(32-bit)
|
GPTM(16-bit)
|
Basic TM(16-bit)
|
Systick(24-bit)
|
WDT
|
WWDT
|
RTC
|
I2C
|
SPI
|
(F/H)I2S(1)(2)
|
USART/UART
|
SDIO
|
USB Device
|
CAN
|
ADC Engine
|
12-bit ADC ch
|
DAC Engine
|
12-bit DAC ch
|
PKG
|
Size(mm)
|
Temp(℃)
|
AT32F403ZCT6
|
32位MCU
|
M4
|
FPU
|
200MHz
|
256KB
|
96KB/224KB
|
112
|
3
|
2
|
8
|
2
|
1
|
1
|
1
|
1
|
3
|
4
|
0/4
|
3/2
|
2
|
1
|
1
|
3
|
21
|
2
|
2
|
LQFP144
|
20mmx20mm
|
-40℃~85°C
|
选型表 - 雅特力 立即选型
ISP Programmer User manual
型号- AT32WB415,AT32F423,AT32F413,AT32F435,AT32F402,AT32F403,AT32F425,AT32F415,AT32F437,AT32F405,AT32F407,AT32A403,AT32L021,AT32F403A,AT32A423,AT32F421
ICP Programmer User Manual
型号- AT32WB415,AT32WB415CCU7-7,AT32F423,AT32F413,AT32F402,AT32F435,AT32F403,AT32F425,AT32F415,AT32F437,AT32F405,AT32A403A,AT32F407,AT32F4F413,AT32F403CBT6,AT32L021,AT32F490,AT32FEBKC8T7,AT32M412,AT32F403A,AT32A423,AT32F413C8T7,AT32M416,AT32F421
【经验】雅特力AT32F413时钟配置教程
时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。AT32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文档就着重针对各系列的情况来详细介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。
【经验】雅特力教你如何使用Eclipse插件调试AT32 MCU
本文中,雅特力介绍通过使用Eclipse,ARM-GCC编译工具,GNU-ARM插件,Jlink,ATLink等资源来调试AT32系列MCU芯片。
雅特力MUC AT32 IEC 60730 Class B软件库使用指南
本文主要介绍针对其中B类软件而开发的CLASSB软件包,安全库相关代码基本是独立于芯片外设IP,软件包中各型号的example都是基于AT-START开发板,其余暂未支持型号用户可自行参考移植。
【应用】雅特力AT32MCU DSP的使用案例和网络神经算法CMSIS-NN案例
雅特力AT32F4xx使用的是ARM Cortex®-M4F内核。ARM Cortex®-M4F是带有FPU内核处理器是一款32位的RISC处理器,具有优异的代码效率,采用通常8位和16位器件的存储器空间即可发挥ARM内核的高性能。
【经验】雅特力AT32 MCU将Jlink引脚用做GPIO的方法
使用雅特力AT32 MCU时,PA14/PA15/PB3/PB4主功能是JTAG功能,就是说在上电后,这几个引脚分别是JTCK/JTDI/JTDO/NJTRST功能。本文介绍雅特力AT32 MCU将Jlink引脚用做GPIO的方法。
电子商城
服务
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
朗能泛亚提供是德(Keysight),罗德(R&S)等品牌的测试测量仪器维修服务,包括网络分析仪、无线通讯综测仪、信号发生器、频谱分析仪、信号分析仪、电源等仪器维修,支持一台仪器即可维修。
提交需求>
登录 | 立即注册
提交评论