OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6594|回复: 3

SPI_Flash读数据到自定义的数组缓存中,为什么需要两次循环写入缓存数组中才能正确的显示数据?

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2020-3-17
在线时间
39 小时
发表于 2021-2-15 13:36:07 | 显示全部楼层 |阅读模式
10金钱
用的W25Q32JV系列的SPI_Flash芯片,下面描述下遇到的问题:先贴出定义的缓存数组、Flash读数据和用LCD显示读取到的数据的代码:
读数据数组缓存问题07.jpg

读数据数组缓存问题03.jpg

读数据数组缓存问题02.jpg
然后是实验对比:
1.将其中一次循环赋值屏蔽后,运行代码和运行结果如下:
读数据数组缓存问题04.jpg
读数据数组缓存问题08.jpg
可以看到读取出来的数据都是255,也就是0xFF。

2.使用两次循环读取并存入到缓存数组中的代码和运行结果如下:
读数据数组缓存问题01.jpg
读数据数组缓存问题09.jpg
能够正确的读取出来保存到缓存数组中的数值。

我在这里纠结半天了,也没想出个所以然,有大佬帮我解答下为啥会出现这样的情况吗?

最佳答案

查看完整内容[请看2#楼]

重点检查你的Flash_R_data1函数。 应该是第一次启动读取时序有问题,比如读取时被其他中断打断了波形。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-2-15 13:36:08 | 显示全部楼层
重点检查你的Flash_R_data1函数。
应该是第一次启动读取时序有问题,比如读取时被其他中断打断了波形。
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2020-3-17
在线时间
39 小时
 楼主| 发表于 2021-2-17 10:17:20 | 显示全部楼层
c2007s 发表于 2021-2-15 20:05
重点检查你的Flash_R_data1函数。
应该是第一次启动读取时序有问题,比如读取时被其他中断打断了波形。

谢谢你的回复,问题找到了,不是读取函数的问题,是写函数里的问题。 读数据数组缓存问题10.jpg
看手册里面对于读数据03H指令里有这样一句描述“当芯片在执行编程、擦除、和读状态寄存器指令的周期内,读数据指令不管用”
猜测可能是造成之前描述的原因在Flash写失能前没有加等待忙标志位置0,加上等待函数后,问题解决,我以为循环赋值结束就已经编程结束了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-7-7
在线时间
4 小时
发表于 2021-6-1 11:10:10 | 显示全部楼层
我也遇到了这样的问题,是用网口接收数据如何做数据处理,但是用例程中的read函数读数据用printf串口输出的时候就出问题了
这是对数据进行重新赋值后的输出结果

这里定义的是datatest[8]和datatemp[8],长度和read函数中的DATAsize相同
但是输出的结果datatemp是FF FF FF FF FF FF FF FF 31 32 33 34 35 36 37 38 (这里应该是ASCII码值,前面是8个FF)
datatest是 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 31 32 33 34 35 36 37 38(16个FF)
请求前辈们帮忙解答一下
按照楼主的方法在read和write函数中加入W25QXX_Wait_Busy()函数来确定读写操作完成也没有解决
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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