H7-TOOL自制Flash讀寫保護算法系列,為華大電子CIU32F003制作使能和解除算法,支持在線燒錄和脫機燒錄使用2025-06-20

說明:

很多IC廠家僅發布了內部Flash算法文件,并沒有提供讀寫保護算法文件,也就是選項字節算法文件,需要我們制作。

實際上當前已經發布的TOOL版本,已經自制很多了,比如已經支持的兆易創新大部分型號,新唐的大部分型號等。但是依然有些廠家還沒自制,所以陸續開始為這些廠家提供讀寫保護支持。

近期已經自制了STM32H7全系列,N32G003,N32G031,??N32G423x, STM32U5全系列和凌歐LKS32MC03X,復旦微FM33LE系列,凌歐的LKS32MC45x,LKS32MC05x,LKS32MC08x提供Flash保護支持

這次為華大電子的CIU32F003系列提供支持
?

實現效果:

從2.30版本開始將正式帶此支持,支持解除和使能。


實現代碼和原理

通過H7-TOOL的LUA小程序就可以方便的實現保護解除和使能,不需要自制算法文件。

對應的代碼如下,這個不需要用戶去管,已經封裝到TOOL里面了,這里給大家分享是方便大家了解:

--寄存器
local FLASH_FLASHKEY         = 0x40022008
local FLASH_OPTKEY      = 0x4002200C
local FLASH_CTRL        = 0x40022014
local FLASH_FLASH_STS   = 0x40022010
local FLASH_OB_Address  = 0x1FFF0000--寄存器bit
local FLASH_MODE_IDLE       = 0x00000000
local FLASH_MODE_PROGRAM    = 0x00000002
local FLASH_MODE_PAGE_ERASE = 0x00000004local FLASH_FLAG_EOP      =  0x01000000 
local FLASH_FLAG_BSY      =  0x00010000   
local FLASH_FLAG_OPTVERR  =  0x00008000                       
local FLASH_FLAG_WRPERR   =  0x00000010                          --常量值
local UNLOCK_KEY1                = 0xE57A1A85
local UNLOCK_KEY2                 = 0x7C6E8391local OB_UNLOCK_KEY1         = 0x6A894D7B
local OB_UNLOCK_KEY2         = 0x7C311F5A--判斷data數組標志,全部為0則退出
function CheckFlagQuit0(data, mask)local ilocal retif (MULTI_MODE > 0) thenret = 0for i = 1, MULTI_MODE, 1 doret = ret | (data[i] & mask)endelseret = data[1] & maskendreturn ret
end--等待超時,(解除讀保護時會執行全面擦除)        
function FLASH_WaitForLastOpt(void)local ilocal reg = {}for i = 1, 5000, 1 doreg = {pg_read32(FLASH_FLASH_STS)}if (CheckFlagQuit0(reg, FLASH_FLAG_BSY) == 0) thenbreakenddelayms(1)end
end--芯片專有的解除保護函數
function MCU_RemoveProtect(void)MCU_ProgOptionBytes(OB_SECURE_OFF)
end--沒有FLM的MCU,用腳本實現編程OB。 返回 "OK" or "error"
function MCU_ProgOptionBytes(ob)local err = "OK"local ob_8local ob1local ilocal ob_16--local usertmpprint("MCU_ProgOptionBytes()")pg_reset(100)pg_write32(FLASH_FLASHKEY, UNLOCK_KEY1)pg_write32(FLASH_FLASHKEY, UNLOCK_KEY2)pg_write32(FLASH_OPTKEY, OB_UNLOCK_KEY1)pg_write32(FLASH_OPTKEY, OB_UNLOCK_KEY2)-- std_flash_set_operate_mode(mode);pg_write32(FLASH_CTRL, FLASH_MODE_PAGE_ERASE)-- *(uint32_t *)address = 0xFFFFFFFF;pg_write32(FLASH_OB_Address, 0xFFFFFFFF)FLASH_WaitForLastOpt()pg_write32(FLASH_FLASH_STS, (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR))--  std_flash_set_operate_mode(FLASH_MODE_IDLE);pg_write32(FLASH_CTRL, FLASH_MODE_IDLE)-- must added by 2013 FLASH_WaitForLastOpt()ob_8 = hex_to_bin(ob)        --hex字符串轉為二進制數組--print_hex(ob_8)for i = 0, 2, 1 doob_16 = string.byte(ob_8, i*2 + 1) + (string.byte(ob_8, i*2 + 2)<<8)+ (((~string.byte(ob_8, i*2 + 1)) << 16) & 0xFF0000)+ (((~string.byte(ob_8, i*2 + 2)) << 24) & 0xFF000000)        -- std_flash_set_operate_mode(FLASH_MODE_PROGRAM);pg_write32(FLASH_CTRL, FLASH_MODE_PROGRAM)--ob_8 = hex_to_bin(ob)        --hex字符串轉為二進制數組--ob1 = string.byte(ob_8, 1) + (((string.byte(ob_8, 2)) << 16) & 0xFF0000)pg_write32(FLASH_OB_Address+i*4, ob_16)--print_hex(ob_16)--delayms(5)FLASH_WaitForLastOpt()-- std_flash_clear_flag(FLASH_FLAG_ALL_ERR | FLASH_SR_EOP);pg_write32(FLASH_FLASH_STS, (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR))--std_flash_set_operate_mode(FLASH_MODE_IDLE);pg_write32(FLASH_CTRL, FLASH_MODE_IDLE)--FLASH_WaitForLastOpt()enddelayms(500)pg_reset(100)return err
end

通過TOOL的寄存器檢測功能可以了解各種寄存器地址和狀態信息,大大方便算法文件自制:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

go channel用法

介紹 channel 在 Go 中是一種專門用來在 goroutine 之間傳遞數據的類型安全的管道。 你可以把它理解成&#xff1a; 多個 goroutine 之間的**“傳話筒”**&#xff0c;誰往通道里塞東西&#xff0c;另一個 goroutine 就能接收到。 Go 語言采用 CSP&#xff08;Communicatin…

openLayers切換基于高德、天地圖切換矢量、影像、地形圖層

1、需要先加載好地圖&#xff0c;具體點此鏈接 openLayers添加天地圖WMTS、XYZ瓦片服務圖層、高德地圖XYZ瓦片服務圖層-CSDN博客文章瀏覽閱讀31次。本文介紹了基于OpenLayers的地圖交互功能實現&#xff0c;主要包括以下內容&#xff1a; 地圖初始化&#xff1a;支持天地圖XYZ…

springMVC-15 異常處理

異常處理-基本介紹 基本介紹 1.Spring MVC通過HandlerExceptionResolver處理程序的異常&#xff0c;包括Handler映射、數據綁定以及目標方法執行時發生的異常。 2.主要處理Handler中用ExceptionHandler注解定義的方法。 3.ExceptionHandlerMethodResolver內部若找不到Excepti…

視頻匯聚EasyCVR平臺v3.7.2發布:新增全局搜索、播放器默認解碼方式等4大功能

EasyCVR視頻匯聚平臺帶著全新的v3.7.2版本重磅登場&#xff01;此次升級&#xff0c;絕非簡單的功能堆砌&#xff0c;而是從用戶體驗、操作效率以及系統性能等多維度進行的深度優化與革新&#xff0c;旨在為大家帶來更加強大、穩定且高效的視頻監控管理體驗。 一、全局功能搜索…

三、kubectl使用詳解

三、kubectl使用詳解 文章目錄 三、kubectl使用詳解1、常用基礎命令1.1 Kubectl命令格式1.2 查詢一個資源1.3 創建一個資源1.4 修改一個資源1.5 刪除一個資源1.6 其他 2、K8s隔離機制Namespace&#xff08;命名空間作用及使用&#xff09;2.1 什么是命名空間2.2 命名空間主要作…

JVM內存模型詳解

JVM內存模型詳解 Java虛擬機(JVM)內存模型是理解Java程序運行機制的核心&#xff0c;它定義了程序運行時數據的組織方式和訪問規則。與Java內存模型(JMM)關注并發不同&#xff0c;JVM內存模型主要描述運行時數據區的結構和功能。 一、JVM內存模型概述 JVM內存模型將運行時數…

《對話式 AI 白皮書》共創者招募

在 AI Agent 技術不斷演變的當下&#xff0c;共創一本不斷演變的對話式 AI 白皮書&#xff0c;共同探索人機對話的新紀元。無論你是開發者、技術專家、生態伙伴還是創業者&#xff0c;都期待你的加入。 項目地址&#xff1a;https://github.com/RTE-Dev/book_era_convoai/ 在…

Flux功能介紹,完整使用示例,與Mono對比

以下是關于Reactor框架中Flux與Mono的功能介紹、使用示例及對比分析&#xff1a; Flux功能介紹 核心定義 Flux是Reactor庫中的核心接口&#xff0c;表示一個異步的、包含零到多個元素的序列&#xff08;類似流式數據處理&#xff09;[3][4][7]。它可以處理無限長度的數據流&am…

Git使用基本指南

一、Git 基礎配置 首先需要配置用戶信息&#xff0c;讓 Git 知道你是誰&#xff1a; git config --global user.name "你的名字" git config --global user.email "你的郵箱example.com" 如果需要查看配置信息&#xff0c;可以使用&#xff1a; git co…

【入門】【例17.3】 內功逼毒

| 時間限制&#xff1a;C/C 1000MS&#xff0c;其他語言 2000MS 內存限制&#xff1a;C/C 64MB&#xff0c;其他語言 128MB 難度&#xff1a;中等 分數&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分數2難度) 出題人&#xff1a;root | 描述 黃蓉中了毒&#xff0c;在 t 時…

蘋果芯片macOS安裝版Homebrew(親測)

在Linux服務器上安裝一個軟件常用yum&#xff0c;apt、dnf命令&#xff0c;同樣macOS可以使用brew命令來安裝軟件。 brew會自動幫你下載、解壓、安裝和配置&#xff0c;更重要的是&#xff1a;它還會自動處理好軟件之間的依賴關系&#xff0c;它將所有軟件都安裝在獨立的統一目…

uniapp+vue3做小程序,獲取容器高度

小程序獲能用createSelectorQuery&#xff0c;如果是子組件&#xff0c;后面可以額外加一個參數in來指定獲取dom的范圍。小程序里面可以直接.in(this)&#xff0c;但是vue3沒有this了&#xff0c;那就只能通過getCurrentInstance去獲取當前實例代替this &#xff0c;注意這里需…

【網工】華為配置專題進階篇①

目錄 ■浮動路由和BFD配置 ▲浮動路由 基本配置示例 ▲BFD ▲驗證命令 ▲測試連通性 ■路由綜合實驗RIP OSPF BGP ■浮動路由和BFD配置 ▲浮動路由 浮動路由&#xff1a;設置preference 浮動路由是一種備份路由機制&#xff0c;當主路由失效時&#xff0c;浮動路由會…

DeepLegal AI:智能法律文檔審查與合規助手+MVP

1. 商業價值與市場機會 DeepLegal AI旨在革新法律行業中耗時且資源密集型的文檔審查和合規流程。該應用將利用DeepSeek先進的語言模型能力&#xff0c;為律師事務所、企業法務部門和合規團隊提供一個高效、準確且經濟的解決方案。 市場機會&#xff1a; 法律科技市場正經歷爆…

使用 Rust 編寫簡單計算器

在編程語言的世界中&#xff0c;Rust 以其安全性和高性能而聞名。今天&#xff0c;我們將通過一個簡單的項目來探索 Rust 的魅力 —— 編寫一個簡單的命令行計算器。這個計算器將支持基本的算術運算&#xff08;加、減、乘、除&#xff09;&#xff0c;并且可以通過用戶輸入進行…

清華大學:《AI賦能教育 :高考志愿填報工具使用指南》下載

志愿填報的認知革命已經到來 “分數出來了&#xff0c;但不知道能上什么學校……” “喜歡這個專業&#xff0c;但不知道就業前景怎么樣&#xff1f;” “到底是選熱門專業還是選興趣愛好&#xff1f;” 這些讓百萬家庭徹夜難眠的問題&#xff0c;你是否正在經歷&#xff1f; …

【科技公司的管理】

如何打造高效、人性化的目標驅動型公司&#xff1f;——OKR管理法績效薪酬體系全指南 你希望公司目標清晰、員工高效、多勞多得&#xff0c;同時避免馬斯克式的“冷血管理”&#xff0c;兼顧員工生活需求。以下是系統性解決方案&#xff0c;涵蓋目標設定&#xff08;OKR&#x…

小白成長之路--nginx基礎配置(一)

文章目錄 一、概述1.1 Nginx 特點1.2 Nginx 作用1.3Nginx工作原理 二、Nginx服務搭建2.1安裝2.2 目錄結構2.3 配置文件作用2.4 nginx,conf配置文件詳解2.5 核心命令2.6 Nginx信號三.Nginx3.1啟動 總結 一、概述 Nginx 是開源、高性能、高可靠的 Web服務器 和反向代理服務器&am…

從最基礎的float布局開始學前端

前端學習其實不難&#xff0c;我們先從float布局講起&#xff0c;寫一個最簡單的導航欄&#xff1a;Logo在左&#xff0c;導航鏈接在右。下面是示例代碼&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"…

12. TypeScript 高級類型

TypeScript 中的高級類型包括映射類型、條件類型、字面量類型和遞歸類型等強大結構。這些特性使開發者能夠表達類型之間更復雜的關系&#xff0c;從而處理邊緣情況&#xff0c;并定義更動態、更靈活的類型系統。 一、映射類型 TypeScript 映射類型&#xff08;Mapped Types&a…