⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rd_wr_k9f5608.c

📁 C51读写K9F5608源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
               
			   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 + -