[硬件]关于SPI Flash那些你不知道的事儿

简介: 刚开始学习STM32时,对SPI Flash的块、扇区的概念模糊不清,现在回头再看,感觉豁然开朗

以华邦W25Q128为例,详解SPI Flash的特点,读写注意事项,和地址范围等。


和EPROM的区别

以AT24C02 EPROM和W25Q128 SPI Flash为例。


  • EPROM通常采用是IIC串行总线,低速,单双工,通信速率一般是百KHz。而SPI Flash是采用的SPI总线,高速,全双工,通讯速率一般是百MHz。SPI Flash属于Flash ROM闪存,相比于EPROM,读写速度更快


  • EPROM通常用于存储不频繁读取的数据,如配置信息等,而EPROM通常用来存储经常读取的数据,如字库文件等。


  • EPROM读写比较随意,想写那个地址写那个,想读哪个地址读哪个!而SPI Flash则比较规范,擦除的最小单位是扇区。向某个地址写入数据时, 要先读取这个地址的数据是否为0xFF,如果不是0xFF,那么这个数据写入失败。所以通常的写操作是,在写某个地址之前,直接擦除这个地址所在的那个扇区,然后再写数据。当然,如果这个扇区的所有内容都是0xFF,则无需擦除,可以直接写入。


  • EPROM通常容量比较小,大小为KB级的,如AT24C02是2KB,而SPI Flash容量比较大,大小为MB级的,如W25Q16是16Mbit,也就是2MB。


  • EPROM型号通常是xx24系列,而SPI Flash通常是xx25系列,所以从芯片型号我们也可以看出ROM类型。


  • EPROM数据保存时间大约是100年,而SPI Flash数据保存时间为20年。


  • EPROM的读写次数为100万次左右,SPI Flash读写次数为10万次左右


AT24C02读写次数和存储时间

640.png


W25Q128读写次数和存储时间

640.png


块、扇区、页傻傻分不清

以华邦的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中,并没有重点提及页的地址范围。

640.png


地址范围

从存储容量来看,我们可以轻松的计算出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);


运行结果

640.png


常用指令

W25Q128的擦除,可以通过指令配置为单独的扇区擦除,单独的块擦除,或者整片擦除,整片擦除时间会比较长。

0xC7:整片擦除
0xD8:块擦除
0x20:扇区擦除
0xAB:获取芯片ID
0x90:获取芯片型号
0x06:写使能
0x04:禁止写
0xB9:进入掉电模式,功耗极低
0xAB:退出掉电模式


发送0x90命令之后的返回值表示当前器件的型号:

/*
0XEF13,表示芯片型号为W25Q80
0XEF14,表示芯片型号为W25Q16
0XEF15,表示芯片型号为W25Q32
0XEF16,表示芯片型号为W25Q64
0XEF17,表示芯片型号为W25Q128
*/


使用Jlink烧写SPI Flash

大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多。

JLink软件包含的工具中,有一个是JFlashSPI工具,可以烧写和读取SPI存储器。

可以参考:Jlink使用技巧之烧写SPI Flash存储芯片

目录
相关文章
Winform中Textbox、NumericUpDown等修改高度,禁止输入数字或内容的实现
Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过`Height`属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理,主要介绍三种方法...
3509 0
|
2月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
191 5
|
存储 算法 芯片
什么是SD NAND存储芯片
什么是SD NAND存储芯片
|
10月前
|
存储 监控 安全
旅游行业 J 人团队协作软件排行榜 TOP6
在旅游行业,春节旅游旺季对团队协作能力提出了严峻考验。针对这一需求,件;Asana 拥有层次分明的任务架构和实时进度跟踪;Podio 支持高度定制的工作流程和无缝集成;Smartsheet 以强大的数据表格管理和智能自动化著称;Zoho Projects 则提供全面的任务管理、资源分配监控和安全文档管理。这些工具各具特色,能够帮助旅游团队提升效率,在竞争中取得优势。
200 6
|
10月前
|
API Anolis 开发者
Intel® oneAPI 在龙蜥社区里面的支持情况分享|龙蜥大讲堂116期
本次分享的主题是 Intel® oneAPI 在龙蜥社区里面的支持情况分享。主要分为四个部分: 1. What is Intel® oneAPI 2. Intel® oneAPI infrastructure 3. Anolis Intel® oneAPI enabling status 4. Qwen2 demo
280 0
|
机器学习/深度学习 人工智能 小程序
做AI运动小程序有哪些解决方案,如何进行选型?
随着深度学习技术的发展,AI运动应用如“天天跳绳”和“百分运动”变得流行。本文探讨了将AI运动功能引入微信小程序的可行性,并介绍了几种解决方案。实现AI运动计数的关键技术包括视频抽帧、人体检测、姿态识别等。文中详细描述了离线方案(全离线和半离线)和原生方案(自研AI引擎和成熟插件)的不同实现方式,并对各种方案进行了对比,建议优先选择成本低、体验佳的AI运动识别插件方案。
|
Python
Python——将PPT和Word转为PDF文件
Python——将PPT和Word转为PDF文件
294 1
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
71165 5
详解HTTP四种请求:POST、GET、DELETE、PUT
|
开发工具 git
git clone 失败解决方法:Failed to connect to 127.0.0.1 port 31181 Connection refused
git clone 失败解决方法:Failed to connect to 127.0.0.1 port 31181 Connection refused
1209 1
git clone 失败解决方法:Failed to connect to 127.0.0.1 port 31181 Connection refused
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
下一篇
oss云网关配置