整个是相当于把其中一个扇区当中转站,我也是这么想的,但是我测试的时候遇到了问题,不知道是哪里的问题,程序如下,你帮我看下:
void W25q16_PageWrite(uint page,uchar *DataBuffer,uint DataSize)
{
uint_32 DataAddr,Sector_Addr,Page_Addr,Zhong_Addr;
uint j;
uchar i;
j=page/16;
Sector_Addr=j*4096; //page/16Ϊ¸ÃÒ³ËùÔÚµÄÉÈÇø ³ËÒÔ4096ΪÉÈÇøµÄÊ×µØÖ·
DataAddr=page*256;//Ò³µÄÆðʼÊ×µØÖ·
SectorErase(0); //ÉÈÇø0×öÖÐתվ ²Á³öÉÈÇø0µÄÊý¾Ý
for(i=0;i<16;i++) //ÉÈÇø°áÒÆÊý¾Ý Ä¿±êÉÈÇøÊý¾Ý->ÉÈÇø0
{
Zhong_Addr=256*i;
Page_Addr=Sector_Addr+Zhong_Addr;
W25Q16_Read(Page_Addr,Page_BUFFER,256); //¶ÁȡĿ±êÉÈÇøÒ³Êý¾Ý
W25Q16_Write(Zhong_Addr,Page_BUFFER,256);//Êý¾Ýдµ½ÖÐתÉÈÇøÒ³
}
SectorErase(Sector_Addr); //²Á³ýÄ¿±êÉÈÇøÊý¾Ý
for(i=0;i<16;i++)
{
Zhong_Addr=256*i;
Page_Addr=Sector_Addr+Zhong_Addr;
W25Q16_Read(Zhong_Addr,Page_BUFFER,256);//¶ÁÈ¡ÖÐתÉÈÇøÒ³Êý¾Ý
//if(Page_Addr==DataAddr)
if(i==(page%16))
W25Q16_Write(Page_Addr,DataBuffer,DataSize);//Òª´æ´¢µÄÄ¿±êÒ³
else
W25Q16_Write(Page_Addr,Page_BUFFER,256);//Êý¾Ý×ªÒÆµ½Ä¿±êÉÈÇøÒ³
}
}
|