zoukankan      html  css  js  c++  java
  • MM32 备份域学习(兼容STM32)

    MM32 备份域学习(兼容STM32)

    内容提要

    • 备份域工作原理
    • 备份域特性
    • 备份域的保护:侵入检测
    • 备份域侵入检测

    备份域电源与主要内容


    备份域特性

    • 20字节数据后备寄存器(中容量和小容量产品),或 84 字节数据后备寄存器(大容量产品),当Vdd电源被切断,仍由Vbak维持电源。
    • 用来管理防侵入检测并具有中功能的状态/控制寄存器。
    • 用来存储RTC校验值的校验寄存器。
    • 在PC13管脚(当该管脚不用于侵入检测时)上输出 RTC 校准时钟, RTC 闹钟脉冲或者秒脉冲

    侵入检测理解

    备份域可以存储用户的重要数据,为防止恶意读写,开启侵入检测可以在方式恶意读写备份域时产生复位信号,迫使备份域的数据被清除,保护用户的重要信息。


    备份域侵入检测测试

    void TamperEventTest()
    {
        //设置时钟PWR和BKP
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
        PWR_BackupAccessCmd(ENABLE);  //使能访问备份域和RTC
    
        //侵入引脚时钟设置
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
        //初始化备份域
        RCC_BackupResetCmd(ENABLE);
        RCC_BackupResetCmd(DISABLE);
    
        //设置备份域时钟
        RCC_LSEConfig(RCC_LSE_ON);    //Configures the External Low Speed oscillator (LSE).
        RCC_RTCCLKCmd(ENABLE);        //Enables or disables the RTC clock.
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //Configures the RTC clock (RTCCLK).
    
        while(!(RCC->BDCR & 0x1<<1)); //External low-speed clock ready flag.
    
        BKP_ClearFlag();  //Set CTE bit to clear Tamper Pin Event flag
    
        //配置信号控制(PA1)侵入检测的信号(PC13)
        GPIO_InitTypeDef    GPIO_InitStructure;     
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    
        //write backup registers
        BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);
        BKP_WriteBackupRegister(BKP_DR2, 0x8888);
        BKP_WriteBackupRegister(BKP_DR3, 0x6666);
        BKP_WriteBackupRegister(BKP_DR4, 0x9999);
        BKP_WriteBackupRegister(BKP_DR5, 0x9999);
        BKP_WriteBackupRegister(BKP_DR6, 0x9999);
        BKP_WriteBackupRegister(BKP_DR7, 0x9999);
        BKP_WriteBackupRegister(BKP_DR8, 0x9999);
        BKP_WriteBackupRegister(BKP_DR9, 0x9999);
        BKP_WriteBackupRegister(BKP_DR10, 0x9999);
    
        BKP->CR=0x01;  
        GPIOA->ODR=1;//set PA[0]=1 >> set PC[13] 
        while(1)
        {
            if((BKP->CSR &0x100)==0x100)//tef tamper event flag 
                {
                    //A write to the BKP->DRx register is performed while tef is set the value will not be stored
                    BKP->DR1=0x6666;
                    BKP->DR2=0x6666;
                    delay(100);
                    BKP->CSR=0x1;//clear tamper event flag;侵入检测,将使备份域复位
                    break; 
                }
        }
    


    实验注意事项

    • 设置了两个GPIO引脚,PA1和PC13,PA1用于控制等待配置完成,然后请自行添加PC13的信号(等到PA1高电平来)即侵入信号。
    • 实验结果应该是备份域被复位,读出数据为0x0。

    总结

    1. 复位:RCC中的BDCR设置实现软件复位,另外,侵入检测也可以产生一个复位。
    2. 写操作:电源控制寄存器(PWR_CR)的DBP位控制备份域寄存器与RTC的访问

    参考资料

    [1]. MM32 miniboard资料

  • 相关阅读:
    排序
    多线程
    swift demo
    支付宝支付
    TV端产品设计法则和分析
    产品经理提升修炼的方法
    “互联网+”不是传统企业的万金油
    我眼中理想的程序员
    来谈谈产品的模仿与抄袭的问题
    产品体验成就产品
  • 原文地址:https://www.cnblogs.com/OneFri/p/6208997.html
Copyright © 2011-2022 走看看