SPI实现Flash

1. 存储器分类

存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。

“易失/非易失”是指存储器断电后, 它存储的数据内容是否会丢失的特性。

在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。

RAM

Random access memory

ROM

read only memory

EEROM

Electrically Erasable Programmable Read-Only Memory

  • 断电保护
  • 可以随意访问和修改任何一个字节
  • 掉电不丢失,保存100年,擦写100w次

Flash

分为 NOR FLASHNAND FLASH

  • 擦除以块为单位,简化电路,降低成本
  • NOR FLASH,可以实现RAM一样的随机寻址功能,读取任意一个字节,擦除任需按块擦除
  • 整体擦除,按页读取
  • NOR FLASH按字节寻址,

2. W25Q芯片

2.1. 芯片简介

64/128代表的是存储大小

原理图:

时序图:

支持模式1和模式3

模式1:0 0 极性0,相位0

模式3:0 1 极性0,相位1

3. 读和写操作

3.1. 读取ID操作

根据代码:

得知:

高八位保存

低八位保存

3.2. 写入

3.2.1.1. 写入逻辑代码:

3.2.1.1.1. 扇区擦除操作

时序图:

传24位地址,是因为一部分找扇区地址,一部分找块存储地址

根据时序图来写代码,如下

擦除操作代码

除以4096是因为,一个扇区4个字节,一个字节1024k,是为了获取扇区的编号

擦除方法内部逻辑

①把地址右移16位,读取高八位的数据。 ——>读取00000000 00000000 00000000

②把地址右移八位,强转成uint8_t类型,相当于读取地址中间的八位地址 ——>读取00000000 00000000 00000000

③传输原地址,强转成uint8_t类型,读取最后面的八位地址 ——>读取00000000 00000000 00000000

擦除操作:

W25Q64_erase_sector(addr/4096);//擦除扇区数据(除以4096获取扇区编号)

具体实现:

void W25Q64_erase_sector(uint32_t addr)   
{
	addr *= 4096;
	W25Q64_write_enable();  //写使能   
	W25Q64_wait_busy();     //判断忙 
	gpio_bit_write(GPIOF, GPIO_PIN_6, RESET);                                        
	spi_read_write_byte(0x20);        	
	spi_read_write_byte((uint8_t)((addr)>>16));      
	spi_read_write_byte((uint8_t)((addr)>>8));  
	spi_read_write_byte((uint8_t)addr);  
	gpio_bit_write(GPIOF, GPIO_PIN_6, SET);                  
	//等待擦除完成                           	      	 
	W25Q64_wait_busy();   
}         				                      	      
3.2.1.1.2. 写使能:

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值