硬汉嵌入式论坛

 找回密码
 立即注册
搜索
查看: 13|回复: 0
收起左侧

[脱机烧录] H7-TOOL自制Flash读写保护算法系列,为复旦微FM33L0制作使能和解除算法,支持在线烧录和脱机烧录使用

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
124400
QQ
发表于 3 小时前 | 显示全部楼层 |阅读模式
说明:

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

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

还有沁恒RISC-V内核大部分型号的内部FLash和读写保护算法自制。

近期已经自制了STM32H7全系列,STM32U5全系列,STM32C0系列,国民技术N32G003,N32G031,  N32G43x,N32G030,N32G033,N32G401,复旦微FM33LE,FM33LG,FM33LC,  FM33FR系列,华大电子的CIU32F003,CIU32D655,CIU32L030系列,凌欧的LKS32MC03X,LKS32MC45x,LKS32MC05x,LKS32MC08x,武汉芯源CW32L010,CW32L011, CW32L012,芯Z20K14x, 领芯微LCM32F067,  灵动微MM32G0005,中微半导体BAT32G13x,兆易创新GD32L23x,GD32C113, GD32E23X,GD32G553提供Flash保护支持

本次增加复旦微FM33L0系列支持

实现效果:
从2.34版本开始将正式带此支持,支持解除和使能

23.png

实现代码和原理

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

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

[Lua] 纯文本查看 复制代码
-------------------------------------------------------
-- 文件名 : FM33L02x_128.lua
-- 版  本 : V1.0  2021-12-27
-- 说  明 :
-------------------------------------------------------

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

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

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

        AlgoFile_FLASH = "0:/H7-TOOL/Programmer/Device/FudanMicro/FM33L0XX/FLM/FM33L02XD_FLASH128.FLM"
        AlgoFile_OTP   = ""
        AlgoFile_OPT   = ""
        AlgoFile_QSPI  = ""

        FLASH_ADDRESS = 0x00000000                --CPU内部FLASH起始地址
        FLASH_SIZE = 128 * 1024

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

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

        MCU_ID = 0x0BB11477

        UID_ADDR = 0x1FFFFA10                           --UID地址(待核实)
        UID_BYTES = 12

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

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

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

        --OB使用字符串方式烧录(适合256字节以下)
        OB_ADDRESS =  "1FFFFA00 1FFFFA01 1FFFFA02 1FFFFA03 1FFFFA04 1FFFFA05 1FFFFA06 1FFFFA07 "
                                .."1FFFFA08 1FFFFA09 1FFFFA0A 1FFFFA0B 1FFFFA0C 1FFFFA0D 1FFFFA0E 1FFFFA0F"
        OB_SECURE_ON  = "55 33 AA CC FF FF 00 00 00 00 FF FF 00 00 FF FF"
        OB_SECURE_OFF = "AA 33 55 CC FF FF 00 00 00 00 FF FF 00 00 FF FF"

        --判断读保护和写保护的条件(WRP = Write protection)
        OB_WRP_ADDRESS   = {0x1FFFFA00, 0x1FFFFA01, 0x1FFFFA02, 0x1FFFFA03}         --内存地址
        OB_WRP_MASK           = {0xFF,0xFF,0xFF,0xFF}                --读出数据与此数相与
        OB_WRP_VALUE          = {0xAA,0x33,0x55,0xCC}                --相与后与此数比较,相等表示没有保护

        --额外的控制指令
        FLM_INIT_BEFOR_PROG = 1                --编程前需要重新执行一下Init
        FLM_INIT_BEFOR_VERIFY = 1        --FlM Verify前需要重新执行一下Init

        IGNORE_WRITE_OB_SECURE_OFF = 1 --解除读保护时全擦芯片,无需再写入OB缺省值
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 = 0 --写完OB后需要断电
        POWEROFF_TIME1 = 0           --写完OB延迟时间ms
        POWEROFF_TIME2 = 100           --断电时间ms
        POWEROFF_TIME3 = 20           --上电后等待时间ms

        RESET_DELAY = 20                                 --复位后的延迟ms

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

        AUTO_REMOVE_PROTECT = 1 --自动解除读保护(解除时先全片擦除,主存储区会被清空)

        RESET_MODE = 0                                        --复位模式 0:自动模式,  1:软件模式  2:硬件模式 3: UnderReset
        RESET_AFTER_PROG = 1    --编程结束后 0不复位  1复位 2断电重启 3断电

        NOTE_PC = "解除读保护需先全片擦除(芯片规定),主存储区会被清空"

        --供PC软件选择算法的列表(固件V2.01之后才支持)
        AlgoFile_List = {
                --算法文件, 起始地址, 大小
                "AlgoFile_FLASH", FLASH_ADDRESS, FLASH_SIZE,
        }

        --有如下行,将自动展示文件内容
        --VIEW_HELP_FILE = "reademe.txt"

end

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


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

234.png

相关帖子

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-10-22 06:30 , Processed in 0.285618 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表