硬汉嵌入式论坛

 找回密码
 立即注册
查看: 213|回复: 2
收起左侧

[AI工具] 这几月AI发展迅猛,今天的表现又惊艳到了

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123453
QQ
发表于 昨天 12:51 | 显示全部楼层 |阅读模式
这次有点牛了,因为我没有给AI喂数据了,是它自己找到的。

以前这种问题,怎么也得搞一天

【问题由来】

S32K311的1M容量仅前256K可以正常擦除烧写,而后面的空间无法正常擦除。测试S32K312没有这个问题

【AI交互】

问题:帮我查下S32K311的1M容量仅前256K可以正常擦除烧写,而后面的空间无法正常擦除。测试S32K312没有这个问题
回复:核心就是 S32K311 的 1MB 被拆成两个 512KB Block,每个 Block 又按 256K 边界分两段、各有独立的锁寄存器。你目前只解锁了 Block 0 的前 256K(SSPELOCK[0]),剩下 3/4 都没解。把 4 组锁寄存器全清零即可。S32K312 因为 Block 0 就是完整 1MB,配置例程自然覆盖到位,所以不触发此问题

问题:帮我使用H7-TOOL的pg_write32和pg_read32实现解锁
回复:
[Lua] 纯文本查看 复制代码
-- S32K311 Flash 全解锁脚本
-- 使用 H7-TOOL pg_write32 / pg_read32

local PFLASH_BASE = 0x40268000

-- 寄存器地址
local SPELOCK0   = PFLASH_BASE + 0x340  -- 0x40268340
local SPELOCK1   = PFLASH_BASE + 0x344  -- 0x40268344
local SSPELOCK0  = PFLASH_BASE + 0x35C  -- 0x4026835C
local SSPELOCK1  = PFLASH_BASE + 0x360  -- 0x40268360

-- 复位后延时,等 HSE/SBAF 完成初始化
-- (SWD 方式无法轮询 PRTN0_CORE2_STAT,用延时替代即可)
delayms(30)

-- 1) 读取当前锁定状态(可选,确认问题用)
print("=== 当前锁状态 ===")
print(string.format("SSPELOCK[0] = 0x%08X", pg_read32(SSPELOCK0)))
print(string.format("SPELOCK[0]  = 0x%08X", pg_read32(SPELOCK0)))
print(string.format("SSPELOCK[1] = 0x%08X", pg_read32(SSPELOCK1)))
print(string.format("SPELOCK[1]  = 0x%08X", pg_read32(SPELOCK1)))

-- 2) 解锁 Block 0
local val

-- Block 0 前 256K(4 个 super sector,bits 0-3)
val = pg_read32(SSPELOCK0)
pg_write32(SSPELOCK0, val & (~0x0F))

-- Block 0 后 256K(32 个 sector,bits 0-31,全部解锁)
val = pg_read32(SPELOCK0)
pg_write32(SPELOCK0, val & (~0xFFFFFFFF))

-- 3) 解锁 Block 1
-- Block 1 前 256K
val = pg_read32(SSPELOCK1)
pg_write32(SSPELOCK1, val & (~0x0F))

-- Block 1 后 256K —— 注意避开 SBAF 区域!
-- SBAF: 0x004F4000-0x004FFFFF = SPELOCK[1] bits 26-31
-- 只解锁 bits 0-25,保留 SBAF 位不动
val = pg_read32(SPELOCK1)
pg_write32(SPELOCK1, val & 0xFC000000)  -- 等价于 &= ~0x03FFFFFF

-- 4) 验证解锁结果
print("=== 解锁后锁状态 ===")
local ss0 = pg_read32(SSPELOCK0)
local sp0 = pg_read32(SPELOCK0)
local ss1 = pg_read32(SSPELOCK1)
local sp1 = pg_read32(SPELOCK1)
print(string.format("SSPELOCK[0] = 0x%08X", ss0))
print(string.format("SPELOCK[0]  = 0x%08X", sp0))
print(string.format("SSPELOCK[1] = 0x%08X", ss1))
print(string.format("SPELOCK[1]  = 0x%08X", sp1))

if (ss0 == 0 and sp0 == 0 and ss1 == 0) then
    print("Block 0 解锁成功")
else
    print("Block 0 解锁异常,请检查")
end

if (sp1 & 0x03FFFFFF) == 0 then
    print("Block 1 非 SBAF 区域解锁成功")
else
    print("Block 1 解锁异常,请检查")
end


实际添加到TOOL里面,测试正常了,现在的AI有点太强了,竟然一次成功

123.png

124.png

回复

使用道具 举报

6

主题

363

回帖

381

积分

高级会员

积分
381
发表于 昨天 17:57 | 显示全部楼层
用的什么AI呢?楼主
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123453
QQ
 楼主| 发表于 昨天 19:42 | 显示全部楼层
soyshell 发表于 2026-7-13 17:57
用的什么AI呢?楼主

deepseek ,这种需要联网的基本都交给deepseek做了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-14 09:03 , Processed in 0.821561 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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