基于海思soc的智能产品开发(mcu读保护的设置)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

对于市场上的产品,除了电路之外,软件保护也是非常重要的一个环节。要是自己辛辛苦苦写的软件,被竞争对手轻易地读取出来,那样造成的损失就太大了。所以不光是soc上面的程序要做好保护,对于mcu上面的程序也要做好保护。

一般来说,soc涉及到soc、ddr、emmc,copy的成本比较高。但是mcu不一样,mcu的电路通常都不太复杂,因此对于mcu内部的程序一定要注意好版权保护。这个时候一般有几种办法解决。

1、直接采用芯片公司的读保护代码

考虑到程序被改写的情况,一般的mcu厂家都会提供读保护的代码,这份代码去和各个厂家或者经销商咨询即可。基本原理就是通过判断flash某一个地址的数据有没有被改写,来添加相关的内容。如果没有被改写,那么就进入读保护的状态。如果已经被改写了,那么默认当前已经是读保护的状态了。

复制代码
void FLASH_MainFlash_ReadProtection_Sample(void)
{
    uint16_t RDP = *((volatile uint16_t *)(0x1FFFF800));

    printf("\r\nTest %s", __FUNCTION__);

    /* Main flash block read protection */
    if (RDP == 0x5AA5)
    {
        printf("\r\nFLASH not read protected, perform protection actions...");

        FLASH_Unlock();
        FLASH_EraseOptionBytes();
        FLASH_ProgramOptionHalfWord(0x1FFFF800, 0x807F);
        FLASH_Lock();

        PLATFORM_DelayMS(100);

        NVIC_SystemReset();
    }
    else
    {
        printf("\r\nFlash read protected!!!");
    }

    while (1)
    {
        PLATFORM_LED_Toggle(LED1);
        PLATFORM_DelayMS(100);
    }
}

采用了读保护之后,也是可以通过st-link utility工具解除读保护,只不过这个时候程序就被擦除了,也能达到保护固件的效果。

2、复用芯片的swclk和swdio

这个时候如果不希望swclk和swdio被使用,那么可以把指定的端口映射成其他的功能。同样经过这一步骤之后,swclk和swdio一般也就没有办法使用了。所以从另外一个角度说,尽量不要使用swclk和swdio这两个pin去做其他的事情。

3、编写校验码

如果对上面的两种方法还不是很放心,那么可以通过使用uid的方法,生成唯一的校验码。这样退一万步说,有人通过jtag、jlink拿到了镜像,也不可以在其他设备上面运行起来,这也是保护自己的一种方法。

4、怎么退出读保护

有的时候,我们希望能够退出读保护,这个时候就会留一些后门,让当前的镜像退出读保护的状态。这些后门,包括但不限于按键、串口、网络、boot和app分开等等。当然,对于这些后门,一定要缩小范围,不然被竞争对手知道了,就比较麻烦了。

5、sop8读保护下的程序开发

有些mcu的pin脚比较少,特别是swclk和swdio会和其他的pin复用。因此建议,开发的时候可以选用pin脚比较多的mcu进行开发。等到开发没有什么问题的时候,最后烧录到sop8上面,不然很多时候,我们会发现烧录只能烧录一次,会比较麻烦。

此外sop上面的资源比较少,想要做成bootloader+app的形式也比较麻烦,因此使用的时候一定要非常小心。不然芯片被频繁的吹下来、焊接上去,也是一件很无奈的事情。

6、没有一种加密是一劳永逸的

实际开发中,我们所做的只是尽量提高破解的时间成本,但事实上没有一种方法是一劳永逸的。所以我们要尽可能隔一段时间改进一下加密方法,这样才能最大程度保护自己的程序没有被人 copy掉。

相关推荐
可待电子单片机设计定制(论文)4 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫6 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi7 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li9 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)12 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
march_birds13 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式13 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角0101000114 小时前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
昊虹AI笔记15 小时前
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
stm32·单片机·嵌入式硬件
王光环15 小时前
单片机使用printf,不用微库
单片机·嵌入式硬件