硬汉嵌入式论坛

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

[MDK] FLM算法文件使用JFLASH下载时提示错误

[复制链接]

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2025-1-10 17:48:43 | 显示全部楼层 |阅读模式
FLM算法文件是通过SPI烧写W25X的FLASH,代码里定义了使用了一个256byte的全局变量buffer,就会错误:



- Start of erasing chip
- CPU could not be halt

- ERROR: Cannot read register 15 (R15) while CPU
- ERROR: Cannot read register 16 (XPSR) while CPU
- ERROR: Cannot read register 13 (R13) while CPU
- ERROR: Timeout while preparing target,  core does not stop. (PC = 0x00000000,  XPSR = 0x00000000, SP = 0x00000000)!
- ERROR: Failed to initialize RAMCode
- End of erasing chip

如果我把这个变量去掉zi-data由300变成44,就不会有问题了,请问是什么原因呢?zi-data不能超过多少吗?
code=8160 ro-data=4320 rw-data=12 zi-data=300




评分

参与人数 1金币 +6 收起 理由
CoderXMan + 6 很给力!

查看全部评分

回复

使用道具 举报

3

主题

24

回帖

33

积分

新手上路

积分
33
发表于 2025-1-10 20:04:26 | 显示全部楼层
debug -> setting ->flash downloading -- RAM for Algorithm -- size
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-11 10:15:50 来自手机 | 显示全部楼层
abl 发表于 2025-1-10 20:04
debug -> setting ->flash downloading -- RAM for Algorithm -- size

这是MDK里的,JFLASH没有这个
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-13 20:13:20 | 显示全部楼层
FLM接口校验函数Verify,每次要读flash的一页数据进行比较,因此要定义一个buffer大小为256byte,使用JFLASH(6.84版本)下载,如果是全局变量就会出错,改成局部变量就没有问题。

如果用MDK进行下载,debug -> setting ->flash downloading -- RAM for Algorithm -- size配置为0x3000,buffer是全局变量不会有问题。

不明白这其中的原因,JFLASH和MDK是不是有不同的地方?有知道的小伙伴吗?
回复

使用道具 举报

2

主题

71

回帖

77

积分

初级会员

积分
77
发表于 2025-1-14 11:04:46 | 显示全部楼层
可以检查一下,当buffer为全局变量时,FLM程序本身占用哪块地址的RAM空间,与J-Flash工程里的Use target RAM有没有冲突。
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-14 14:00:35 | 显示全部楼层
本帖最后由 lindahnu 于 2025-1-14 14:02 编辑
qinfeng173 发表于 2025-1-14 11:04
可以检查一下,当buffer为全局变量时,FLM程序本身占用哪块地址的RAM空间,与J-Flash工程里的Use target RA ...

谢谢提醒,FLM程序编译出来的MAP文件发现结构体FlashDevice和这个全局变量spi_rx_buffer分配在同一个地址上

FlashDevice          0x00002034     Data        4256  flashdev.o(.constdata)
spi_rx_buffer        0x00002034     Data          256  flashprg.o(.bss)
spi_flashparams    0x00002134     Data            43  spi.o(.bss)

不明白为什么不偏移?
回复

使用道具 举报

2

主题

71

回帖

77

积分

初级会员

积分
77
发表于 2025-1-14 14:07:34 | 显示全部楼层
这个就要看FLM的工程设置和具体代码了......
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-14 15:34:23 | 显示全部楼层
qinfeng173 发表于 2025-1-14 14:07
这个就要看FLM的工程设置和具体代码了......

工程设置就是按照STM32的模板来的
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-14 16:46:47 | 显示全部楼层
拷贝STM32F4的FLM工程模板,定义一个全局变量spi_rx_buffer[256],MAP文件一样会出现结构体FlashDevice和这个全局变量spi_rx_buffer分配在同一个地址上,

后面加上变量定义的时候初始化一个值,发现spi_rx_buffer就不会和FlashDevice地址重叠了,使用JFLASH也能正常下载了。

uint8_t spi_rx_buffer[FLASH_PAGE_SIZE]={1};      
回复

使用道具 举报

2

主题

71

回帖

77

积分

初级会员

积分
77
发表于 2025-1-15 16:37:13 | 显示全部楼层
挺神奇的,Keil居然能把两个变量放在同一个地址上。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-1-16 07:35:48 | 显示全部楼层
lindahnu 发表于 2025-1-14 16:46
拷贝STM32F4的FLM工程模板,定义一个全局变量spi_rx_buffer[256],MAP文件一样会出现结构体FlashDevice和这 ...

有工程吗,方便的话分享下,看看怎么到重叠的,非常有价值的工程。
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-2-6 11:23:24 | 显示全部楼层
eric2013 发表于 2025-1-16 07:35
有工程吗,方便的话分享下,看看怎么到重叠的,非常有价值的工程。

公司电脑限制,我就是到pack包里拷贝了FLM工程,什么都没有改,就定义一个全局变量。
回复

使用道具 举报

3

主题

24

回帖

33

积分

新手上路

积分
33
发表于 2025-2-11 08:51:23 | 显示全部楼层
lindahnu 发表于 2025-2-6 11:23
公司电脑限制,我就是到pack包里拷贝了FLM工程,什么都没有改,就定义一个全局变量。

也可能是链接控制文件的问题。

我这有一个flm文件也挺神奇,在keil下工作正常, 使用jlink下载时只能擦除,编程和校验都是错的,搞两天了
回复

使用道具 举报

2

主题

74

回帖

80

积分

初级会员

积分
80
发表于 2025-2-11 11:01:03 | 显示全部楼层
非常好的实践,收藏了
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-2-14 13:48:13 | 显示全部楼层
abl 发表于 2025-2-11 08:51
也可能是链接控制文件的问题。

我这有一个flm文件也挺神奇,在keil下工作正常, 使用jlink下载时只能 ...

需要检查一下擦除是不是真的成功了,然后再看编程函数,可以回读比较一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 04:36 , Processed in 0.341027 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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