基于海思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掉。

相关推荐
倔强的胡萝卜34 分钟前
基于STM32F103C8T6的温度报警器设计
stm32·单片机·嵌入式硬件
缘来是你远去是我1 小时前
ZYNQ 系列芯片中断机制详解:类型、处理过程与中断处理函数
单片机·嵌入式硬件
LCG米3 小时前
STM32 定时器主从模式输出精确脉冲数实测:TRGO 触发链拆解、多发一脉冲根因与干净停止时序落地
stm32·单片机·嵌入式硬件·嵌入式
青梅味猪大肠3 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
ChaseVLSI3 小时前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
东莞市壹星自动化设备有限公司3 小时前
透明圆瓶内部特征怎样定位:折射追踪与近远相位分支
嵌入式硬件·自动化·需求分析·几何学·骨骼绑定
Dev_XH4 小时前
【成品设计】基于物联网的配电箱智能防护系统设计
stm32·单片机·嵌入式硬件·物联网
Dev_XH5 小时前
【成品设计】基于单片机的工厂设备能耗监控与优化系统
stm32·单片机·嵌入式硬件·物联网
不脱发的程序猿6 小时前
STM32制作单手鼠标键盘
stm32·嵌入式硬件·计算机外设·usb·qmk
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇 11
单片机·嵌入式硬件