0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

雅特力AT32WB415 Security Library使用指南

雅特力 AT32 MCU 2023-10-10 09:50 次阅读

目前越来越多的微控器(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寄存器写入先前设置的密码来解除保护功能。解除安全库区的保护时,芯片将会执行主闪存的整片擦除(包含安全库区的内容)。因此即使软件方案商设置的密码被泄漏,也不会有程序代码外泄的疑虑。

下图是包含安全库区的主闪存区映射示意图,安全库区的程序代码可以很容易地被终端用户调用并执行, 但不能直接被读取,因而达到保护的功能。图1. 带有安全库区的主闪存区映射6c2a27f4-670f-11ee-9788-92fbcf53809c.png

安全库区的范围大小是以扇区(sector)为单位做设定,每一扇区的大小以实际MCU型号为准。表1是AT32WB415系列各型号的主闪存大小、每扇区大小及可设置范围。另外启动程序代码区开启了主存扩展功能后,整个18KB区域也是可以作为安全库区。表1. AT32WB415各型号闪存大小总表6c35297e-670f-11ee-9788-92fbcf53809c.png

如何启动安全库区保护

默认状态下,安全库区设定寄存器始终是不可读且被写保护。要想对安全库区设定寄存器进行写操作,首先要对安全库区设定寄存器解锁,对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第三章的范例程序将会说明如何设定编译程序的配置来避免这样的问题。图2. 文字池例子(1)6c4bc85a-670f-11ee-9788-92fbcf53809c.png图3. 文字池例子(2)6c60e96a-670f-11ee-9788-92fbcf53809c.png

一、不可将中断向量表设置为安全库区

中断向量表包含每个中断处理程序的入口点地址,由MCU通过D-Code总线读取。通常,中断向量表位于主闪存第一扇区(sector 0)的起始地址0x08000000,因此在设置指令安全库区时,必须遵守以下的规则:

  • 不可将主闪存的第一扇区设置为安全库区
  • 要被安全库区保护的程序代码,不可放置在闪存的第一扇区内

二、安全库区代码与用户区代码的关联性

受安全库区保护的程序代码(IP-code)可以从位于用户代码区(安全库区之外的区域)的函数库中调用函数。在这种情形下,IP-Code将会包含这些函数的地址,允许PC(程序计数器)在执行IP-Code时跳转到这些函数。一旦安全库区被启动,这些函数的地址就不能被改变,此时,这些位于用户代码区的函数的地址就必须固定下来,否则PC将跳转到错误的地址而无法正常工作。因此在设置安全库区的时候,应该将所有与IP-Code相关联的函数都一起编排到安全库区之内以避免此情况发生。下图显示出一个被保护的函数Function_A()调用到用户区内的函数Function_B()的例子。图4. 安全库区的函数调用用户区函数的例子6c765a3e-670f-11ee-9788-92fbcf53809c.png

此外,另一个最常见的情形就是使用到C语言的标准函式库,例如memset()及memcpy()这类函数。如果IP-Code跟用户区代码都有调用到这类函数,就会有上述问题的困扰。列举两种常用的解决方法:1) 将其编译到安全库区范围内,具体如何实现可以查看keil或IAR的相关文档。2) 避免在IP-Code内使用C的标准函式库,若非要使用,就必须将用到的函数改写为其他名称,以下是一个范例,在IP-Code中写一个my_memset()函数取代原先的memset()。图5. 自定义函数范例6c83c9ee-670f-11ee-9788-92fbcf53809c.png

三、软件浮点运算库的使用与编排

由于AT32WB415没有硬件符点运算单元(FPU),所以项目中如有符点数运算,Keil或IAR编译程序就会使用ARM提供的软件浮点运算库函数。但因为软件浮点运算库函数是已经编译过的代码,无法做修改,且其中有些函数内会有如同前面章节提到的文字池格式的代码,所以不能将浮点运算库函数一起编排到SLIB_CODE保护区之内,必须放到安全库区之外。如下图中Keil浮点运算库中的除法函数,就有文字池格式的汇编代码。图6. 除法函数汇编代码6c9ccec6-670f-11ee-9788-92fbcf53809c.png

当sLib启用后,sLib保护区内的全部内容就不能被改动,所以SLIB_CODE调用到的每个浮点运算库函数的地址也就不能被改变。第三章的范例将会说明如何将使用到的浮点运算库函数,编排到SLIB-CODE保护区外且固定地址的区域,在启用SLIB保护之后,让SLIB-CODE保护区内的程序可以正确无误的调用。Keil软件浮点运算库的详细说明,可参考安装目录下的ARM DUI0378G文档《ARMCompiler v5.06 for μVision ARM C and C++ Libraries and Floating-Point SupportUser Guide》。IAR软件浮点运算库的详细说明,可参考安装目录下的EWARM_DevelopmentGuide文档《IAR C/C++ Development Guide》的PREBUILT RUNTIME LIBRARIES章节。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控器
    +关注

    关注

    0

    文章

    7

    浏览量

    7113
  • 雅特力
    +关注

    关注

    0

    文章

    157

    浏览量

    8005
  • AT32
    +关注

    关注

    1

    文章

    113

    浏览量

    2093
收藏 人收藏

    评论

    相关推荐

    喜讯!科技荣膺“2024年度电机控制十大主控芯片”

    11月21日,在电子发烧友举办的2024电机控制先进威廉希尔官方网站 研讨会暨电机控制威廉希尔官方网站 市场表现奖颁奖典礼上,科技AT32F415凭借高效的性能和在电机控制市场的优异表现,荣获“2024年度
    的头像 发表于 11-23 01:04 249次阅读
    喜讯!<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>科技荣膺“2024年度电机控制十大主控芯片”

    发布高性能电机控制专用MCU

    近日,科技正式推出了其首款高性能电机控制专用MCU——AT32M412/M416。这款MCU专为出行工具、家电及工业控制等应用而设计,旨在满足市场对于高效、精准电机控制解决方案的迫切需求。
    的头像 发表于 11-01 18:11 889次阅读

    AT32讲堂087 | AT32 IDE快速入门指南

    新建项目新项目向导AT32ID提供支持MCU的C语言项目模板,方便用户快速创建项目。菜单栏【File】>【New】>【CProject】。新建项目向导的对话框将出现。在对
    的头像 发表于 09-15 08:08 437次阅读
    AT32讲堂087 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32 IDE快速入门<b class='flag-5'>指南</b>

    STM32CUBEMX(7)--移植AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压

    概述 本篇文章主要介绍如何使用STM32CubeMX移植到AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。 硬件准备 首先需要准备一个开发板,这里
    发表于 09-06 16:40

    亮相2024慕尼黑上海电子展

    未来科技发展的宏伟蓝图。在这场科技盛宴中,以其卓越的威廉希尔官方网站 实力和前瞻性的产品布局,成为了万众瞩目的焦点。
    的头像 发表于 07-09 15:14 605次阅读

    AT32 MCU通过IEC 60730功能安全认证,为家电产品提供安全保障

    ‍‍近日,AT32MCU安全库顺利通过IEC60730功能安全认证,为家电产品提供安全质量保证。国际公认的测试、检验和认证机构SGS为
    的头像 发表于 05-20 08:15 562次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32 MCU通过IEC 60730功能安全认证,为家电产品提供安全保障

    发布全新车载型AT32A423系列MCU

    近日发布了全新车载型AT32A423系列MCU,该产品基于ARM®Cortex®-M4内核设计,集成了丰富的外设资源,展现了高效能与多尺寸封装的双重优势。
    的头像 发表于 05-17 10:38 630次阅读

    AT32F423入门使用指南

    初步环境准备开发环境下载地址:
    的头像 发表于 05-14 08:15 1528次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423入门<b class='flag-5'>使用指南</b>

    SGS为科技颁发AEC-Q100认证证书以及IEC 60730认证证书

    近日,国际公认的测试、检验和认证机构SGS(以下简称为“SGS”)为科技颁发AEC-Q100认证证书以及IEC 60730认证证书。
    的头像 发表于 05-13 10:21 726次阅读
    SGS为<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>科技颁发AEC-Q100认证证书以及IEC 60730认证证书

    AT32F423 PWC使用指南

    PWC简介电源控制的功能主要包含以下内容供电方案,包括VDD、VDDA的供电电源域,由VDD/VDDA域,1.2V域组成上电低电压复位,由上电复位和低电压复位组成电压监测器,监测供电电压与设定临界值关系电压调节器,电压调节器的几个工作状态省电模式,包括睡眠模式、深度睡眠模式、待机模式图1.电源域框图PWC基本功能解析供电方案功能介绍AT32F423MCU的供
    的头像 发表于 03-05 08:18 647次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423 PWC<b class='flag-5'>使用指南</b>

    热敏FET使用指南

    电子发烧友网站提供《热敏FET使用指南.pdf》资料免费下载
    发表于 02-22 09:35 0次下载
    热敏FET<b class='flag-5'>使用指南</b>

    AT32 MCU与SEGGER携手合作,开发量产事半功倍

    近日,与SEGGER共同宣布J-Link仿真调试器与Flasher在线烧录器全面支持AT32MCU产品,SEGGER工具链的加持使AT32MCU开发如虎添翼。
    的头像 发表于 02-22 08:13 481次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32 MCU与SEGGER携手合作,开发量产事半功倍

    AT32F423时钟配置入门指南

    电子发烧友网站提供《AT32F423时钟配置入门指南.pdf》资料免费下载
    发表于 01-31 09:37 1次下载
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>AT32F423时钟配置入门<b class='flag-5'>指南</b>

    AT32WB415直接测试模式入门指南

    DTM操作说明资源准备1)硬件环境:AT-START-WB415MT8852B2)软件环境:SourceCode\projects\ble_app_gatt软件设计本范例不推荐用户修改,直接下载程序
    的头像 发表于 01-19 08:14 525次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>直接测试模式入门<b class='flag-5'>指南</b>

    如何通过AT32WB415的蓝牙模块来实现ANCS的功能

    概述ANCS(AppleNotificationCenterService)即苹果通知中心服务,此服务为外围蓝牙设备(手表、耳机等)访问IOS设备(iPhone、iPad等)上生成的多种通知提供了一种简单方便的机制。ANCS围绕三个原则设计:简单性、高效性和可扩展性,因此,不论是简单的LED设备还是具有大显示屏的功能强大的“配套”设备等配件来说,这项服务都具
    的头像 发表于 12-30 08:14 500次阅读
    如何通过<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32WB415</b>的蓝牙模块来实现ANCS的功能