初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2013-12-28
- 在线时间
- 0 小时
|
5金钱
我从淘宝上买了块W25Q64,然后在里面写数据时发现,
在地址10000H处开始写256字节,然后在00000H处就可以读到
然后访问10000H、20000H、30000H、40000H。。。。处,其内容和00000H处的内容一模一样。
感觉就好像它的地址是65536一个循环,内存有效大小只有64KB,根本没有传说中的8MB大小,用的读写程序是原子哥开发板提供的,如下。
不知道大家有没有遇到过这情况,是买到了假货?还是程序调用有问题,求助
用到的程序:
------------------------------------------------------------------------
//读取SPI FLASH
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
SPI2_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer=SPI2_ReadWriteByte(0XFF); //循环读数
}
SPI_FLASH_CS=1; //取消片选
}
//SPI在一页(0~65535)内写入少于256个字节的数据
//在指定地址开始写入最大256字节的数据
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!!
void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
u16 i;
SPI_FLASH_Write_Enable(); //SET WEL
SPI_FLASH_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_PageProgram); //发送写页命令
SPI2_ReadWriteByte((u8)((WriteAddr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((WriteAddr)>>8));
SPI2_ReadWriteByte((u8)WriteAddr);
for(i=0;i<NumByteToWrite;i++)SPI2_ReadWriteByte(pBuffer);//循环写数
SPI_FLASH_CS=1; //取消片选
SPI_Flash_Wait_Busy(); //等待写入结束
}
|
最佳答案
查看完整内容[请看2#楼]
SPI_Flash_Write_Page就只能支持一页写入。
你没看函数注释么?
用另外一个函数:SPI_Flash_Write,这个才支持任意地址写入。
|