W25Q80和GD25Q80

二者同为SPI-Flash,前者为华邦公司产品,后者是GD公司产品。

W25Q80:

  • 8M-bit  1024KB  
  • 80MHz clock operation
  • 共有16个Block,每个Block有16个扇区,每个扇区4KB,每一页256个字节
  • 每个设备有64位唯一ID

GD25Q80:

  • 8M-bit  1024KB  
  • 120MHz 快速阅读
  • 共有16个Block,每个Block有16个扇区,每个扇区4KB,每一页256个字节
  • 每个设备有128位唯一ID

引脚:(二者引脚完全兼容)

寄存器:

W25Q80 状态寄存器(S15~S0)

BUSY:FLASH正在擦除或者正在写入

TB:Top/Bottom写保护位,与BP[2:0]构成更多组合

SEC:扇区保护位,与BP[2:0]构成更多组合

SRP0:状态寄存器保护位

这5位决定写保护的范围

GD25Q80 状态寄存器(S15~S0)

SUS:只读位,该位在擦除、编程、暂停指令后置1 个人感觉这位没什么用

CMP:与BP[4:0]构成更多的组合 默认置0,与W25q80保持兼容

HPM:该位置1表示FLASH当前是高性能模式 一般不用

LB:OTP位,写1,安全寄存器变为永久只读 一般不用

这6位决定写保护范围,其实除了S14,剩下的和W25Q80寄存器是一样的,都是S2~S6共5位

那么S14是什么东西呢?上文讲了,S14即CMP,CMP=0或1 时 只是保护的范围不同罢了

比如当CMP=0,S6~S2= 00010 时 写保护区域为  0E0000H-0FFFFFH 128KB(与W25Q80一样)

CMP=1时,S6~S2=00010时  写保护区域为   000000H-0DFFFFH 896KB

默认CMP=0,即与W25Q80保持兼容。

指令表:

以下指令二者是一样的,实际上GD32Q80多了很多指令,比如和安全寄存器相关的编程,擦除,读取三条指令,但是通常我们也只会用到以下指令。

#define W25X_WriteEnable		0x06 
#define W25X_WriteDisable		0x04 
#define W25X_ReadStatusReg		0x05 
#define W25X_WriteStatusReg		0x01 
#define W25X_ReadData			0x03 
#define W25X_FastReadData		0x0B 
#define W25X_FastReadDual		0x3B 
#define W25X_PageProgram		0x02 
#define W25X_BlockErase			0xD8 
#define W25X_SectorErase		0x20 
#define W25X_ChipErase			0xC7 
#define W25X_PowerDown			0xB9 
#define W25X_ReleasePowerDown	0xAB 
#define W25X_DeviceID			0xAB 
#define W25X_ManufactDeviceID	0x90 
#define W25X_JedecDeviceID		0x9F 

值得注意的是,二者厂商的ID和设备ID是不同的,原子例程有个死循环验证厂商和设备ID,如果用的是GD25系列的Flash需要改下相关宏定义。

华邦的厂商和设备ID(不是芯片唯一ID)一般是 0xEFXX,GD是0xC8XX(XX由不同容量决定)。

综上所述,二者可以互相替换。

猜你喜欢

转载自blog.csdn.net/qq_24835087/article/details/82896698