[技术相关] 华芯微特MCU加密

[复制链接]
1096|13
 楼主| SynwitMCU 发表于 2022-12-27 14:22 | 显示全部楼层 |阅读模式
此文章介绍华芯微特MCU加密操作,在这里我们以SWM190为例给大家简单介绍一下MCU的加密功能。
我们程序加密的目的是防止芯片中的程序被他人读出使用,现主要介绍的加密方法有:
1. 读  保  护
2. S W D 封 锁
以上加密方法通过在用户程序中将0x1C偏移地址初始化为指定关键字,即可实现以下指定级别的加密。
X)JSM3L{Z8IAKM[)8Q]DJ)M.png

程序下载后再次上电,芯片将处于指定加密级别的状态。

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芯片型号,可执行擦除或下载操作来更新程序以解除加密。

lix1yr 发表于 2023-3-28 11:48 | 显示全部楼层
这种加密模式挺好,降低成本了,哈哈
g0d5xs 发表于 2023-3-28 12:50 | 显示全部楼层
其实用jlink的读保护也是可以的,针对一般**是有效的
ex7s4 发表于 2023-3-28 13:57 | 显示全部楼层
如果可以买个加密器吧,能好很多
小夏天的大西瓜 发表于 2023-3-28 13:58 | 显示全部楼层
SWD接口锁住就是SWD引脚被锁住了,根本原因是用户使用这个引脚做其它功能了
zhizia4f 发表于 2023-3-28 15:06 | 显示全部楼层
这种操作很强啊,可以手动配置一下了
y1n9an 发表于 2023-3-28 17:15 | 显示全部楼层
话说这种加密之后,还能仿真之类的了吗?
su1yirg 发表于 2023-3-28 18:23 | 显示全部楼层
我觉得还是用自己写的加密算法吧,通用,哈哈
b5z1giu 发表于 2023-3-29 07:06 | 显示全部楼层
我想知道,如果把SWD复用打开,变成复用普通IO,是不是就读不出固件了
suw12q 发表于 2023-3-29 08:32 | 显示全部楼层
这算是华芯微特专用的加密方式吗?
华芯微特FAE 发表于 2023-3-29 09:25 | 显示全部楼层
y1n9an 发表于 2023-3-28 17:15
话说这种加密之后,还能仿真之类的了吗?

二级加密只能擦,一级加密什么都做不了
华芯微特FAE 发表于 2023-3-29 09:26 | 显示全部楼层
b5z1giu 发表于 2023-3-29 07:06
我想知道,如果把SWD复用打开,变成复用普通IO,是不是就读不出固件了

是的
q1d0mnx 发表于 2023-3-29 10:21 | 显示全部楼层
级别3是不是就最高级别了啊
l1uyn9b 发表于 2023-3-29 13:05 | 显示全部楼层
读保护就行的,很有意义
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:广东华芯微特集成电路有限公司
简介:华芯微特是一家由留美归国资深技术团队创立的中国芯片设计公司,是国家高新技术企业。2014年进军MCU产业,专注于32位MCU研发设计,并针对细分市场提供参考解决方案。

30

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部