2017年6月14日星期三

NUCLEO-L496ZG防火墙 - 可执行的易失性数据段

STM32L496ZG微控制器提供了防火墙的功能,用于保护FLASHSRAM中的代码或数据。STM32CubeL4提供了两个使用防火墙功能的示例,FIREWALL_VolatileData_ExecutableFIREWALL_VolatileData_Shared。本文主要结合FIREWALL_VolatileData_Executable示例简单介绍防火墙功能的使用方法。

HAL提供的示例主要介绍了如何使用防火墙来保护定义为可执行的易失性数据段。易失性数据段存储在SRAM1中。在防火墙初始化示例中,受保护的易失性数据段是定义为非共享的,以便在防火墙关闭时不受保护的代码时无法访问。

防火墙初始化的一般步骤如下:
1.       配置RCC,使能防火墙模块的时钟;
2.       配置RCC,使能系统配置寄存器的时钟;
3.       设置每个段的起始地址和长度(CSSACSLNVDSSANVDSLVDSSAVDSL寄存器);
4.       设置防火墙的配置寄存器(FW_CR寄存器);
5.       启用防火墙,清除系统配置寄存器中的FWDIS位。

系统配置寄存器
该寄存器连接到APB2总线上,向APB2外设时钟使能寄存器RCC_APB2ENRSYSCFGEN位置1,可以打开系统配置寄存器的时钟。系统配置寄存器(SYSCFG_CFGR1)中的FWDIS位控制防火墙保护功能的使能和禁止,所以需要使能该寄存器。默认情况下是禁止使用防火墙。HAL提供了API函数:__HAL_RCC_SYSCFG_CLK_ENABLE();


防火墙功能配置
HAL提供了防火墙功能配置的API函数:HAL_FIREWALL_Config。该函数主要有三个功能:使能防火墙时钟、配置各段(代码段、易失性数据段和非易失性数据段)的起始地址和长度、配置FW_CR寄存器。
●   使能防火墙时钟
防火墙连接在APB2总线上,地址为0x4001 1C00 - 0x4001 1FFF。向RCC_APB2ENR寄存器的FWEN位置1,使能防火墙时钟。HAL同样提供了一个API函数:__HAL_RCC_FIREWALL_CLK_ENABLE
●   各段的起始地址和长度
HAL中的FIREWALL_InitTypeDef结构体保存着各段的信息。本示例演示的是易失性数据段,因此代码段和非易失性的起始地址和长度都设置为0,易失性数据段的起始地址为0x2000F100,段长为0xF00
●   配置FW_CR寄存器
FW_CR寄存器可以设置易失性数据段的共享性和可执行性。本示例设置为可执行的,并且是非共享的。
  1.     /* No protected code segment (length set to 0) */   
  2.     fw_init.CodeSegmentStartAddress      = 0x0;
  3.     fw_init.CodeSegmentLength            = 0;
  4.     
  5.     /* No protected non-volatile data segment (length set to 0) */   
  6.     fw_init.NonVDataSegmentStartAddress = 0x0;
  7.     fw_init.NonVDataSegmentLength       = 0;
  8.     
  9.     /* Protected volatile data segment (in SRAM1 memory) start address and length */   
  10.     fw_init.VDataSegmentStartAddress    = 0x2000F100;
  11.     fw_init.VDataSegmentLength          = 3840; /* 0xF00 bytes */  
  12.     
  13.     /* The protected volatile data segment can be executed */  
  14.     fw_init.VolatileDataExecution       = FIREWALL_VOLATILEDATA_EXECUTABLE;
  15.     
  16.     /* The protected volatile data segment is not shared with non-protected
  17.       application code */    
  18.     fw_init.VolatileDataShared          = FIREWALL_VOLATILEDATA_NOT_SHARED;
  19.     
  20.     /* Firewall configuration */
  21.     if (HAL_FIREWALL_Config(&fw_init) != HAL_OK)
  22.     {
  23.       Error_Handler();
  24.     }  
复制代码

实验代码
代码的分布通过分散加载文件实现。可执行的易失性数据段位于0x2000F104处,保护的易失性数据段位于0x2000FE00处。当调用vdata_protected_function()函数时,程序进入到可执行的易失性数据段,按照“call gate”序列打开防火墙。退出该函数时,关闭防火墙。
  1.     /* In the example, the protected function processes
  2.        non-protected input data and outputs an internal computation result. 
  3.        For demonstration purposes, vdata_protected_function() accesses as well
  4.        data located in the protected volatile data segment. 
  5.        vdata_protected_function() itself ensures that FPA bit is set
  6.        before exiting the protected area.
  7.        */ 
  8.      
  9.     vdata_function_output = vdata_protected_function(unprotected_vdata); 
  10.     
  11.     /* The Firewall is now closed again. */
  12.         
  13.     /* Check that the output is that expected */
  14.     if (vdata_function_output != expected_vdata_function_output_1)
  15.     {
  16.       /* Processing issue, log it in filling up RTC back-up register BKP0R 
  17.          with 0x2, then exit in Error */  
  18.       WRITE_REG( RTC->BKP0R, 0x2 ); 
  19.       Error_Handler();
  20.     }
复制代码

如果返回的计算结果符合预期,则LED1指示灯常亮。
如果vdata_protected_function退出时未置位FPA,则会触发系统复位,LED1指示灯闪烁。

参考资料
1. STM32L4x6系列用户手册RM0351:https://www.yiboard.com/thread-720-1-1.html

2017年八大顶尖的技术趋势

技术日新月异,我们都必须跟上步伐。新技术带来了新的商机。那些忽视技术趋势的人最终都被遗忘在竞争激烈的世界中。那些及时做出调整,并能适应开展业务的新方式的人,会马上取得领先优势,并获得财务回报。

所以,如果你在经营一个企业,不管是大是小,找出正在发生哪些技术变革。这些新的发展通常会被忽视,只有当新的小玩意出现在市场上时,人们才会知道他们。但是,这些第一批首先注意新技术趋势的人会在市场竞争中脱颖而出,

企业,特别是小企业,可以从现代技术中受益匪浅。新技术将大幅降低运营成本和其他成本,增加小企业家的利润率。

事实上,越来越多的企业家正在采用新技术作为其业务发展战略的一部分。根据一项调查,76%的商业决策者认为,人工智能是其组织成功的关键

但哪些新技术正在获得世界的跟进和关注?其实有很多。事实上,我们每年都会了解新兴技术。然而,不一定所有的新技术都在这里留下来。许多技术会很快消失,因为企业会发现他们不可行。


1.    虚拟现实
直到过去两年,虚拟现实才被大众熟识。但技术已经吸引了人们的想象力。它正在逐渐转变为主流。许多专家期望虚拟现实成为下一件大事。企业已经感受到了该技术带来的机会。例如,许多制造商都推出了自己的VR耳机。

2.    AI个人助理
人工智能在许多国家越来越受欢迎,用于日常工作。事实上,正因为AI设备的普及和实用,像亚马逊和Google这样的公司在提供最好的AI个人助理设备。家里的人们可以和这些设备通话,询问有关天气、温度、订单,控制灯的开启或关闭,为特定情况提供建议,翻译等。 Google Home是一个基于AI的设备,可以采用多种方式在日常生活中帮助人们。

3.    无人机
无人机技术是另一个在全球迅速崛起的新技术趋势。之前主要用于军事目的,直到现在,这种技术才用于商业目的。亚马逊最近才开始商用无人机。在接下来的几个月中,这项技术只会被一些公司用来传递信息、订单等等。 2017年,沃尔玛还将开始使用无人机进行交付。

4.   增强现实
增强现实是一项新技术,企业将以许多方式利用它们的优势。当人们开始玩Pokemon Go时,世界才了解到这项技术。现在,企业都在这项技术探索使用用途,如在现实世界中模拟3D模型。 B2B的增强现实允许用户获得他们业务的模拟模型,然后打印出来将其分发给销售团队。

5.    智慧家园
越来越多的人采用智能家居技术来保护家庭免受任何盗窃、破坏和入侵。该技术允许房主或业主在物业上保持紧密关系,并考虑到安全方面。

但技术不仅仅是安全和保障。它还为人们提供了一些有用的帮助,用于诸如供暖和空调家庭的一些作品。许多公司在这种快速发展的技术中感受到商机。他们已经开发了众多的智能家居产品。


6.    无人驾驶
引起人们和业主关注的另一种新时代技术是无人驾驶。实际上无人驾驶技术被视为一个巨大的商机。在未来的日子,我们将会看到无人驾驶的汽车。谷歌、Uber和Ford已经表现出打算自主制造自动驾驶汽车,竞争已经加剧。这是2017年的主要技术趋势。

7.     情感工具
情感工具技术是制造商迅速崛起的另一个业务领域。情感工具用于社会互动、竞赛和环境。这些工具很快就会用于智能家居和智能车。将来,协作式机器人我们将会看到。

8.     3D打印
消费级3D打印将无处不在,打印机的价格从2017年开始下降。3D打印机的价格已经从200美元到300美元跌至99美元。 随着成本的降低,技术将会很普遍。 可能是在2017年,人们开始给3D打印机作为礼物。 人们会打印多于购买东西。3D打印技术也已经用于打印公司标志设计

所以,这几个技术趋势,我们认为在2017年将继续占据主导地位。更多的技术正在兴起,继续创造新的商机。