[N32G03x] H7-TOOL自制Flash读写保护算法系列,为国民技术N32G030制作使能和解除算法,支持在线

[复制链接]
50|0
Puchou 发表于 2025-11-6 13:08 | 显示全部楼层 |阅读模式
说明:

很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。

实际上当前已经发布的TOOL版本,已经自制很多了,比如已经支持的兆易创新大部分型号,新唐的大部分型号等。但是依然有些厂家还没自制,所以陆续开始为这些厂家提供读写保护支持。

近期已经自制了STM32H7全系列,STM32U5全系列,国民技术N32G003,N32G031,  N32G43x,复旦微FM33LE,FM33LG,FM33LC,  FM33FR系列,华大电子的CIU32F003,CIU32D655系列,凌欧的LKS32MC03X,LKS32MC45x,LKS32MC05x,LKS32MC08x,武汉芯源CW32L010,CW32L011, CW32L012提供Flash保护支持

这次为国民技术N32G030提供支持

实现效果:

从2.32版本开始将正式带此支持,支持解除和使能。

8360690c2d09af7a0.png

实现代码和原理

通过H7-TOOL的LUA小程序就可以方便的实现保护解除和使能,不需要自制算法文件。

对应的代码如下,这个不需要用户去管,已经封装到TOOL里面了,这里给大家分享是方便大家了解:

-------------------------------------------------------
-- 文件名 : N32G030_64.lua
-- 版  本 : V1.0  2022-08-26
-- 说  明 : 国民技术
-------------------------------------------------------

print("load \"N32G030_64.lua\" ok")

IncludeList = {
    "0:/H7-TOOL/Programmer/Device/Nationstech/Lib/N32G03x_Lib.lua"
}

function config_cpu(void)
    CHIP_TYPE = "SWD"       --指定器件接口类型: "SWD", "SWIM", "SPI", "I2C", "UART"

    AlgoFile_FLASH = "0:/H7-TOOL/Programmer/Device/Nationstech/FLM/N32G030x.FLM"
    AlgoFile_OTP   = ""
    AlgoFile_OPT   = ""
    AlgoFile_QSPI  = ""

    FLASH_ADDRESS = 0x08000000      --CPU内部FLASH起始地址
    FLASH_SIZE = 64 * 1024

    RAM_ADDRESS = 0x20000000        --CPU内部RAM起始地址

    --Flash算法文件加载内存地址和大小
    AlgoRamAddr = RAM_ADDRESS
    AlgoRamSize = 8 * 1024

    MCU_ID = 0x2BA01477

    UID_ADDR = 0x1FFFF7F0           --UID地址
    UID_BYTES = 12

    --缺省校验模式
    VERIFY_MODE = 0             -- 0:读回校验, 1:软件CRC32校验, 其他:扩展硬件CRC(需要单片机支持)

    ERASE_CHIP_TIME = 1000      --全片擦除时间ms(仅用于进度指示)

    OB_FILE_USED    = 0     --1表示使用文件方式烧录,0表示用字符串方式烧录,-1表示不支持OB区烧录  

    --0B 有9字节
    OB_ADDRESS     = "1FFFF600 FFFFFFFF 1FFFF602 FFFFFFFF 1FFFF604 FFFFFFFF 1FFFF606 FFFFFFFF 1FFFF608 FFFFFFFF 1FFFF60A FFFFFFFF 1FFFF60C FFFFFFFF 1FFFF60E FFFFFFFF"

    OB_SECURE_OFF  = "A5 FF FF FF FF FF FF FF"  --SECURE_ENABLE = 0时,编程完毕后写入该值
    OB_SECURE_ON   = "00 FF FF FF FF FF FF FF"  --SECURE_ENABLE = 1时,编程完毕后写入该值
    --L1 : 00 FF FF FF
    --L2 : CC 3C FF 00

    --判断读保护和写保护的条件(WRP = Write protection)
    OB_WRP_ADDRESS   = {0x1FFFF600}  --内存地址
    OB_WRP_MASK      = {0xFF}       --读出数据与此数相与
    OB_WRP_VALUE     = {0xA5}       --相与后与此数比较,相等表示没有保护
end

--用于PC软件, 设置缺省配置参数
function pc_default(void)
    TVCC_VOLT = 3.3         --定义CPU供电电压TVCC

    VERIFY_MODE = 0         --校验模式: 0:自动(FLM提供校验函数或读回) 1:读回  2:软件CRC32  3:STM32硬件CRC32

    REMOVE_RDP_POWEROFF = 1 --写完OB后需要断电
    POWEROFF_TIME1 = 0      --写完OB延迟时间ms
    POWEROFF_TIME2 = 100    --断电时间ms
    POWEROFF_TIME3 = 20     --上电后等待时间ms

    SWD_CLOCK_DELAY_0 = 0   --单路烧录时的时钟延迟
    SWD_CLOCK_DELAY_1 = 0   --多路烧录时的时钟延迟

    AUTO_REMOVE_PROTECT = 1 --自动解除读保护

    RESET_MODE = 2          --复位模式 0:自动模式,  1:软件模式  2:硬件模式 3: UnderReset

    NOTE_PC = "必须选硬件复位模式烧录, 接不接硬件复位引脚均可"

    --供PC软件选择算法的列表
    AlgoFile_List = {
        "AlgoFile_FLASH", FLASH_ADDRESS, FLASH_SIZE,
    }   
end

---------------------------结束-----------------------------------



通过TOOL的寄存器检测功能可以了解各种寄存器地址和状态信息,大大方便算法文件自制:


1690690c2cee76533.png
————————————————
版权声明:本文为CSDN博主「硬汉嵌入式」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Simon223/article/details/154013910

您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

300

帖子

0

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