OpenEdv-开源电子网

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

QSPI读写W25Q256和W25Q128以及W25Q64有什么区别?

[复制链接]

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2012-11-20
在线时间
26 小时
发表于 2018-9-4 10:40:35 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 ssmart 于 2018-9-4 16:27 编辑

用QSPI实验程序,换成Q128后有修改相关参数,实验主体程序如下:                while(1)
                {
                        key=KEY_Scan(0);
                        if(key==KEY1_PRES)//KEY1按下,写入W25Q128
                        {
                                LCD_Fill(0,320,800,160,BLACK);//清除半屏   
                                 LCD_DispStr(30,320,"Start Write QSPI....");
                                W25QXX_Write((u8*)TEXT_Buffer,32*1024,SIZE);                //从倒数第100个地址处开始,写入SIZE长度的数据
                                LCD_DispStr(30,320,"QSPI Write Finished!");        //提示传送完成
                        }
                        if(key==KEY2_PRES)//KEY0按下,读取字符串并显示
                        {
                                 LCD_DispStr(30,320,"Start Read QSPI.... ");
                                W25QXX_Read(datatemp,32*1024,SIZE);                                        //从倒数第100个地址处开始,读出SIZE个字节
                                LCD_DispStr(30,320,"The Data Readed Is:   ");        //提示传送完成
                                LCD_DispStr(30,360,datatemp);                                        //显示读到的字符串
                        }
                }

实验现象是:
32*1024地址那里,原来是FLASH_SIZE-100,从倒数第100个地址处开始,读出SIZE个字节,这样读出来的都是0xff
改成其他地址也可能是乱码,多次修改这个地方的地址,发现地址必须是block起始地址,例如0,32K,64K,96K等block起始地址。
W25QXX_Write   W25QXX_Read函数没有修改,用的原子的,请问这可能是哪儿的问题?

W25Q128FV初始化的时候读取的id是正确的EF17,
但是W25Q64FV竟然不能在QPI模式下读ID,读到的都是0,只能在SPI模式下读到正确的ID=EF16

请问去别在那儿?

最佳答案

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

不是指令错了,我知道原因了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2012-11-20
在线时间
26 小时
 楼主| 发表于 2018-9-4 10:40:36 | 显示全部楼层
不是指令错了,我知道原因了。
回复

使用道具 举报

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2012-11-20
在线时间
26 小时
 楼主| 发表于 2018-9-4 10:41:33 | 显示全部楼层
本帖最后由 ssmart 于 2018-9-4 16:28 编辑

        QSPI_Init();                                        //初始化QSPI
        W25QXX_Qspi_Enable();                        //使能QSPI模式
        W25QXX_TYPE=W25QXX_ReadID();        //读取FLASH ID.
        printf("ID:%x\r\n",W25QXX_TYPE);


W25Q64这里要吧ReadID放到QSPI_Enable前面才能正确读取。。。
回复

使用道具 举报

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2012-11-20
在线时间
26 小时
 楼主| 发表于 2018-9-4 16:29:14 | 显示全部楼层
人工置顶一下~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-9-5 02:19:57 | 显示全部楼层
用错指令了吧,去看看数据手册,会有写这些指令的
回复

使用道具 举报

9

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
416
金钱
416
注册时间
2018-6-6
在线时间
126 小时
发表于 2018-9-11 11:11:57 | 显示全部楼层
楼主,我发现我的也是,请问后来怎么解决的呢
回复

使用道具 举报

16

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2012-11-20
在线时间
26 小时
 楼主| 发表于 2018-9-27 14:47:39 | 显示全部楼层
WadeWww 发表于 2018-9-11 11:11
楼主,我发现我的也是,请问后来怎么解决的呢

原因是Q128以上的是4地址模式,否则Q256不能访问后128M
你用Q128以下的不要开启4地址模式
使用3地址ok
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-7-25
在线时间
15 小时
发表于 2019-8-1 17:53:32 | 显示全部楼层
本帖最后由 HZZH 于 2019-8-1 17:55 编辑

楼主能不能分享以下,替换成25Q64的程序文件,十分感谢。QQ:1048407633
回复

使用道具 举报

37

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-7-3
在线时间
87 小时
发表于 2020-9-6 16:41:25 | 显示全部楼层
ssmart 发表于 2018-9-4 10:41
QSPI_Init();                                        //初始化QSPI
        W25QXX_Qspi_Enable();                        //使能QSPI模式
        W25QXX_TYPE=W25QXX_ReadID ...

正解。。。。
回复

使用道具 举报

37

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-7-3
在线时间
87 小时
发表于 2020-9-6 17:05:36 | 显示全部楼层
ssmart 发表于 2018-9-27 14:47
原因是Q128以上的是4地址模式,否则Q256不能访问后128M
你用Q128以下的不要开启4地址模式
使用3地址ok
...

正解。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 11:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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