硬汉嵌入式论坛

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

[SPI/QSPI] STM32H743IITX的SPI+DMA读写W25Q64无法通信?

[复制链接]

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2021-7-20 17:20:52 | 显示全部楼层 |阅读模式
ca7b2269278d247093965447737a4c3.png 75aca8e65dc778c4cfcc77d609b07dd.png 1626772816(1).jpg
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
QQ
发表于 2021-7-20 18:27:28 | 显示全部楼层
你用的是W25Q64FV还是W25Q64JV?这两者有差异的,最主要是W25Q64FV支持QPI,而W25Q64JV不支持QPI。详细要看两者的规格书。

注意:QPI不是QSPI。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2021-7-21 08:53:20 | 显示全部楼层
可以参考我的SPI DMA方式驱动W25Q试试

注意不同厂家,不同系列;同一系列,不同后缀在使用SPI Flash指令上的区别。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-21 10:23:12 | 显示全部楼层
eric2013 发表于 2021-7-21 08:53
可以参考我的SPI DMA方式驱动W25Q试试

注意不同厂家,不同系列;同一系列,不同后缀在使用SPI Flash指令 ...

我就是参考您的程序写的,现在的问题是可以使用发送但是,发送与接收的MISO与MOSI用逻辑分析仪检测都是0x00,不管发什么都是0
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-21 10:24:48 | 显示全部楼层
pnhywyb 发表于 2021-7-20 18:27
你用的是W25Q64FV还是W25Q64JV?这两者有差异的,最主要是W25Q64FV支持QPI,而W25Q64JV不支持QPI。详细要看 ...

使用的是W25Q64JV,我也没有使用QPI,使用的是最基本的SPI,现在可以发送,但是不论发什么,检测到MOSI,与MISO都为0
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-21 10:26:28 | 显示全部楼层
1.png 2.png
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-21 13:03:51 | 显示全部楼层

你没看文档吧 90H需要发送 4个字节的指令,UID在后续的2个字节。
你这接收3个字节的ID是 9FH指令 后续接收3个字节。你赋值了但是没有开启接收啊
少写了一条接收语句。
STM32H743有D-Cache的吧,不会用的话最好先关闭。

SPI DMA 操作W25Q64 我在STM32V6开发板上实现过
http://www.armbbs.cn/forum.php?m ... light=STM32V6%D6%AE
给你参考下,里面有90H 和 9FH,看你90H 9FH搞错了,指令里面少了一条

213332ql78b43ujw9cbw94.jpg

回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-21 13:29:25 | 显示全部楼层

一看你就是没自己看代码 我下载了armfly的 9FH明明是4个数据周期,一个指令+3个数据
1626845272(1).jpg



回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-21 13:40:04 | 显示全部楼层
旮旯旭 发表于 2021-7-21 13:29
一看你就是没自己看代码 我下载了armfly的 9FH明明是4个数据周期,一个指令+3个数据

好的受教了,我再仔细研究下代码,我本意其实是想先随便发送一个字节用逻辑分析仪来检测下MOSI线上是否真的发出我写入的数据,发现无论写什么都是0,所以有了一点疑问,我自己再好好看看。谢谢回复
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-22 06:36:44 | 显示全部楼层
cnsl001 发表于 2021-7-21 13:40
好的受教了,我再仔细研究下代码,我本意其实是想先随便发送一个字节用逻辑分析仪来检测下MOSI线上是否真 ...

1.首先自己排查SPI的初始化和管脚配置是否正确。在不开DMA的情况下读写FLASH是否正常
2.代码里面还有一处你自己注意到没
1626906862(1).jpg
SPI DMA 发送需要等到发送完成,你的代码里面都没发送出去就把片选关闭了,
明显你没仔细看别人代码的实现
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-22 10:55:25 | 显示全部楼层
旮旯旭 发表于 2021-7-21 13:29
一看你就是没自己看代码 我下载了armfly的 9FH明明是4个数据周期,一个指令+3个数据

我参考您的代码后,关闭了D-cache,现在可以读取W25Q64的ID了,但是为何我调用HAL_SPI_TransmitReceive_DMA这个函数就不能正常读取呢,这个函数不是代表发送接收函数吗
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-22 14:49:33 | 显示全部楼层
cnsl001 发表于 2021-7-22 10:55
我参考您的代码后,关闭了D-cache,现在可以读取W25Q64的ID了,但是为何我调用HAL_SPI_TransmitReceive_DM ...

与其这么多废话不如把你工程放上来

HAL_SPI_TransmitReceive_DMA 只是开启DMA,上一条回复你的
硬汉的代码 wTransferState == TRANSFER_WAIT
这行代码看到了吗? 这个是等待DMA发送接收完成的标志
这个标志在callback里面置位,我的代码里面也同样有一个等待发送接收完成
你的说法大概率是你没加这个吧?
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2021-7-22 15:33:13 | 显示全部楼层
旮旯旭 发表于 2021-7-22 14:49
与其这么多废话不如把你工程放上来

HAL_SPI_TransmitReceive_DMA 只是开启DMA,上一条回复你的

哎 我也想上传!可惜是加密,上传上来就是乱码,我自己研究吧,那行标志已经加了,最早之前的代码我是没有的,感谢!现在已经完全可以写读了,我自己再研究一下自己的问题,再次感谢
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-22 15:58:00 | 显示全部楼层
cnsl001 发表于 2021-7-22 15:33
哎 我也想上传!可惜是加密,上传上来就是乱码,我自己研究吧,那行标志已经加了,最早之前的代码我是没 ...

最后回复一次 祝你好运,SPI有3个DMA函数 分别是发送DMA,接收DMA 以及 发送接收DMA
这3个DMA函数开启对应的回调函数也是不一样的
1626940347(1).jpg
所以用我的代码可以是我写全了,你如果用
HAL_SPI_TransmitReceive_DMA
对应的回调函数是HAL_SPI_TxRxCpltCallback

所以你的回调函数是不是搞错了?

如果这些都对了 还是不行,那我也分析不出来了

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 00:37 , Processed in 0.201840 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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