硬汉嵌入式论坛

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

[其它] QSPI_FLASH能不能同时用作文件系统和跑代码

[复制链接]

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
发表于 2022-3-2 10:12:51 | 显示全部楼层 |阅读模式
有没有办法将QSPI分为两个区域,一个区域专门跑代码,一个区域作为文件系统
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-2 10:47:23 | 显示全部楼层
不行,一旦设置为内存映射模式后,就不能执行写操作了。除非你的FATFS仅做读操作用,也行。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-3-2 15:15:06 | 显示全部楼层
这个可以实现,擦写QSPI flash的执行代码不能放置在被操作的QSPI flash上,可以参考RT1050的实现,擦写代码放置在ITCM中
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-2 16:28:55 | 显示全部楼层
neptunekk 发表于 2022-3-2 15:15
这个可以实现,擦写QSPI flash的执行代码不能放置在被操作的QSPI flash上,可以参考RT1050的实现,擦写代码 ...

这种属于特殊玩法了,跳转过去后,要重新配置QSPI为正常擦写模式,擦写弄完了恢复内存映射模式。
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
发表于 2022-3-2 16:45:55 | 显示全部楼层
eric2013 发表于 2022-3-2 16:28
这种属于特殊玩法了,跳转过去后,要重新配置QSPI为正常擦写模式,擦写弄完了恢复内存映射模式。

外部flash程序升级就是这种操作了
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-3 10:09:00 | 显示全部楼层
neptunekk 发表于 2022-3-2 15:15
这个可以实现,擦写QSPI flash的执行代码不能放置在被操作的QSPI flash上,可以参考RT1050的实现,擦写代码 ...

请问在哪里可以看相关的代码或例程
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-4 00:55:00 | 显示全部楼层
linminghui 发表于 2022-3-3 10:09
请问在哪里可以看相关的代码或例程

参考这个帖子的方案就行,你把擦写时间放在ITCM里面刷。

【STM32H743实验例程】实验11:程序在ITCM执行,中断向量表和所有变量全部放在DTCM,方法很简单--原创
https://www.armbbs.cn/forum.php?mod=viewthread&tid=86207
回复

使用道具 举报

24

主题

121

回帖

193

积分

初级会员

积分
193
发表于 2022-3-5 08:39:48 | 显示全部楼层
RT1052确实可以这么玩。但有点约束条件:
1-官方提供的写操作代码需要先关闭全局中断,写完再开启;
2-flash写操作代码(涉及两个文件)需要预先放在内部RAM。
3-因为flash写操作会比较耗时,所以最好不要频繁去写文件。

实测:通过U盘实时读取JPG文件,转存到外部flash。8MB的flash分为两块,前2MB放代码,后6MB做文件系统。
理论上这种方法应该是支持代码升级的,指定代码文件存储首地址即可。但没实际测试过。
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-7 15:52:08 | 显示全部楼层
还是有些不太懂.现在是我在内部flash上划分了两片区域,前面部分为BOOT,而APP一部分放在内部,一部分放在qspiflsh中,但是我同时还想用qspi跑文件系统.qspiflash可以直接分区?
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-7 16:03:53 | 显示全部楼层
用的是USBX+FileX做文件系统
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-8 10:05:53 | 显示全部楼层
linminghui 发表于 2022-3-7 15:52
还是有些不太懂.现在是我在内部flash上划分了两片区域,前面部分为BOOT,而APP一部分放在内部,一部分放在qspi ...

不用分区,分别占一部分即可。
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-8 10:24:33 | 显示全部楼层
eric2013 发表于 2022-3-8 10:05
不用分区,分别占一部分即可。

我想问,外部flash怎么设置部分跑代码,部分文件系统?
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-8 10:45:42 | 显示全部楼层
我可以直接把qspi擦写的相关函数放在内部flash,不用放在ram中?
毕竟我要操作的只是外部flash,现在是怎么设定我在操作filex文件系统的时候不会操作到要跑的代码区,怎么设定filex的动作区域
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-9 03:39:49 | 显示全部楼层
linminghui 发表于 2022-3-8 10:24
我想问,外部flash怎么设置部分跑代码,部分文件系统?

直接设置分块就行了,比如前一半安排文件系统,后一半Flash。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-9 03:40:55 | 显示全部楼层
linminghui 发表于 2022-3-8 10:45
我可以直接把qspi擦写的相关函数放在内部flash,不用放在ram中?
毕竟我要操作的只是外部flash,现在是怎么设 ...

定义管理的大小范围就行了。貌似你想多了,你直接写代码操作下就知道了。
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-9 09:50:50 | 显示全部楼层
eric2013 发表于 2022-3-9 03:39
直接设置分块就行了,比如前一半安排文件系统,后一半Flash。

该怎么设置分块?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2022-3-9 11:21:57 | 显示全部楼层

你自己手动定义就行了。
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-9 11:29:34 | 显示全部楼层
eric2013 发表于 2022-3-9 11:21
你自己手动定义就行了。

有例程么?不太懂啊
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-9 14:21:38 | 显示全部楼层
但是在使用FileX的文件系统时,格式化虽然可以只格式化部分,但是必须要把flash全擦除了
回复

使用道具 举报

3

主题

336

回帖

345

积分

高级会员

积分
345
发表于 2022-3-9 15:46:06 | 显示全部楼层
最好别这么用,会有很多限制的。不是很了解这种机制,会遇到很多坑的。
这个用法跟ESP32是一摸一样的。
回复

使用道具 举报

3

主题

336

回帖

345

积分

高级会员

积分
345
发表于 2022-3-9 15:53:35 | 显示全部楼层
举个例子:
当QSPI切换到直接模式时,就得关闭全局中断(因为中断向量和中断代码很可能会执行到QSPI-Flash里的代码);
由于全局中断关闭,而Flash擦除又非常耗时,所以这段时间里会面临UART接收溢出、Timer中断丢失等诸多具体应用相关的困难。
当完成Flash擦除和编程后,切换回内存映射模式以执行代码,然后开启中断;这时候又要无效cache,影响性能。
回复

使用道具 举报

2

主题

75

回帖

81

积分

初级会员

积分
81
发表于 2022-3-9 22:13:37 | 显示全部楼层
QSPI代码没加密,做产品不太好吧。软加密费心思
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-3-10 10:55:03 | 显示全部楼层
glory 发表于 2022-3-9 15:53
举个例子:
当QSPI切换到直接模式时,就得关闭全局中断(因为中断向量和中断代码很可能会执行到QSPI-Flash ...

切换回内存映射后为什么要无效cache?不太懂,求教
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 02:05 , Processed in 0.329018 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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