📄 flash._c
字号:
#include <iom161v.h>
#include <macros.h>
#include "Flash.h"
extern unsigned char PageBuf[512];
const unsigned char Fat16_Bpb[512]={
0xEB,0x03,0x90,'M','S','W','I','N','4','.','1',0,2,1,1,
0,2,0,2,0,0xfc,0xf8,0xfa,0,0x3f,0,0xff,0,0,0,0,0,0,0,0,0,//35
0,0,0x29,'1','2','3','4',
'Y','U','X','K','-','M','A','S','S','-','1',
'F','A','T','1','6',0,0,0,//61
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x55,0xAA//unsigned char ExecutableMarker[2]
};
void Flash_Reset(void)
{
FC_CMD=RESET;
asm("nop \n nop");
WAITRB;
}
unsigned int Check_Flash_Id(void)
{
unsigned int id;
FC_CMD=READID;
FC_ADDR=READ0;
id=FC_DATA<<8;
id+=FC_DATA;
FC_INACTIVE
return id;
}
BOOL Erase_Cluster(unsigned int cluster)
{
unsigned char v;
unsigned int blockPage=cluster*32;
fWPs;
FC_CMD=BLOCK_ERASE_1C;
FC_ADDR=blockPage%256;
FC_ADDR=blockPage/256;
FC_CMD=BLOCK_ERASE_2C;
asm("nop \n nop");
WAITRB;
FC_CMD=READSTATUS;
v=FC_DATA;
FC_INACTIVE
fWPc;
if(v&0x01)
return FALSE;
return TRUE;
}
void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
{
unsigned int i=512;
unsigned int blockPage=block*32+page;
FC_CMD=READ0;
FC_ADDR=0x00;
FC_ADDR=blockPage%256;
FC_ADDR=blockPage/256;
asm("nop \n nop");
WAITRB;
while(i--){*pPage++=FC_DATA;}
asm("nop \n nop");
WAITRB;
FC_CMD=RESET;
asm("nop \n nop");
WAITRB;
FC_INACTIVE
}
BOOL WritePage(unsigned int block,unsigned int page,unsigned char *pPage)
{
unsigned char v;
int i=512;
unsigned int blockPage=block*32+page;
fWPs;
FC_CMD=PAGEPROGRAM_1C;
FC_ADDR=0x00;
FC_ADDR=blockPage%256;
FC_ADDR=blockPage/256;
while(i--){FC_DATA=*pPage++;}
FC_CMD=PAGEPROGRAM_2C;
asm("nop \n nop");
WAITRB;
FC_CMD=READSTATUS;
v=FC_DATA;
FC_INACTIVE
fWPc;
if(v&0x1)
return FALSE;
return TRUE;
}
BOOL CopyBlack(unsigned int sblock,unsigned int spage,
unsigned int dblock,unsigned int dpage)
{
unsigned char v;
unsigned int blockPage=sblock*32+spage;
fWPs;
FC_CMD=COPY_BACK_1C;
FC_ADDR=0x00;
FC_ADDR=blockPage&0xff;
FC_ADDR=(blockPage>>8)&0xff;
asm("nop \n nop");
WAITRB;
blockPage=(dblock<<5)+dpage;
FC_CMD=COPY_BACK_2C;
FC_ADDR=0x00;
FC_ADDR=blockPage&0xff;
FC_ADDR=(blockPage>>8)&0xff;
asm("nop \n nop");
WAITRB;
FC_CMD=READSTATUS;
v=FC_DATA;
FC_INACTIVE
fWPc;
if(v&0x1)
return FALSE;
return TRUE;
}
void Format_Fat16Media()
{
unsigned int i,j;
for(i=0;i<512;i++)PageBuf[i]=Fat16_Bpb[i];
Erase_Cluster(0);
Erase_Cluster(1);
WritePage(0,0,PageBuf);
for(i=0;i<512;i++)PageBuf[i]=0;
PageBuf[0]=0xF8;
PageBuf[1]=0xFF;
PageBuf[2]=0xFF;
PageBuf[3]=0xFF;
WritePage(0,1,PageBuf);
WritePage(0,5,PageBuf);
PageBuf[0]=0x0;
PageBuf[1]=0x0;
PageBuf[2]=0x0;
PageBuf[3]=0x0;
WritePage(0,2,PageBuf);
WritePage(0,3,PageBuf);
WritePage(0,4,PageBuf);
for(i=6;i<32;i++)
WritePage(0,i,PageBuf);
for(i=0;i<32;i++)
WritePage(1,i,PageBuf);
}
/*
/////////////Format_Fat16Media()测试////////////////////
Format_Fat16Media();
ReadPage(0,0,PageBuf);
for(i=0;i<512;i++)
printf("%x ",PageBuf[i]);
printf("page1:\n");
ReadPage(0,1,PageBuf);
for(i=0;i<512;i++)
printf("%x ",PageBuf[i]);
printf("\n");
printf("page2:\n");
ReadPage(0,2,PageBuf);
for(i=0;i<512;i++)
printf("%x ",PageBuf[i]);
printf("\n");
printf("page3:\n");
ReadPage(0,3,PageBuf);
for(i=0;i<512;i++)
printf("%x ",PageBuf[i]);
printf("\n");
printf("page4:\n");
ReadPage(0,4,PageBuf);
for(i=0;i<512;i++)
printf("%x ",PageBuf[i]);
for(;;);
//////////////////////////////////
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -