新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2016-10-13
- 在线时间
- 4 小时
|
2金钱
小弟新手,想要请教在以下两个函数中要读取和要写入的字节数为什么是65535个,65536个字节刚好是一个block,W25Q128是不是不能跨块读写数据?还是有其他原因?求解。
//读取SPI FLASH
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead) //读取flash
{
u16 i;
W25QXX_CS=0;
SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24位地址
SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
SPI2_ReadWriteByte(ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer[i]=SPI2_ReadWriteByte(0xFF);
}
W25QXX_CS=1;
}
*********************************************************
//无检验写SPI FLASH
//必须确保所写的地址范围内的数据全部为OXFF,否则在非0xFF处写入的数据将失败
//具有自动换页功能
//在指定地址开始写入指定长度的数据,但是要确保地址不越界
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NunByteToWrite:要写入的字节数(最大65535)
//CHECK OK
void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
u16 pageremain;
pageremain=256-WriteAddr%256;
if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;
while(1)
{
W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
if(NumByteToWrite==pageremain)break;
else
{
pBuffer+=pageremain;
WriteAddr+=pageremain;
NumByteToWrite-=pageremain;
if(NumByteToWrite>256)pageremain=256;
else pageremain=NumByteToWrite;
}
}
}
|
|