刚开始学习STM32时,对SPI Flash的块、扇区的概念模糊不清,现在回头再看,感觉豁然开朗!
以华邦W25Q128为例,详解SPI Flash的特点,读写注意事项,和地址范围等。
以AT24C02 EPROM和W25Q128 SPI Flash为例。
AT24C02读写次数和存储时间
AT24C02读写次数和存储时间
W25Q128读写次数和存储时间
W25Q128读写次数和存储时间
以华邦的W25Q128为例,容量为128Mbits,注意这里的单位是bit,换算成字节(Byte),也就是:
128Mbits/8 = 16MB = 16*1024KB = 16384 KB = 16,777,216B
,所以很容易计算出整个存储空间的地址范围:0x000000~0xFFFFFF
SPI Flash和EPROM的很大的一个不同就是多了块、扇区、页的概念。
W25Q128的整个存储空间被分成了256个块(Block),每个块包含16个扇区(Sector),每个扇区又包括16个页。
所以,如果按照块来计算,W25Q128包括256
个块。
如果按照扇区来计算,W25Q128包括256*16=4096
个扇区。
如果按照页来计算的话,W25Q128包括4096*16=65536
个页。
每个块的大小是:16384KB/256 = 64KB
每个扇区的大小是:64KB/16 = 4KB
每个页的大小是:4KB/16 = 256B
但是实际上,我们在进行读写操作时,都是区分块和扇区,不区分页的。包括在官方的Datasheet中,并没有重点提及页的地址范围。
地址范围
从存储容量来看,我们可以轻松的计算出W25Q128的整个存储空间的地址范围:0x000000~0xFFFFFF
,也就是地址最大是24位。根据块的大小是64KB,扇区的大小是4KB,我们可以计算出每个块和扇区的地址范围:
块0的地址:`0x000000~0x00FFFF`
块1的地址:`0x010000~0x01FFFF`
.....
块255的地址:`0xFF0000~0xFFFFFF`
对于每个块,以块0为例:
块0扇区0的地址:`0x000000~0x000FFF`
块0扇区1的地址:`0x001000~0x001FFF`
....
块0扇区15的地址:`0x00F000~0x00FFF`
不知道你是否发现了,地址的高8位(23-16位)表示块的位置,第15-12位为扇区的位置。
例如,块10的第7个扇区的地址范围:0x0A 7 000 ~ 0x0A 7 FFF
;
W25Q128支持读取任意一个地址的数据,范围:0x000000~0xFFFFFF
根据绝对地址,获取这个地址所在的块和扇区位置就很简单了:
/* 存储地址 */
uint32_t addr = 0xC0A002;
/* 23-16位是块的位置 */
uint8_t block = addr >> 16; /* (addr & 0xFF0000)>>16*/
/* 15-12位是扇区的位置 */
uint8_t sector = (addr << 16) >> 28; /* (addr & 0x00F000)>>12 */
uart_init(115200);
printf("addr:%x, block:%d, sector:%d\r\n", addr, block, sector);
运行结果
运行结果
W25Q128的擦除,可以通过指令配置为单独的扇区擦除,单独的块擦除,或者整片擦除,整片擦除时间会比较长。
0xC7:整片擦除
0xD8:块擦除
0x20:扇区擦除
0xAB:获取芯片ID
0x90:获取芯片型号
0x06:写使能
0x04:禁止写
0xB9:进入掉电模式,功耗极低
0xAB:退出掉电模式
发送0x90命令之后的返回值表示当前器件的型号:
/*
0XEF13,表示芯片型号为W25Q80
0XEF14,表示芯片型号为W25Q16
0XEF15,表示芯片型号为W25Q32
0XEF16,表示芯片型号为W25Q64
0XEF17,表示芯片型号为W25Q128
*/
大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多。 JLink软件包含的工具中,有一个是JFlashSPI工具,可以烧写和读取SPI存储器。 可以参考:Jlink使用技巧之烧写SPI Flash存储芯片
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有