OpenEdv-开源电子网

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

求助啊!SPI读取W25Q64问题

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2014-3-6
在线时间
0 小时
发表于 2014-4-14 12:32:40 | 显示全部楼层 |阅读模式
  CS=0;
  senddata(writeenable);
  CS=1;
  CS=0;
  senddata(0x20);
  senddata(0x20);
  senddata(0x00);
  senddata(0x00);
  CS=1;
  CS=0;
  senddata(writedisable);
  CS=1;

 u8 st=0;
  CS=0;
  senddata(0x03);
  senddata(0x20);
  senddata(0x00);
  senddata(0x00);



  st=senddata(0xff);
  CS=1;
  USART1->DR=st;

我是先把这段扇区擦除然后读取,问什么擦出了以后还是40h额
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-14 12:53:11 | 显示全部楼层
回复【楼主位】飏:
---------------------------------
你这操作有问题,没看到你等待芯片空闲的语句喔

我的擦除函数
void Flash_EraseSector(u32 Sectoradd,u8 ORD)
{
u8 ORD_temp;

if(ORD == 0x00)
{
Sectoradd *= 4096; //得到整个扇区的大小,4K
ORD_temp = W25Qxx_Erase_Sector4Kb;

if(ORD == 0x01)
{
Sectoradd *= 65536; //得到整个块的大小,32K/64K
ORD_temp = W25Qxx_Erase_Block64Kb;
}

Flash_WriteEnable(); //允许芯片写操作
Flash_Wait_Busy(); //芯片处于空闲状态下才执行擦除
SPI_FLASH_CS = 0; //选中Flash
Flash_SPI_WriteRead_Data(ORD_temp); //发送擦除指令
Flash_SPI_WriteRead_Data((u8)(Sectoradd >> 16)); //发送24bits地址
Flash_SPI_WriteRead_Data((u8)(Sectoradd >> 8));
Flash_SPI_WriteRead_Data((u8)Sectoradd);
SPI_FLASH_CS = 1; //释放芯片
Flash_Wait_Busy(); //等待扇区擦除完成
}
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2014-4-14 13:38:26 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
开始我也这么以为,但用jtag单步调试也是这种结果
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-14 14:18:19 | 显示全部楼层
可以参考W25Q64数据手册的第35页内容



现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2014-4-14 23:55:17 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
多谢大神啦 找到原因啦 因为状态寄存器设置成0xfc啦 所以写操作写不进数据
顺便问一下 写使能后执行一条写指令之后是不是就自动写失能了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-15 08:31:46 | 显示全部楼层
回复【5楼】飏:
---------------------------------
忘了怎么着了,具体可以研究一下数据手册关于这个状态寄存器等等,看下怎么个变化法的就知道了

上次搞好这个玩意的驱动就没看过了,呵呵,现在用着没问题,所以。。。懒得研究了,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-11 23:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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