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

📄 flash._c

📁 Atmeag162-k9f5608-pdiusbd12-u usb接口 u盘源码 包括fat文件源码
💻 _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 + -