OpenEdv-开源电子网

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

W25Q64 W25Q64 SPI SPI 问题

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-3-10 16:45:29 | 显示全部楼层 |阅读模式
//读取芯片ID
//返回值如下:   
//0XEF13,表示芯片型号为W25Q80  
//0XEF14,表示芯片型号为W25Q16    
//0XEF15,表示芯片型号为W25Q32  
//0XEF16,表示芯片型号为W25Q64    
u16 SPI_Flash_ReadID(void)
{
u16 Temp = 0;  
SPI_FLASH_CS=0;    
SPI2_ReadWriteByte(0x90);//发送读取ID命令    
SPI2_ReadWriteByte(0x00);    
SPI2_ReadWriteByte(0x00);    
SPI2_ReadWriteByte(0x00);   
Temp|=SPI2_ReadWriteByte(0xFF)<<8;  
Temp|=SPI2_ReadWriteByte(0xFF);  
SPI_FLASH_CS=1;    
return Temp;
}       
读ID这段代码中
问题1:发送0x90是读取id命令,这个我明白,但是SPI2_ReadWriteByte(0x00);  这句重复三次是什么作用,指令表里没有0x00
问题2;Temp|=SPI2_ReadWriteByte(0xFF)<<8;  
Temp|=SPI2_ReadWriteByte(0xFF);     这两句代码什么意思,,什么作用?
问题3;开始时SPI_FLASH_CS=0;是把FLASH设置成从设备吧?    但结尾SPI_FLASH_CS=1;又拉高变为主设备???没太懂

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-10 17:09:11 | 显示全部楼层



CS是片选信号,低电平有效


博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-10 17:36:12 | 显示全部楼层
1、这个问题请看数据手册上的时序图



2、因为设置了SPI数据宽度为8位的,当然如果你设置成16位数据宽度的话就一次性接收完成了
3、SPI_FLASH_CS=0;这个是选中flash芯片
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-10 18:41:54 | 显示全部楼层
回复【3楼】Badu_Space:

1、这个问题请看数据手册上的时序图
2、因为设置了SPI数据宽度为8位的,当然如果你设置成16位数据宽度的话就一次性接收完成了
3、SPI_FLASH_CS=0;这个是选中flash芯片

---------------------------------
第三个问题,,=0选中我知道   但结尾SPI_FLASH_CS=1  是为什么
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-10 19:31:52 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
我明白了点
还有一点疑问

SPI2_ReadWriteByte(0x90);//发送读取ID命令     
SPI2_ReadWriteByte(0x00);      
SPI2_ReadWriteByte(0x00);      
SPI2_ReadWriteByte(0x00);       
Temp|=SPI2_ReadWriteByte(0xFF)<<8;  
Temp|=SPI2_ReadWriteByte(0xFF);  
SPI_FLASH_CS=1;     
return Temp;

这几句先是向  发送缓冲区  发送0x09的id命令,然后发送三组0x00然后又向高低位分别发FF是什么作用?    Temp|=SPI2_ReadWriteByte(0xFF)    把FFFF写入发送缓冲区有什么用
另外你给我那个图   ID数据  的部分上  cs线上的小口是什么意思(就是数字31上边的小口,31下边clk上也有小口)小口代表什么
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-3-10 19:56:07 | 显示全部楼层
回复【4楼】傻子:

回复【3楼】Badu_Space:
1、这个问题请看数据手册上的时序图
2、因为设置了SPI数据宽度为8位的,当然如果你设置成16位数据宽度的话就一次性接收完成了
3、SPI_FLASH_CS=0;这个是选中flash芯片

---------------------------------
第三个问题,,=0选中我知道   但结尾SPI_FLASH_CS=1  是为什么

---------------------------------
CS  片选信号    百度一下吧。。。。
学无止境
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-3-10 19:57:06 | 显示全部楼层
回复【5楼】傻子:

回复【3楼】Badu_Space:
---------------------------------
我明白了点
还有一点疑问
SPI2_ReadWriteByte(0x90);//发送读取ID命令     
SPI2_ReadWriteByte(0x00);      
SPI2_ReadWriteByte(0x00);      
SPI2_ReadWriteByte(0x00);       
Temp|=SPI2_ReadWriteByte(0xFF)<<8;  
Temp|=SPI2_ReadWriteByte(0xFF);  
SPI_FLASH_CS=1;     
return Temp;
这几句先是向  发送缓冲区  发送0x09的id命令,然后发送三组0x00然后又向高低位分别发FF是什么作用?    Tem
......
---------------------------------
好好看看  SPI2_ReadWriteByte(0xFF)  这个函数是干嘛用的吧
学无止境
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-3-4
在线时间
0 小时
发表于 2014-3-11 08:53:39 | 显示全部楼层
lz:我的w25q64怎么用windows7 无法格式化呀?选的是FAT(默认)格式;容量是6M;扇区也是默认大小。                                        
回复 支持 反对

使用道具 举报

23

主题

292

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2013-9-17
在线时间
17 小时
发表于 2014-3-11 14:28:25 | 显示全部楼层
回复【4楼】傻子:
---------------------------------
释放 SPI
闷鱼闷闷不乐吃焖鱼
回复 支持 反对

使用道具 举报

15

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-10-31
在线时间
4 小时
发表于 2014-12-19 11:05:38 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
w25Q64VB的外围电路和w25q16弄成一样的行吗?还有W25Q16的读写函数直接用到w25Q64(他们的时序相同)行吗,如果要改,改哪些东西啊
总有一天,要为自由而活
回复 支持 反对

使用道具 举报

15

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2014-10-31
在线时间
4 小时
发表于 2014-12-19 11:06:16 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
w25Q64VB的外围电路和w25q16弄成一样的行吗?还有W25Q16的读写函数直接用到w25Q64(他们的时序相同)行吗,如果要改,改哪些东西啊
总有一天,要为自由而活
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-12-19 12:38:36 | 显示全部楼层
回复【11楼】LIUYABO:
---------------------------------
华邦那几个都是通用的驱动
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
372
金钱
372
注册时间
2015-11-12
在线时间
83 小时
发表于 2016-6-30 21:56:38 | 显示全部楼层
SPI_FLASH_CS=0;是是能SPI设备SPI_FLASH_CS=1,是不选中SPI设备
回复 支持 反对

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-9-24 11:37:15 | 显示全部楼层
745021926 发表于 2014-3-10 17:09
CS是片选信号,低电平有效

请问度读ID过程为什么写OXFF就读出M7-M0和ID7-ID0
开始的时候 写0X90,在有两个dummy,再有0X00,然后就剩下的为什么要写0XFF??谢谢
回复 支持 反对

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-9-24 12:04:15 | 显示全部楼层
八度空间 发表于 2014-3-10 17:36
1、这个问题请看数据手册上的时序图

请问读取设备ID只需要最后的8位就够了吧 为什么还要读取MF的ID呢??
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2018-9-29 21:29:11 | 显示全部楼层
长昵称不被占用 发表于 2018-9-24 12:04
请问读取设备ID只需要最后的8位就够了吧 为什么还要读取MF的ID呢??

可以啊,看你用ID来干什么了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 07:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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