此文章介绍华芯微特MCU加密操作,在这里我们以SWM190为例给大家简单介绍一下MCU的加密功能。 我们程序加密的目的是防止芯片中的程序被他人读出使用,现主要介绍的加密方法有: 1. 读 保 护 2. S W D 封 锁 以上加密方法通过在用户程序中将0x1C偏移地址初始化为指定关键字,即可实现以下指定级别的加密。
程序下载后再次上电,芯片将处于指定加密级别的状态。
SWM190 # 加密操作函数配置 # 以SWM190为例,我们打开工程文件中的startup_SWM190.s文件,找到__Vectors,以其为0x00地址,找到0x1c地址处,此处默认值为0,默认FLASH读正常。 正常读写具体配置函数如下图所示: __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD MEM_CONFIG DCD SVC_Handler ; SVCall Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler
SWD读取加密时,将0x1c处写0x43211234,编译程序并下载,重新上电后芯片处于SWD读加密状态,无法访问FLASH,但可以读取RAM中的数据,可通过擦除FALSH并复位解除SWD读锁定。 具体操作如下: __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0x43211234 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD MEM_CONFIG DCD SVC_Handler ; SVCall Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler
SWD封锁加密时,将0x1c处写0xABCD1234,编译程序并下载,重新上电后无法通过仿真器访问芯片,不能执行读写擦除操作。 此时SWD端口切换为通用IO。 只能通过ISP进行单向访问。具体操作如下: __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0xABCD1234 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD MEM_CONFIG DCD SVC_Handler ; SVCall Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler
我们需要将ISP引脚(B0)接高,当芯片重新上电后检测到B0引脚持续1ms以上的高电平后,将会进入ISP(在应用编程)模式。 通用ISP程序使用串口进行通信,默认为UART0,引脚为A0(RX),A1(TX),硬件连接完成后打开我司提供的上位机软件,选择SWM190芯片型号,可执行擦除或下载操作来更新程序以解除加密。
|