历史上的今天
返回首页

历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2019年10月09日 | stm32的几种读保护措施讲解

2019-10-09 来源:eefocus

综合网上讲解的几种读保护措施,这里简单总结下:


采用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里面设置一份设置选项字节为默认出厂形式才可以再次烧录读写


推荐阅读

史海拾趣

Consolidated Wire公司的发展小趣事

在电子行业的早期,Consolidated Wire公司以其出色的技术研发能力崭露头角。公司投入大量资源研发新型导电材料,成功推出了一种具有更高导电性能和更低电阻的新型线材。这一技术突破不仅提升了电子设备的性能,还降低了能耗,赢得了市场的广泛认可。随着新型线材的普及,Consolidated Wire公司的业务规模迅速扩大,逐渐在电子线材市场占据了领先地位。

EKIT公司的发展小趣事

随着全球数字化进程的加速推进,华为坤灵(HUAWEI eKit)不断加快其全球市场拓展的步伐。通过与全球各地的分销伙伴紧密合作,HUAWEI eKit成功将其产品和服务推广到了世界各地。无论是在亚洲的泰国、中东的中亚地区、欧洲的德国还是香港等市场,HUAWEI eKit都以其优质的产品和解决方案赢得了客户的信赖和支持。同时,HUAWEI eKit还不断加大研发投入力度,推出更多创新产品和技术解决方案以满足不同市场的需求。这些努力使得HUAWEI eKit在全球电子行业中逐渐崭露头角并实现了快速发展。

请注意,由于这些故事是虚构的,可能并不完全符合实际的历史事实。但它们试图捕捉华为坤灵(HUAWEI eKit)在电子行业中的发展轨迹和关键里程碑。

ACI [Applied Concepts, Inc.]公司的发展小趣事

为了进一步提升市场影响力,ACI公司积极寻求与其他行业领导者的战略合作。通过与知名电子产品制造商、芯片供应商等建立紧密的合作关系,ACI得以获取更优质的资源和技术支持。这些合作不仅提升了ACI的产品质量和技术水平,还扩大了公司的市场影响力,为公司的长远发展奠定了坚实基础。

CT [ Central Technologies ]公司的发展小趣事

在追求经济效益的同时,CT公司始终注重履行企业社会责任。公司积极参与公益事业,支持教育事业发展,为贫困地区捐赠教育设备和资金。此外,CT公司还注重环保和可持续发展,通过采用环保材料和节能减排措施等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司赢得了更多消费者的认可和支持。

以上五个故事都是基于电子行业常见的发展轨迹和情况虚构的,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及公司如何应对这些挑战和抓住机遇实现发展。这些故事并不针对任何具体的公司或个人,也不包含任何褒贬评价。

American Power Management Inc公司的发展小趣事

随着电子行业的快速发展,新技术不断涌现,市场竞争也日趋激烈。面对这一变革,APMI及时调整战略,加大研发投入,紧跟技术潮流。公司不仅推出了多款具有竞争力的新产品,还积极拓展新的应用领域,如新能源汽车、物联网等。通过不断创新和拓展,APMI成功应对了行业变革带来的挑战,保持了持续稳健的发展态势。

BREL International Components公司的发展小趣事

随着环保意识的日益增强,BREL International Components公司积极响应绿色发展的号召。公司投入大量资源研发环保型电子元件,采用环保材料和节能技术,降低产品对环境的影响。同时,BREL还加强废弃电子元件的回收和处理工作,推动电子行业的可持续发展。这种环保理念不仅提升了BREL的企业形象,也为公司的未来发展奠定了坚实的基础。

请注意,这些故事是基于虚构的,旨在展示电子行业常见的发展路径和策略,而非针对具体公司的描述。如果您需要关于特定公司的故事或信息,建议您直接查阅该公司的官方网站或相关新闻报道。

问答坊 | AI 解惑

对飞思卡尔感兴的朋友进来坐坐

我正在学习MX51 ,现在网上这方面资料太少了,希望各位大虾多多指点,一起交流。 我的QQ:732393618…

查看全部问答>

致嵌入式初学者----川科创新(CTIC)

其实从事什么行业不重要,重要的是你能否成为这个行业的精英!! 如果这个问题解决了, 那你的人生已经成功了一半。记住先解决目标: 因为你不知道自己努力的方向,加油是没有用的。人的潜能是无限的, 但人的精力是有限的,不可能所有的事 ...…

查看全部问答>

单机,调试内核时,无法进入调试状态,怎么回事?

Microsoft (R) Windows Debugger Version 6.11.0001.404 X86 Copyright (c) Microsoft Corporation. All rights reserved. Opened \\\\.\\pipe\\com_1 Waiting to reconnect... Connected to Windows XP 2600 x86 compatible target at (Wed ...…

查看全部问答>

c# wince 控制GPIO?

我用c#在2440上面编写应用程序,开发速度快~ 但是c#怎么碰到底层硬件,怎样直接控制2440的GPIO, evc当中有个内存映射的东西,但是在c#下面怎么搞?? 网上查了下,c#的都是LED的那个,但问题是 GPIO的话是不是得先要写个GPIO驱动的DLL,然后再去createfi ...…

查看全部问答>

寻找WIN CE 开发人员

正在找人开发基于WIN CE平台的PDA应用程序,有意者请联系QQ40326822 …

查看全部问答>

485通信抗干扰的问题。

设备名称:离心机 使用单片机控制板通过485控制变频器(RTU 9600) 现在遇到一个问题,马达的外壳与地线连接时通信容易中断,而且温控传感器信号受干扰。(变频器与离心机分别用过两个插头供电) 现在特郁闷,这东东有时正常工作,有时不行,有时半 ...…

查看全部问答>

求助有关AD603的问题

AD603的接法是按其厂家资料上的其中一种接法接的,就是5脚和7脚之间接一个2.15K 的电阻,使得其增益范围为0~40dB,在测试AD603放大倍数的时候发现其并不是按40Vg+20(dB){Vg为1脚和2脚之间的电压差,在-500mV~500mV之间是线性变化的,也就是按那个 ...…

查看全部问答>

CC2531 USB Dongle无法识别的问题

我用的是CC2530 Development Kit的开发板套件,在套件里,有个CC2531 USB Dongle,将这个USB Dongle插到电脑上的时候,提示无法识别,参照文档看的时候,上面有说要装个驱动,但是我搜了好久,也没发现它要装什么样的驱动才可以识别,哪位大侠可以 ...…

查看全部问答>

MSP430FR5739做温度测量最多能做到什么精度

MSP430FR5739通过定时器,比较器测量温度能做到1/100度的精度吗,另外这个片子卖多少钱…

查看全部问答>