综合网上讲解的几种读保护措施,这里简单总结下:
采用stm32唯一ID作为加密的字符,使用固定密码,采用16位字节AES加密的方式生成密文,然后写进flash,,app程序执行的时候需要判断读取的stm32唯一ID号和AES解密出来是否一致,是执行程序,否则不执行,测试过,但这个方案针对生产比较麻烦,这里不采用
ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //
ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7E8); // 低字节
ChipUniqueID[3] = 0xffffffff;
printf("rn########### 芯片的唯一ID为: %X-%X-%X-%Xn",
ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2],ChipUniqueID[3]);
memcpy(aesKey , "chenjianqun66666" ,16); //AES加密密钥,16字节(128bit)
memset(expressText ,0 ,1024);
memset(expressText ,0 ,1024);
AES_Decrypt(expressText , cipherText , aesKey);//useaesKey decrypt 解密
count[0] =((u32)expressText[3]<<24)|((u32)expressText[2]<<16)|((u32)expressText[1]<<8)|((u32)expressText[0]);
count[1] =((u32)expressText[7]<<24)|((u32)expressText[6]<<16)|((u32)expressText[5]<<8)|((u32)expressText[4]);
count[2] =((u32)expressText[11]<<24)|((u32)expressText[10]<<16)|((u32)expressText[9]<<8)|((u32)expressText[8]);
if((count[0] == flash[0])&&(count[1]== flash [1])&&(count[2] == flash [2]))
{
//App程序
}
方案二:
采用stm32内部flash读保护函数进行读保护,此时板卡芯片不能读写也不能烧录,所以再设计方面需要外部触发信号关闭读保护并且擦除flash的程序,(可以采用按键的触发方式,当按键按下的时候,度保护关闭并擦除)此时可以再次读写和烧录。(待测试)
if(GPIO_ReadInputDataBit(GPIOA , GPIO_Pin_0))
{
if(FLASH_GetReadOutProtectionStatus()!=RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
// FLASH_EraseAllPages(); //解除读保护的时候擦除所有
FLASH_Lock();//上锁
}
}
else{
if(FLASH_GetReadOutProtectionStatus()!=SET)
{
FLASH_Unlock();//不解锁FALSH也可设置读保护
FLASH_ReadOutProtection(ENABLE);
FLASH_Lock();//上锁
}
}
这里也可以采用在内部的ram中烧进一段代码,用于取消读保护和擦除,需要再次烧录的时候,使用Boot0 ,boot1进入ram启动状态即可
方案三:
另一种方式修改flash的选项字节(Option type) 官方工具stlink utility(可以参考https://blog.csdn.net/hxiaohai/article/details/78546431?fps=1&locationNum=5)也是修改这个的保护等级,但是103的好像不行(从以下文件中可以看到103系列并没有选项字节文件,加密方式只能选用上述的方案二,但是207的读保护方式因为没有103在方案二的函数,所以只能设置选项字节)修改STM32F2xx_OPT.s 中RDP寄存器的0xAA,为0x00,注意:这里不可以修改为0xCC,0xCC为最高等级,这个值的修改会导致芯片变成砖头
根据网上的资料:http://www.51hei.com/mcu/2767.html 工程中加入opt.s文件既可以实现对flash的加密,但是解密的时候还是需要用stlink的官方工具stlink utility进行设置,要不然就需要在sram里面设置一份设置选项字节为默认出厂形式才可以再次烧录读写
上一篇:STM32F40x系列ADC外部通道和引脚对应关系
下一篇:STM32ADC使用方法解析
推荐阅读最新更新时间:2024-11-13 00:22
设计资源 培训 开发板 精华推荐
- 串口转8路模拟舵机驱动板
- BH1750光照传感器
- hanshuo-ESP32-4.2墨水屏
- 用于 LT3483 -5V 升压/降压转换器的镍氢电池充电器
- CMC1003-2M-55-8-KU、EP4CE55 USB Blaster 套件,允许在紧凑型模块中实现通用逻辑功能、Altera Nios II 处理器操作
- SPX-14973,SPI 缓冲区保护程序开发套件
- SPX1582 3A 超低压降固定稳压器的典型应用
- L5973D 输出电压低于 1.235V 内部参考电压的典型应用
- 适用于STM32 Nucleo的运动MEMS和环境传感器扩展板
- ATXMEGAB1-XPLD、XMEGA-B1 Xplained 评估套件是用于评估 ATxmega128B1 AVR MCU 的硬件平台
- 有奖看视频|2022台北国际电脑展——美光主题演讲精选
- TI MCU 推新了!八月直播揭秘新特性~报名观看赢好礼!
- 【新年活动】2023,兔 do list!
- TI 无线主题有奖征集
- MPS 隔离式稳压 DCDC 模块——MIE系列,小且不凡!痛点讨论|你理想中的电源模块是怎样的?
- 你们想要的XMC4800 Relax EtherCAT Kit来了,速度来申请!
- 泰克多媒体总线专题之《DDR Memory》,下载赢好礼!
- 阅读Microchip多种连接接口SAM单片机精彩专题,参与活动赢好礼
- 有奖直播|MPS电感解决方案,助力更好的开关电源设计
- 2021 Digikey KOL系列——亲手教你转起一台无刷电机