硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6302|回复: 10
收起左侧

[有问必答] SPI  Flash请教

[复制链接]

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2015-1-5 11:13:52 | 显示全部楼层 |阅读模式
刚论坛里有人提到flash,想请教下版主spi  flash操作 的问题:
1.读的时候是否可以任意地址读数据?
2.写是否也是任意地址写?还是必须整块或者整个扇区写?与eeprom操作有啥不一样?
3.所有的spi flash  是否都可以采用例程的spi进行操作?
感谢版主无私奉献
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2015-1-5 11:19:54 | 显示全部楼层
写操作时时必须先擦除再写数据的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107872
QQ
发表于 2015-1-5 11:52:29 | 显示全部楼层

回 jcx0324 的帖子

jcx0324:写操作时时必须先擦除再写数据的吗? (2015-01-05 11:19)
SPI Flash操作稍麻烦一些,写之前一定要把上次擦除。
回复

使用道具 举报

338

主题

2051

回帖

3070

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3070
发表于 2015-1-5 11:57:23 | 显示全部楼层
1. 读取可以是任意地址。
2. 擦除必须是整块。比如W25Q64,最小的擦除块是4K字节。
3. 写入是整个扇区。比如W25Q64,最小的写入扇区是256个字节。

这个基本信息还是要多读读datasheet比较快。 datasheet的第一节有如下描述。
The W25Q64FV array is organized into 32,768 programmable pages of 256-bytes each. Up to 256 bytes can be programmed at a time. Pages can be erased in groups of 16 (4KB sector erase), groups of 128 (32KB block erase), groups of 256 (64KB block erase) or the entire chip (chip erase). The W25Q64FV has 2,048 erasable sectors and 128 erasable blocks respectively. The small 4KB sectors allow for greater flexibility in applications that require data and parameter storage. (See figure 2.)
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2015-1-5 12:37:39 | 显示全部楼层
从上面的翻译看,256应该是一页,4K是扇区大小,32KB估计是一块的大小,

如果要写一页的数据,就是说要先擦除整个扇区的数据,然后允许只写入一页数据,是这么理解吗
回复

使用道具 举报

338

主题

2051

回帖

3070

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3070
发表于 2015-1-5 13:30:59 | 显示全部楼层

回 jcx0324 的帖子

jcx0324:从上面的翻译看,256应该是一页,4K是扇区大小,32KB估计是一块的大小,

如果要写一页的数据,就是说要先擦除整个扇区的数据,然后允许只写入一页数据,是这么理解吗 (2015-01-05 12:37) 
对的!
擦除最大,写入中等,读取最小。
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2015-1-5 13:53:03 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:对的!
擦除最大,写入中等,读取最小。 (2015-01-05 13:30) 
非常感谢,[s:140]
回复

使用道具 举报

34

主题

111

回帖

213

积分

高级会员

程序小白

积分
213
QQ
发表于 2020-12-9 11:34:59 | 显示全部楼层
caicaptain2 发表于 2015-1-5 11:57
1. 读取可以是任意地址。
2. 擦除必须是整块。比如W25Q64,最小的擦除块是4K字节。
3. 写入是整个扇区。比 ...

新手,刚看到这里,有个疑问。 写入是整个扇区   擦除必须是整块。 但是写入前必须擦除 ,两者的大小不是不一致了吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107872
QQ
发表于 2020-12-9 15:00:44 | 显示全部楼层
清风徐来 发表于 2020-12-9 11:34
新手,刚看到这里,有个疑问。 写入是整个扇区   擦除必须是整块。 但是写入前必须擦除 ,两者的大小不是 ...

这种的么做4KB的缓冲处理,要不顺序依次写入。
回复

使用道具 举报

34

主题

111

回帖

213

积分

高级会员

程序小白

积分
213
QQ
发表于 2020-12-9 15:41:01 | 显示全部楼层
eric2013 发表于 2020-12-9 15:00
这种的么做4KB的缓冲处理,要不顺序依次写入。

嗯嗯,看到了; v6标准库中bsp_spi_flash.c中的API  uint8_t sf_WriteBuffer(uint8_t* _pBuf, uint32_t _uiWriteAddr, uint16_t _usWriteSize);    都实现,处理好了
回复

使用道具 举报

0

主题

125

回帖

125

积分

初级会员

积分
125
发表于 2020-12-9 16:26:10 | 显示全部楼层
清风徐来 发表于 2020-12-9 11:34
新手,刚看到这里,有个疑问。 写入是整个扇区   擦除必须是整块。 但是写入前必须擦除 ,两者的大小不是 ...

我明白你意思, 比如, 你擦除了4K,  这4K可没规定你什么时候写数据, 你可以现在写256 bytes, 再过半小时后再写另外256 bytes, 其余的4K-512, 留着明天写也可以, 只是每次必须写256 bytes.
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-17 08:35 , Processed in 0.184506 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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