硬汉嵌入式论坛

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

[SPI/QSPI] STM32H7的花式玩转SPI Flash章节也更新了,含MDK下载算法制作和STM32CubeProg下载算法制作

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
发表于 2020-11-16 05:34:37 | 显示全部楼层 |阅读模式
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

上次更新QSPI Flash的花式玩法:
例子:
V7-029_QSPI读写例程,四线DMA方式,读每秒48MB(V1.2).
V7-032_QSP Flash的FatFS文件系统+QSPI Flash虚拟U盘(带文件系统,读每秒24.6MB)
V7-059_QSPI读写例程,查询方式
V7-060_QSPI Flash的MDK下载算法制作
V7-061_QSPI Flash的STM32CubeProg下载算法制作
V7-062_QSPI Flash运行程序(Bootloader)
V7-063_QSPI Flash运行程序(用户APP)
V7-064_内部Flash和QSPI Flash都运行程序的混合方式,无需单独制作BOOT和APP(强烈推荐)

教程:
第78章 STM32H7的 QSPI总线基础知识和 HAL库 API
第79章 STM32H7 的 QSPI 总线应用之驱动W25QXX(支持查询和 MDMA)
第80章 STM32H7 的 QSPI 总线应用之 QSPIFlash 的 MDK 下载算法制作
第81章 STM32H7 的 QSPI 总线应用之 QSPI Flash 的 STM32CubeProg 下载算法制作
第82章 STM32H7 的 QSPI 总线应用之 QSPI Flash 执行程序(BOOT+APP 方式)
第83章 STM32H7 的内部 Flash 和 QSPI Flash都运行程序的混合方式(强烈推荐)

本次更新SPI Flash的花式玩法:
新增章节:
第84章 STM32H7 的 SPI 总线应用之 SPI Flash的 MDK 下载算法制作
第85章 STM32H7 的 SPI 总线应用之 SPI Flash的 STM32CubeProg 下载算法制作
第86章 STM32H7 的内部 Flash 和 SPI Flash 同时使用 MDK 一键下载  
  
新增例子:
V7-065_SPI Flash的MDK下载算法制作
V7-066_SPI Flash的STM32CubeProg下载算法制作
V7-067_MDK一键下载内部Flash和外部SPI Flash(下载的全字库文件支持12,16,24和32点阵)







回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-11-16 16:02:48 | 显示全部楼层
相关例程在哪里下载啊?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-16 16:36:33 | 显示全部楼层
bear_yh 发表于 2020-11-16 16:02
相关例程在哪里下载啊?谢谢

忘了帖子地址了,已经补到楼主位。
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2020-11-27 21:58:40 | 显示全部楼层
CubeProgrammer 算法制作不使用模板工程   使用CubeMX创建的工程是否要做什么改动   还是说就不支持自己创建的
当前编译报错如下


工程配置如下







回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-28 00:01:55 | 显示全部楼层
打洞者 发表于 2020-11-27 21:58
CubeProgrammer 算法制作不使用模板工程   使用CubeMX创建的工程是否要做什么改动   还是说就不支持自己创 ...

这个用什么创建都行,随意找个能用的例子即可,我就做的那个例子就没有使用模板,只是为了给大家传授官方的方式,做了一个官方的介绍。
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2020-11-28 23:46:10 | 显示全部楼层
eric2013 发表于 2020-11-28 00:01
这个用什么创建都行,随意找个能用的例子即可,我就做的那个例子就没有使用模板,只是为了给大家传授官方 ...

我回复的里面有图但怎么看不到   我创建的工程也参照了您的手册中的注意点  结果就是会报那个错误  请教下我是不是哪个关键点疏忽了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2020-11-29 09:43:29 | 显示全部楼层
打洞者 发表于 2020-11-28 23:46
我回复的里面有图但怎么看不到   我创建的工程也参照了您的手册中的注意点  结果就是会报那个错误  请教 ...

图片没有上传成功,需要重新上传。
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-11 22:34:59 | 显示全部楼层
@eric2013 请问下,我使用ambiq的Apollo3 plus的芯片按照你的教程进行MDK下载算法制作,针对QSPI Flash(mx25u51245G)这颗外部flash制作下载算法,调了2天都没调通。
1.mx25u51245G的驱动调通了后,只要将驱动里的初始化,写,读,擦除API挪到算法制作工程里就可以吧?
2.如果算法制作的工程有bug,你是怎么调试的呢?
3.我看了你将字库文件下载到外部flash的例子,那个字库文件是1个C文件,我想问下,如果我下载1个bin文件也按照那种方式好像不行,请问bin文件你是怎么下载的呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-12 09:16:29 | 显示全部楼层
vector184 发表于 2021-8-11 22:34
@eric2013 请问下,我使用ambiq的Apollo3 plus的芯片按照你的教程进行MDK下载算法制作,针对QSPI Flash(mx2 ...

1. 对
2. 可以在你的算法里面加入打印等功能的。
3. 使用bin2c小软件,将bin文件转换成C数组。
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-12 22:46:07 | 显示全部楼层
谢谢eric2013,问题应该不大了,明天搞定它
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-13 08:33:24 | 显示全部楼层
vector184 发表于 2021-8-12 22:46
谢谢eric2013,问题应该不大了,明天搞定它

好的,有什么问题再交流。
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-15 21:45:44 | 显示全部楼层
Eric2013,我参照了你的文档,使用Ambiq的Apollo3 plus芯片,我调了一周MX25U51245G的算法制作了,算法里的初始化,读,写,擦除接口都是通的。但是通过j-flash就是烧录不了文件到MX25U51245G。文档中要注意的细节都注意到了。读,写,擦除都不行。我想问下,这种算法制作是不是还有一些其他啥的规则:
1. MDK我使用的版本是V5.32.0
2.j-link的版本使用的是v6.84a
3.芯片使用的是Ambiq的Apollo3 plus芯片
4.外部flash使用的是MX25U51245G
你的外部flash的算法制作文档里说,代码要求要使用位置无关码,意思是不要使用外部中断,DMA中断等,是么?
我贴一下我的一些重要代码片段,有空请帮我看看,给我看看哪里可能出错了,我自己也在继续调试,调好了,我会在论坛和大家一起分享,谢谢了。

算法制作init接口

算法制作init接口

算法制作unit,擦除flash接口

算法制作unit,擦除flash接口

算法制作擦除块和写数据接口

算法制作擦除块和写数据接口

算法制作校验接口

算法制作校验接口

外部flash驱动全局变量

外部flash驱动全局变量

外部flash与ambiq的apollo3 plus芯片的接口

外部flash与ambiq的apollo3 plus芯片的接口

j-flash导入算法制作的文件编辑

j-flash导入算法制作的文件编辑

使用j-flash擦除外部flash或烧录文件报的错

使用j-flash擦除外部flash或烧录文件报的错

FlashDevice

FlashDevice
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-16 01:46:25 | 显示全部楼层
vector184 发表于 2021-8-15 21:45
Eric2013,我参照了你的文档,使用Ambiq的Apollo3 plus芯片,我调了一周MX25U51245G的算法制作了,算法里的 ...

现在的情况是MDK使用这个算法正常,而J-Flash不正常吗
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-16 22:44:37 | 显示全部楼层
eric2013 发表于 2021-8-16 01:46
现在的情况是MDK使用这个算法正常,而J-Flash不正常吗

昨天是MDK使用制作的外部flash算法和J-Flash都不正常,今天我在Init里添加了串口打印日志和马达振动,晚上发现在我同事的电脑上,使用J-flash能正常擦除(他电脑上安装的v6.6C版本的J-link,我使用的是V6.80今天在我自己的电脑上一直不行,FlashPrg.c文件里的Init函数都没运行,我就奇了怪了,明天在安装下v6.6C调试下),但是写和读好像还有点问题,顺便问下,我的外部FLASH(MX25U51245G)是64MB,如上图9中所示的设置,FlashDevice 这个结构体中倒数第2个参数扇区大小设置为4KB(MX25U51245G芯片手册实际就是一个扇区为4KB),FlashOS.h中FlashDevice这个结构体中的sectors成员显示最大值为512(SECTOR_NUM宏),64MB的MX25U51245G,每个扇区为4KB,总共有8192个sectors,FlashDevice 结构体中的sectors要改大么?还是FlashDevice 结构体成员中扇区值要改大么? 谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-17 08:07:10 | 显示全部楼层
vector184 发表于 2021-8-16 22:44
昨天是MDK使用制作的外部flash算法和J-Flash都不正常,今天我在Init里添加了串口打印日志和马达振动,晚 ...

那个是条目选项个数。不是限制你的SECTORS个数用的

回复

使用道具 举报

609

主题

3050

回帖

4897

积分

至尊会员

积分
4897
发表于 2021-8-17 08:51:26 | 显示全部楼层
vector184 发表于 2021-8-16 22:44
昨天是MDK使用制作的外部flash算法和J-Flash都不正常,今天我在Init里添加了串口打印日志和马达振动,晚 ...

貌似你的 地址不对吧, 你的貌似是 0xc0000000 这个不是 sdram 地址吗 ? spi  的地址不应该是 0x90000000 吗 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-17 09:04:38 | 显示全部楼层
hpdell 发表于 2021-8-17 08:51
貌似你的 地址不对吧, 你的貌似是 0xc0000000 这个不是 sdram 地址吗 ? spi  的地址不应该是 0x9000000 ...

他这个是标准SPI,随意一个地址就可以。

另外他用的不是STM32
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-17 22:50:37 | 显示全部楼层
@eric2013 今天又调试了一天,我在Init,UnInit,EraseChip,EraseSector,ProgramPage里添加了打印函数,使用J-flash擦除芯片可以成功,有依次运行我算法里的Init,EraseChip,UnInit函数,都是成功的,如下图0所示。但是运行Program不行,都没有运行我算法里的ProgramPage函数。好奇怪呀。如下图1所示,使用MDK的方式下载一个数组文件到外部flash也不行,如下图2所示。请问有遇到这种情况么,各种配置和修改都尝试了1天。

擦除芯片成功

擦除芯片成功

J-flash下载失败

J-flash下载失败

MDK下载方式失败

MDK下载方式失败
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-17 23:00:13 | 显示全部楼层
这个ambiq的芯片供电是1.8V的,J-flash会不会对这个芯片支持不好,真搞不懂是不是还有什么其他规则,现在擦除芯片都成功了,没理由写数据不成功呀。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-18 08:54:19 | 显示全部楼层
vector184 发表于 2021-8-17 23:00
这个ambiq的芯片供电是1.8V的,J-flash会不会对这个芯片支持不好,真搞不懂是不是还有什么其他规则,现在擦 ...

这个现象正常,我之前实现的时候,各种奇葩问题差不多都遇到过。

你的算法是采用MDK设计的,建议你优先在MDK上测试好,再倒腾K-Flash
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-19 23:18:13 | 显示全部楼层
@eric2013,MDK可以烧录了,前些天一直在J-flash上捣鼓,今天上午用MDK试了一下可以了,我就在3个地方改了下, MDK中算法的RAM空间改成了63KB,外部flash的起始地址改为0xA000000(因为Ambiq的数据手册上这个地址开始可用于外部设备),貌似应该没影响,然后就改了。明天抽空再确认下原因,还有就是杜邦线之前老长了,现在用短一点的。但是J-flash还是不行:
1.发现J-flash写数据时,Init里的clk是0. MDK写数据时Init里的clk是48000000HZ(这是正常的)。问题可能就出在这里,为什么J-flash写数据时Init接收到的clk参数是0呢?J-flash里传给算法接口Init的clk参数来自哪里的设置呢? 用J-flash写数据到外部flash时,我已将Ambiq芯片里的固件全部擦除后再写的。
2.再问一下,MDK里如果我只想烧写文件到外部flash,不想和程序一起烧写时写文件,怎么办呢?我只想单独写文件到外部flash,因为要更新LVGL所需的字体文件和资源文件到外部flash.
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-8-20 18:44:35 | 显示全部楼层
@Eric2013  J-flash对于MDK编译生成的flash算法是不是支持不好,想尝试使用segger集成开发环境编译生成下算法试一下。看了J-flash的官方手册说下载数据到外部flash要注册serial码。我用了一个别人用segger编写的flash算法可以使用不需要注册码。我现在将算法在MDK里可以使用,可以将数组C文件下载到外部flash,我试了可以单独下数据到外部flash在MDK中,只要将主芯片(ambiq)的算法移除。现在J-flash中可以擦除整片或整个sector,就是不能下载数据。无解呀
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-21 09:12:20 | 显示全部楼层
vector184 发表于 2021-8-19 23:18
@eric2013,MDK可以烧录了,前些天一直在J-flash上捣鼓,今天上午用MDK试了一下可以了,我就在3个地方改了 ...

1、init参数不用管,直接自己控制。
2、独立烧写即可。这个随意。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2021-8-21 09:13:49 | 显示全部楼层
vector184 发表于 2021-8-20 18:44
@Eric2013  J-flash对于MDK编译生成的flash算法是不是支持不好,想尝试使用segger集成开发环境编译生成下算 ...

我做的这个就可以啊,你前几天不是还回复了。

J-Flash中添加MDK制作的QSPI Flash下载算法方法
http://www.armbbs.cn/forum.php?m ... 1089&fromuid=58
(出处: 硬汉嵌入式论坛)


回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-11-27 13:35:35 | 显示全部楼层
@eric2013,参考V7 制作w25q256 QSPI的烧写算法的方法,我做的算法可以Program,但是不能擦除,执行正片擦和分块擦都很快,一闪而过,驱动验证过了擦、写都没问题,你有没有遇到过这种情况?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-11-27 13:37:27 | 显示全部楼层
eric2013 发表于 2021-8-12 09:16
1. 对
2. 可以在你的算法里面加入打印等功能的。
3. 使用bin2c小软件,将bin文件转换成C数组。

算法中加打印指的是加串口打印嘛?有没有加了打印的例子可以参考呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2023-11-27 15:24:41 | 显示全部楼层
智驾Maker 发表于 2023-11-27 13:37
算法中加打印指的是加串口打印嘛?有没有加了打印的例子可以参考呢?

原始的例子,加入串口初始化后,收发直接使用寄存器方式,不要用中断或者DMA方式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 06:06 , Processed in 0.476640 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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