📄 rd_wr_k9f5608.c
字号:
tmp=L_Row_Address/0x20;
tmp*=0x20;
Block_Address=(uint)(H_Row_Address*256)+(uint)(tmp);
bad_block_num=0;
while(Block_Address<0xFFE1)
{
Area=0x50;
H_Row_Address=(Byte)(Block_Address>>8);
L_Row_Address=(Byte)(Block_Address);
Column_Address=0;
Nf_ready_read();
Nf_wait_busy();
for(i=0;i<5;i++)
{
ReceiveBuff[i]=Nf_rd_byte();
}
if(ReceiveBuff[0]==0xAA && ReceiveBuff[1]!=0xBB)
{
//·??μ?é,2¢?òò??-D′á?μ??·,2¢?ò??óDD′?ú.
//?òμ?á??éμ??·
page=0;
Column_Address=2;//column2 ,column3 ---±íê?ê?·?D′?ú±?ò3?£
while(page<32)
{
Nf_ready_read();
Nf_wait_busy();
for(i=0;i<2;i++)
{
ReceiveBuff[i]=Nf_rd_byte();
}
if(ReceiveBuff[0]==0xCC && ReceiveBuff[1]==0xDD )
{
//?aò3ò??-′??ú
page++;
Area=0x50;
Block_Address++;
H_Row_Address=(Byte)(Block_Address>>8);
L_Row_Address=(Byte)(Block_Address);
}
else
{
//??óD′??ú
if(ReceiveBuff[0]==0xFF)
{
//A area
Area=0;
}
else if(ReceiveBuff[1]==0xFF)
{
//B area
Area=1;
}
Column_Address=0;
while(Column_Address<250)
{
Nf_ready_read();
Nf_wait_busy();
for(i=0;i<5;i++)
{
ReceiveBuff[i]=Nf_rd_byte();
}
if(ReceiveBuff[0]==0xFF && ReceiveBuff[1]==0xff && ReceiveBuff[2]==0xff)
{
//μ±?°?a??μ??·?′ê?×?oóò???óDD§μ?′?′¢μ??·,ò2ê?é?ò??????tμ?óDD§μ??áê?μ??·.
//D′è?μ±?°???tμ??áê??°?μ?éD??¢
ReceiveBuff[0]=Area;
ReceiveBuff[1]=Column_Address;
ReceiveBuff[2]=L_Row_Address;
ReceiveBuff[3]=H_Row_Address;
ReceiveBuff[4]=0;
Area=rd_Area;
Column_Address=rd_Column_Address+10;
L_Row_Address=rd_L_Row_Address;
H_Row_Address=rd_H_Row_Address;
do
{
Nf_ready_write();
for(i=0;i<5;i++)
{
Nf_wr_byte(ReceiveBuff[i]);
}
Nf_wr_byte((Byte)(bad_block_num>>8));
Nf_wr_byte((Byte)(bad_block_num));
Nf_wr_byte(0xAA);
Nf_write_start();
DelayXms(1);
watchdog();
Nf_wait_busy();
} while(!nf_check_status());
//D′è? íê3é.á?
Area=ReceiveBuff[0];
Column_Address=ReceiveBuff[1];
L_Row_Address=ReceiveBuff[2];
H_Row_Address=ReceiveBuff[3];
goto exit_init;
}
else
{
Column_Address+=5;
}
}//end while(Column_Address<250)
}//end else
}//end while(page<32)
}
else
{
//′??éò??-D′?ú?òê??μ?é£?2é?ò??ò??é?£
//point to next block
if(ReceiveBuff[4]==0xE0) bad_block_num++;
Block_Address+=0x20;
}
}//end while(i<17)
}//end if(j!=0)
else if(j==0)
{
//2??áóD?a???é??
_nop_();
}
}
else
{
//′?′¢?÷??óDê1ó?
store_ok=0;
file_serial=0;
Area=0;
Column_Address=0x00;
L_Row_Address=0x20;
H_Row_Address=0x00;
new_block=1;
}
}
else
{
//?′3?ê??ˉ1y
init_ok=0;
nf_all_erase();
// éè?¨μ±?°′?′¢????
Area=0;
Column_Address=0x00;
L_Row_Address=0x20;
H_Row_Address=0x00;
new_block=1;
init_ok=1;
store_ok=0;
file_serial=0;
}
exit_init: watchdog();
}
/*****************************************
1|?ü£o
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************/
void check_files_store(void)
{
uchar i=0,j=0,k=0,l=0;
uchar files_serial=0;
EA=0;
if(file_serial!=0)
{
//óDìí3????t
Send2PC(0xFF);//′óèYá?′?′¢?÷±ê??
Send2PC(file_serial);//???t??êy
DelayXms(20);
Area=0;Column_Address=0;L_Row_Address=11;H_Row_Address=0;//11page,0block
files_serial=file_serial;//temp store
while(files_serial--)
{
Nf_ready_read();
Nf_wait_busy();
l=0;k=0;
while(l++<5)
{
//?aá??úê??ú2?Ram£?·?5′??áíê25??×??ú
for(j=0;j<5;j++) { ReceiveBuff[j]=Nf_rd_byte();}
OpenXram();
for(j=0;j<5;j++) { sio_buff[k++]=ReceiveBuff[j];}
CloseXram();
}
OpenXram();
for(k=0;k<25;k++) { Send2PC(sio_buff[k]); }
CloseXram();
DelayXms(20);
Column_Address+=25;
if(Column_Address==250)
{
if(Area==0)
{
Area=1;
Column_Address=0;
}
else if(Area==1)
{
Area=0;
L_Row_Address++;
}
}
}
}
else
{
//??óDìí3????t
EA=0;
Send2PC(0xFF);
Send2PC(0x00);
}
CheckFiles=0;
EA=1;
}
/*****************************************
1|?ü£o
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************/
void answer_pc_read(void)
{
uint i=0,len=0;
uchar j=0,k=0;
EA=0;
if(array_size>100) array_size=100;
for(j=0;j<array_size;j++) //?á3??ùóD£???′????ü?á3?ò?×é?£
{
read_flash();
OpenXram();
for(k=0;k<5;k++)
{ read_buff[i++]=ReceiveBuff[k];}
CloseXram();
}
len=(uint)(array_size*5); //ò?′?′??íêy?Y??êy£?×??ú?aμ¥???£
OpenXram();
for(i=0;i<len;i++)
{
Send2PC(read_buff[i]);
}
CloseXram();
PcAskMcu=0;
EA=1;
}
/*****************************************
1|?ü£o
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************/
void count_rd_address(void)
{
uchar tmp=0,j=0;
EA=0;
file_index--;
H_Row_Address=0;
tmp=file_index/20; //??ò3?éò?????20?????tí·D??¢?£
L_Row_Address=11+tmp;
tmp=file_index%20;
if(tmp<10)
{
Area=0;
}
else
{
Area=1;
tmp-=10;
}
Column_Address=tmp*25+5;//???t????μ?í·μ??·?£
Nf_ready_read();
Nf_wait_busy();
for(j=0;j<5;j++) { ReceiveBuff[j]=Nf_rd_byte();}
rd_Area=ReceiveBuff[0];
rd_Column_Address=ReceiveBuff[1];
rd_L_Row_Address=ReceiveBuff[2];
rd_H_Row_Address=ReceiveBuff[3];
Column_Address+=10;//?′ê?·?óD?μ?é
Nf_ready_read();
Nf_wait_busy();
for(j=0;j<2;j++) { ReceiveBuff[j]=Nf_rd_byte();}
if((ReceiveBuff[0]==0x00 && ReceiveBuff[1]==0x00) ||(ReceiveBuff[0]==0xFF && ReceiveBuff[1]==0xFF))
{ bad_block=0; }
else
{ bad_block=1; }
CountAdd=0;
EA=1;
}
/*****************************************
1|?ü£o2aê?′?′¢?÷
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************/
void erase_all_block(void)
{
EA=0;
EraseAllBlock=0;
nf_all_erase();
init_flash();
Send2PC(0x63); //end erase
Send2PC(0xFF);
Send2PC(0xFF);
EA=1;
}
/*****************************************
1|?ü£o
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************/
void answer_system_info(void)
{
EA=0;
Send2PC(0x01); //μ±?°′?′¢????μ??eê?????
if(init_ok) { Send2PC(0xA0);}
else { Send2PC(0xAF);}
if(store_ok) { Send2PC(0xB0);}
else { Send2PC(0xBF);}
if(bad_block){ Send2PC(0xCF);}
else { Send2PC(0xC0);}
Send2PC(0x02);//μ±?°′?′¢??????μ??eê?????
Send2PC(Area);
Send2PC(Column_Address);
Send2PC(L_Row_Address);
Send2PC(H_Row_Address);
Send2PC(0x03); //μ±?°?áè?êy?Yμ??eê?????
Send2PC(array_size);
Send2PC(file_serial);
Send2PC(rd_Area);
Send2PC(rd_Column_Address);
Send2PC(rd_L_Row_Address);
Send2PC(rd_H_Row_Address);
AskSysInfo=0;
EA=1;
}
/*****************************************
1|?ü£oDelayXms
?èê?£o?óê±Xoá??
2?êy£ooá??êy
·μ??£o?T
******************************************/
void DelayXms(unsigned char dtime) //?óê±ê±??=dtime*1ms
{
data uchar k=0;
data uint i=0;
for(k=0;k<dtime;k++)
{
for(i=0;i<140;i++) {;}
}
}
/*****************************************
1|?ü£o2aê?′?′¢?÷
?èê?£o
2?êy£o
·μ??£o
±?×¢£o
******************************************
void test_xram(void)
{
FlashSerial=0;
FlashIndex=0;
FlashNum=0;
if(!firstdata)
{
FlashBuff[FlashSerial][0]=1;
FlashBuff[FlashSerial][1]=2;
FlashBuff[FlashSerial][2]=3;
FlashBuff[FlashSerial][3]=0xFE;
FlashBuff[FlashSerial][4]=0x55;
FlashSerial++;FlashNum++;
}
FlashBuff[FlashSerial][0]=1;
FlashBuff[FlashSerial][1]=2;
FlashBuff[FlashSerial][2]=3;
FlashBuff[FlashSerial][3]=0x05;
FlashBuff[FlashSerial][4]=100;
FlashSerial++;FlashNum++;
FlashBuff[FlashSerial][0]=1;
FlashBuff[FlashSerial][1]=2;
FlashBuff[FlashSerial][2]=4;
FlashBuff[FlashSerial][3]=0x8A;
FlashBuff[FlashSerial][4]=101;
FlashSerial++;FlashNum++;
FlashBuff[FlashSerial][0]=1;
FlashBuff[FlashSerial][1]=2;
FlashBuff[FlashSerial][2]=5;
FlashBuff[FlashSerial][3]=0x0B;
FlashBuff[FlashSerial][4]=102;
FlashSerial++;FlashNum++;
FlashBuff[FlashSerial][0]=1;
FlashBuff[FlashSerial][1]=2;
FlashBuff[FlashSerial][2]=6;
FlashBuff[FlashSerial][3]=0x8C;
FlashBuff[FlashSerial][4]=103;
FlashSerial++;FlashNum++;
}
*/
/*
void test_flash(void)
{
uchar i=0,j=0;
uchar tempbuff[20];
bit sta;
Column_Address=0;
L_Row_Address=1;
H_Row_Address=0;
Nf_CS_ON();
Nf_send_command(NF_READ_A_AREA_CMD); //
Nf_send_address(Column_Address);
Nf_send_address(L_Row_Address);
Nf_send_address(H_Row_Address);
watchdog();
Nf_wait_busy();
//DelayXms(3);
for(i=0;i<20;i++)
{
tempbuff[i]=Nf_rd_byte();
}
Area=0;
Column_Address=30;
L_Row_Address=0;
H_Row_Address=0;
Nf_send_command(Area);
Nf_send_command(NF_SEQUENTIAL_DATA_INPUT_CMD);
Nf_send_address(Column_Address);
Nf_send_address(L_Row_Address);
Nf_send_address(H_Row_Address);
for(i=0;i<6;i++)
{
j=i*2;
Nf_wr_byte(j);
ReceiveBuff[i]=0;
}
//DelayXms(2);
Nf_send_command(NF_PAGE_PROGRAM_CMD);
DelayXms(1);
watchdog();
Nf_wait_busy();
sta=nf_check_status();
Column_Address=30;
L_Row_Address=0;
H_Row_Address=0;
Nf_send_command(NF_READ_A_AREA_CMD); //
Nf_send_address(Column_Address);
Nf_send_address(L_Row_Address);
Nf_send_address(H_Row_Address);
while (!NF_RD_BUSY);
//DelayXms(3);
for(i=0;i<6;i++)
{
ReceiveBuff[i]=Nf_rd_byte();
}
_nop_();
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -