硬汉嵌入式论坛

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

[脱机烧录] H7-TOOL的SWD接口读取固件bin保存,SPI读取外置Flash,I2C读取EEPROM和离线固件读取方法,含1拖4和1拖16(2025-10-26)

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
发表于 2025-10-26 14:51:37 | 显示全部楼层 |阅读模式
读取固件用到的地方比较多,比如读取滚码是否正常烧录,读取SPI Flash,EEPROM数据等。

JLINK,STLINK等上位机工具都是支持的,我们TOOL同样也支持,而且还支持离线读取和1拖n方式读取,不需要上位机参与。同时还可以SPI接口读取外置SPI Flash和I2C接口读取EEPROM

【SWD接口读取】

注: 芯片如果设置了读保护是无法读取的,会返回error

1、不使用转接板的单路读取

(1)读取到LOG区展示

按照下面步骤依次操作,选择型号,执行LUA下载,设置读取起始地址,读取1页

1.png

(2)读取固件保存bin

按照下面步骤依次操作,选择型号,执行LUA下载,设置读取起始地址,读取bin文件大小,我们这里操作的芯片有256,直接整片读取出来保存

2.png

2、使用1拖4转接板读取

注:针对要操作的芯片,在不接目标板的情况下,操作上位机,提前下载一个bin文件,bin文本内容随意,这个文本本身我们用不到,上位机路径h7toolPC_release\EMMC\H7-TOOL\Programmer\User\TestBin里面很多BIN,目的是初始化1拖4配置信息。

(1)读取到LOG区展示

比如我这里接入了4路芯片,先右击这里选择1拖4接口板(1-4路)

2345.png

1234.png

(2)读取固件保存bin

同时保存4路为bin文件,当前没有做支持,仅支持保存1路为bin,可以是1拖4的任意路,通过右击这个“一键下载”按钮选择好指定通道

1234.png

机台这里选择 “0 - 继续烧录剩余通道 ”

2345.png

然后就可以读取了

23456.png

3、1拖16转接板读取

注:使用1拖16转接板读取,优先如下方式操作显示屏,然后按照1拖4的操作方法读取即可。

使用1拖16转接板,同样最多可以同时读取4路到log区,这里有效通道选择4路



但同时保存16路为bin文件,当前没有做支持,仅支持保证1路为bin,也就是第1路,这里选择1个通道



【SPI接口读取SPI Flash】

我们这里省事些,直接使用1拖4转接板操作,因为这种方式既可以读取裸片,也可以接读目标板板载

注意:
1、如果是读取板载芯片,注意目标板主控芯片不可以控制SPI Flash。
2、针对要操作的芯片,在不接目标板的情况下,操作上位机,提前下载一个bin文件,bin文本内容随意,这个文本本身我们用不到,上位机路径h7toolPC_release\EMMC\H7-TOOL\Programmer\User\TestBin里面很多BIN,目的是初始化1拖4配置信息。



(1)读取到LOG区展示

比如我这里接入了4路芯片,先右击这里选择1拖4接口板(1-4路)

1234.png

2345.png

(2)读取固件保存bin

同时保存4路为bin文件,当前没有做支持,仅支持保存1路为bin,可以是1拖4的任意路,通过右击这个“一键下载”按钮选择好指定通道

123.png

机台这里选择 “0 - 继续烧录剩余通道 ”

456.png

然后就可以读取了,比如我这里读取10KB

1234.png

【I2C接口EEPROM读取】

EEPROM读取仅做了单路,可以裸片读取,也可以读取目标板板载芯片

注意:如果读取目标板,目标板的主控芯片不可以控制EEPROM



(1)LOG区读取



(2)整个器件内容全部读取出来



【离线读取程序保存到eMMC】

通过LUA小程序可以方便实现,比如我们读取地址0x08000000, 读取32KB程序。

程序代码实现如下:每次读取的IKB,读取完成后存到eMMC的路径:0:/H7-TOOL/Lua/1.bin

[Lua] 纯文本查看 复制代码
local flashsize = 64 * 1024
local a
 
function printf(...)
   print(string.format(...))
end
 
a = flashsize // 1024 -- 每次读取1KB
 
pg_init()
 
for i=0,a-1,1 do
 
   ok,bytes = pg_read_mem(0x08000000 + i * 1024, 1024)
    if(ok == 1) then
       f_write("0:/H7-TOOL/Lua/1.bin", i * 1024,  bytes)
       printf("读取成功 = %d", i) 
    else
        break
        printf("读取失败 = %d", i)
    end
     
end
  
printf("操作完成")


在线测试验证:

2345.png

离线方式可以创建一个LUA文件存到eMMC里面,我们这里创建一个test.lua,存到eMMC磁盘如下路径:

1234.png

然后操作显示屏选择这个LUA文件执行即可:

2345.png

然后看eMMC磁盘,可以看到路径里面有个1.bin文件

23456.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119429
QQ
 楼主| 发表于 2025-10-27 01:10:07 | 显示全部楼层
2025-10-27
重新更新了下。
回复

使用道具 举报

2

主题

35

回帖

41

积分

新手上路

积分
41
发表于 2025-10-27 08:02:39 | 显示全部楼层
学习了,感谢。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 23:06 , Processed in 0.048646 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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