OpenEdv-开源电子网

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

SPI中关于扇区的地址疑问,数据手册好像也没有相关的操作。。。。

[复制链接]

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
发表于 2014-3-26 22:16:48 | 显示全部楼层 |阅读模式
//擦除一个扇区
//Dst_Addr:扇区地址 0~511 for w25x16
//擦除一个山区的最少时间:150ms
void SPI_Flash_Erase_Sector(u32 Dst_Addr)   
{   
    Dst_Addr*=4096;
    SPI_FLASH_Write_Enable();                  //SET WEL  
    SPI_Flash_Wait_Busy();   
    SPI_FLASH_CS=0;                            //使能器件   
    SPI2_ReadWriteByte(W25X_SectorErase);      //发送扇区擦除指令 
    SPI2_ReadWriteByte((u8)((Dst_Addr)>>16));  //发送24bit地址    
    SPI2_ReadWriteByte((u8)((Dst_Addr)>>8));   
    SPI2_ReadWriteByte((u8)Dst_Addr);  
    SPI_FLASH_CS=1;                            //取消片选          
    SPI_Flash_Wait_Busy();     //等待擦除完成

不明白上面代码的红色部分,为什么扇区的地址是0-511的??如何理解,或者有什么资料可以加强对flash的理解的。。谢谢、、、
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-3-26 22:33:24 | 显示全部楼层
每次擦除大小是4KB,所以出现了4096
Dst_Addr:需要擦除的块编号,0~511是根据你的FLASH的大小定的。
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-26 23:53:20 | 显示全部楼层
回复【2楼】jiaozhu:
---------------------------------
0~511 for w25x16 ,这里的理解是:w25q64的块是0-127,w25q128的块是0-255,w25q256的块是0-511,是这样的吗???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-27 00:13:24 | 显示全部楼层
回复【3楼】STM32初学菜鸟:
---------------------------------
一个扇区4K字节。
然后多少个扇区,自己去计算。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-3-27 08:06:10 | 显示全部楼层
回复【3楼】STM32初学菜鸟:
---------------------------------
找一个FLASH芯片手册仔细研究就知道了,上面说的很清楚
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-27 11:15:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
W25Q64:一共是8M字节=8*1024*1024=8388608(Byte),分为128块(64K),每一块有分为16个扇区(4K),所以扇区的个数是:128*16=2048(个),那么上面函数的参数Dst_Addr的范围就是0-2047,假如要擦除第1000个的扇区,那么这个扇区的字节起始就是1000*4096=4096000,因此把4096000先发送最高8位,次高8位,再到最低8位,然后W25Q64就从4096000开始往下擦除4K大小的数据空间,计算地址的时候是使用字节来计算的,是怎样理解的吗?原子哥。。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-27 11:28:54 | 显示全部楼层
楼主都不看数据手册的么
不是有这么一个图么



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

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-27 12:24:19 | 显示全部楼层
回复【7楼】Badu_Space:
---------------------------------
看啊,主要没有明白怎么编程,就像我回复原子哥的一样,一共2048个扇区,我想主要是抓住扇区和字节及地址之间的计算就ok了、、、麻烦了。。。谢了。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-27 13:06:18 | 显示全部楼层
回复【8楼】STM32初学菜鸟:
---------------------------------
看他地址分配就出来啦,不同的位代表不同的扇区、块等信息
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2019-3-30 16:38:12 | 显示全部楼层
STM32初学菜鸟 发表于 2014-3-27 11:15
回复【4楼】正点原子:
---------------------------------
W25Q64:一共是8M字节=8*1024*1024=8388608(Byte ...

学习了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 17:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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