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

📄 fat16.lst

📁 usblab usb程序开发实验 一个实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
 184   1              unsigned int i ;
 185   1              unsigned int blockPage = (block << 5) + page;
 186   1      
 187   1              Flash_EN();
 188   1              Flash_Com();
 189   1              Flash_Write(0x00);
 190   1              Flash_Add();
 191   1              Flash_Write(0);
 192   1              Flash_Write(((UCHAR*)&blockPage)[1]);
 193   1              Flash_Write(((UCHAR*)&blockPage)[0]);
 194   1              Flash_Dat();
 195   1              Flash_WaitBusy();
 196   1      
 197   1              P2=0xFF;
 198   1              for(i=0;i<512;i++)
 199   1                      Flash_Read(*pPage++);
 200   1      
 201   1              Flash_DIS();
 202   1      }
 203          
 204          /*****************************************************************/
 205          /*功能:向FLASH的某个Block中的1page写入数据                         */
 206          /*     在文件系统中,有如下对应关系:Block=Cluster                   */
 207          /*                               Page =Sector                    */
 208          /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
 209          /*输出:0:Fail;1:OK                                               */
 210          /*****************************************************************/
 211          
 212          int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)  
 213          {
 214   1              unsigned char j;
 215   1              unsigned int i ;
 216   1              unsigned int blockPage = (block << 5) + page;
 217   1      
 218   1      
 219   1              Flash_EN();
 220   1              Flash_Com();
C51 COMPILER V8.01   FAT16                                                                 05/10/2006 10:39:04 PAGE 5   

 221   1              Flash_Write(0x80);
 222   1              Flash_Add();
 223   1              Flash_Write(0);
 224   1              Flash_Write(((UCHAR*)&blockPage)[1]);
 225   1              Flash_Write(((UCHAR*)&blockPage)[0]);
 226   1              Flash_Dat();
 227   1      
 228   1              for(i=0;i<512;i++)
 229   1                      Flash_Write(*pPage++);
 230   1      
 231   1              Flash_Com();
 232   1              Flash_Write(0x10);
 233   1              Flash_WaitBusy();
 234   1      
 235   1              Flash_Write(0x70);
 236   1              Flash_Dat();
 237   1              P2=0xFF;
 238   1              Flash_Read(j);
 239   1              Flash_DIS();
 240   1              
 241   1              if (j& 0x1)     //              
 242   1              {
 243   2                      return 0;
 244   2              }
 245   1              else
 246   1              {
 247   2                      return 1;
 248   2              }
 249   1      }
 250          
 251          
 252          void WriteMBR2Flash(void)
 253          {
 254   1              WritePage(Root_Cluster, BPB_Sector, BPB_Data);
 255   1      }
 256          
 257          void CreatFAT12(void)
 258          {
 259   1              short int i;
 260   1              unsigned char *FAT = Page_Buf;
 261   1              for (i=0; i<512; i++) 
 262   1              {
 263   2                      FAT[i] = 0x00;
 264   2              }
 265   1              //disk type lower byte is equal to Offset_U8_BPB_Media
 266   1              FAT[0] = 0xf8;
 267   1              FAT[1] = 0xff;//system occupied the first cluster
 268   1              FAT[2] = 0xff;
 269   1              FAT[3] = 0x7f;
 270   1              
 271   1                      WritePage(Root_Cluster, Fat_Sector, FAT);       //Sector 1 of Fat16
 272   1                      WritePage(Root_Cluster, Fat_Sector + 2, FAT);   //Sector 1 of Fat16
 273   1                      FAT[0] = FAT[1] = FAT[2] = FAT[3] = 0x00;
 274   1                      WritePage(Root_Cluster, Fat_Sector + 1, FAT);   //Sector 2 of Fat16
 275   1                      WritePage(Root_Cluster, Fat_Sector + 3, FAT);   //Sector 2 of Fat16
 276   1      }
 277          
 278          void CreatFAT16(void)
 279          {
 280   1              short int i;
 281   1              unsigned char *FAT = Page_Buf;
 282   1              for (i=0; i<512; i++) 
C51 COMPILER V8.01   FAT16                                                                 05/10/2006 10:39:04 PAGE 6   

 283   1              {
 284   2                      FAT[i] = 0x00;
 285   2              }
 286   1              //disk type lower byte is equal to Offset_U8_BPB_Media
 287   1              FAT[0] = 0xf8;
 288   1              FAT[1] = 0xff;//system occupied the first cluster
 289   1              FAT[2] = 0xff;
 290   1              FAT[3] = 0xff;
 291   1              
 292   1              WritePage(Root_Cluster, Fat_Sector, FAT);       //Sector 1 of Fat16
 293   1              WritePage(Root_Cluster, Fat_Sector + Fat_Size, FAT);    //Sector 1 of Fat16
 294   1              FAT[0] = FAT[1] = FAT[2] = FAT[3] = 0x00;
 295   1                      for(i=1;i<Fat_Size;i++)
 296   1                              {
 297   2                      //WritePage(Root_Cluster+i/32,  i%32, FAT);     //Sector 2 of Fat16
 298   2                      WritePage(Root_Cluster, Fat_Sector+i, FAT);
 299   2                      //WritePage(, Fat_Sector + 3, FAT);     //Sector 2 of Fat16
 300   2                              }
 301   1                      for(i=1;i<Fat_Size;i++)
 302   1                              {
 303   2                      WritePage(Root_Cluster,   Fat_Sector + Fat_Size+i, FAT);        //Sector 2 of Fat16
 304   2                      //WritePage(Root_Cluster, Fat_Sector + 3, FAT); //Sector 2 of Fat16
 305   2                              }
 306   1      }
 307          void CreatDirectoryEntry(void)
 308          {
 309   1              long int i;
 310   1              unsigned char *Directory_Enties = Page_Buf;
 311   1      
 312   1              for (i=0; i<512; i++)  
 313   1              {
 314   2                      Directory_Enties[i] = 0x00;
 315   2              }
 316   1      
 317   1              for (i=513; i<2048; i++) 
 318   1              {
 319   2                      WritePage(Root_Cluster + i / 32,  i % 32, Directory_Enties);
 320   2              }
 321   1              
 322   1      }
 323          
 324          void CreatDirectoryEntry16(void)
 325          {
 326   1              long int i;
 327   1              unsigned char *Directory_Enties = Page_Buf;
 328   1      
 329   1              for (i=0; i<512; i++)  
 330   1              {
 331   2                      Directory_Enties[i] = 0x00;
 332   2              }
 333   1      
 334   1              for (i=0; i<512; i++) 
 335   1              {
 336   2                              WritePage(0, Fat_Sector+Fat_Size+Fat_Size+i, Directory_Enties);
 337   2      
 338   2              }       
 339   1      }
 340          
 341          //函数实现
 342          void Format_Fat12Media(void)
 343          {       
 344   1              WriteMBR2Flash();
C51 COMPILER V8.01   FAT16                                                                 05/10/2006 10:39:04 PAGE 7   

 345   1              printf("\nCreat BPB Succeed");
 346   1              CreatFAT12();
 347   1              printf("\nCreat FAT12 Succeed");
 348   1              CreatDirectoryEntry();
 349   1              printf("\nCreat Directory Entry Succeed");
 350   1      
 351   1              printf("\nFlash have been Fomarted");
 352   1      }
 353          //函数实现
 354          void Format_Fat16Media(void)
 355          {       
 356   1              WriteMBR2Flash();
 357   1              printf("\nCreat BPB Succeed");
 358   1              
 359   1              CreatFAT16();
 360   1              printf("\nCreat FAT16 Succeed");
 361   1              
 362   1              CreatDirectoryEntry16();
 363   1              printf("\nCreat Directory Entry Succeed");
 364   1      
 365   1              printf("\nFlash have been Fomarted");
 366   1      }
 367          
 368          void Format_Flash(void)
 369          {
 370   1              unsigned int i;
 371   1      
 372   1              for(i=0;i<1000;i++)
 373   1                      if(Erase_Block(i)==0)
 374   1                              {
 375   2                              printf("\nErase NG!");
 376   2                              return;
 377   2                              }
 378   1              printf("\n32M Flash Format Over");
 379   1                      
 380   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1337    ----
   CONSTANT SIZE    =    664    ----
   XDATA SIZE       =    512    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      38
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -