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

📄 oren_mtd.c

📁 M-System DOC(Disk on a Chip) Flash芯片的诊断工具, 可以从Flash芯片中获取特定的数据信息, 用于判断芯片当前的状态.
💻 C
📖 第 1 页 / 共 5 页
字号:
              DBG_PRINT_ERR(FLZONE_MTD,"initMedia:ERROR: Flash returned invalid value in READ_ID_2 sequence \r\n");                           
              return flUnknownMedia ;				 
			}
#endif
			flashPtr->type                  = TC58512_FLASH;
            MTD_VARS->bNoOfPlanesBits       = 2;
            MTD_VARS->bAddressBytes         = 4;
            MTD_VARS->bPageSizeBits         = 9;
            flashPtr->maxEraseCycles        = 100000L;     
            flashPtr->evenPagePPP           = 1 ; 
            flashPtr->oddPagePPP            = 1 ; 
            break ; 
         case 0x79: /***  Toshiba 1 GigaBit (128 MByte)  ***/
#ifdef ERASED_FLASH
       if (IsFlashErased(flashPtr)==FALSE)            
#endif
            checkStatus (OREN_readID_2_Seq (flashPtr,&bSubType)) ;  
            flashPtr->subType = (FlashType)(bSubType) ;
#ifndef ERASED_FLASH
          if (flashPtr->subType==0x24) 
#endif
            {  /* MLC CHIP */
               MTD_VARS->bFlashType         = OREN_MLC_TYPE  ;   
               MTD_VARS->wPagesPerBlockBits = 6 ; 
               MTD_VARS->wUnitsInChip       = 4096;
               MTD_VARS->bPlaneArraysInChip = 1 ; /* One plane array in MLC */
               flashPtr->averageWrite       = 1200 ;
               flashPtr->averageErase       = 2000 ;                                                                                   
               DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Toshiba 128MB (UnitSize=32KB) MLC detected.\r\n");                           
            }
#ifndef ERASED_FLASH
			else if (flashPtr->subType==0x20)
			{  /* SLC CHIP */
               MTD_VARS->bFlashType         = OREN_SLC_TYPE  ;   
               MTD_VARS->wPagesPerBlockBits = 5 ; 
               MTD_VARS->wUnitsInChip       = 8192 ;
               MTD_VARS->bPlaneArraysInChip = 1 ; 
               flashPtr->averageWrite       = 200 ;
               flashPtr->averageErase       = 2000 ;                                                                    
               DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Toshiba 128MB (UnitSize=16KB) SLC detected.\r\n");                           				
			}
#endif
#ifndef ERASED_FLASH		
			else
			{
              DBG_PRINT_ERR(FLZONE_MTD,"initMedia:ERROR: Flash returned invalid value in READ_ID_2 sequence \r\n");                           
              return flUnknownMedia ;				 
			}
#endif
            flashPtr->type                  = TC58100FT;
            MTD_VARS->bNoOfPlanesBits       = 2;
            MTD_VARS->bAddressBytes         = 4;
            MTD_VARS->bPageSizeBits         = 9;
            flashPtr->maxEraseCycles        = 100000L;     
            flashPtr->evenPagePPP           = 1 ; 
            flashPtr->oddPagePPP            = 1 ; 
            break ; 
         case 0xF1:  /***  Toshiba 1 GigaBit (128 MB) 8 bit interface 2K page ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 6 ; 
            MTD_VARS->wUnitsInChip       = 1024 ;
            MTD_VARS->bPlaneArraysInChip = 1 ; 
            flashPtr->type               = TC58NVG0S3AFT05 ;
            MTD_VARS->bNoOfPlanesBits    = 0 ;
            MTD_VARS->bAddressBytes      = 4 ;
            MTD_VARS->bPageSizeBits      = 11;        /* 2K Page */
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 2; 
            flashPtr->oddPagePPP         = 2; 
            flashPtr->subType            = 0x00 ;
            flashPtr->averageWrite       = 200 ;
            flashPtr->averageErase       = 2000 ;                                      
            DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Toshiba 128MBx8 (UnitSize=128KB) 2K Page detected.\r\n");                           
            break ;    
        case 0xDA:  /***  Toshiba 2 GigaBit (256 MByte)  ***/
            checkStatus (OREN_enhancedReadID_Seq (flashPtr,bEnhancedData)) ;
			if ( ((bEnhancedData[0]==0x81) || (bEnhancedData[0]==0x01)) &&                 
                 ((bEnhancedData[1]==0x95) || (bEnhancedData[1]==0x15)) &&
                 ((bEnhancedData[2]==0x44) || (bEnhancedData[2]==0xc4)) )
			{ /*** 0.13u 2KPage SLC device ***/
              MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
              MTD_VARS->wPagesPerBlockBits = 6 ; 
              MTD_VARS->wUnitsInChip       = 2048 ;
              MTD_VARS->bPlaneArraysInChip = 1 ; 
              flashPtr->type               = TC58NVG1S3AFT05 ;
              MTD_VARS->bNoOfPlanesBits    = 0 ;
              MTD_VARS->bAddressBytes      = 5 ;
              MTD_VARS->bPageSizeBits      = 11;        /* 2K Page */
              flashPtr->maxEraseCycles     = 100000L;     
              flashPtr->evenPagePPP        = 2; 
              flashPtr->oddPagePPP         = 2; 
              flashPtr->subType            = 0x00 ;
              flashPtr->averageWrite       = 200 ;
              flashPtr->averageErase       = 2000 ;                                      
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Toshiba 256MBx8 (UnitSize=128KB) 2K Page detected.\r\n");                           
              break ;    
			}
            else			 
			{ /*** 0.13u MLC device ***/
              MTD_VARS->bFlashType            = OREN_MLC_TYPE  ; 
              MTD_VARS->wPagesPerBlockBits    = 6 ; /* 64 pages */
              MTD_VARS->wUnitsInChip          = 8192 ;
              MTD_VARS->bPlaneArraysInChip    = 1 ; 
              flashPtr->averageWrite          = 1200 ;
              flashPtr->averageErase          = 2000 ;                                     
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia : Recongnized an MLC Toshiba 256MB (UnitSize=32KB).\r\n");                         
			}
           flashPtr->type                  = TC58020FT;
           MTD_VARS->bNoOfPlanesBits       = 2;
           MTD_VARS->bAddressBytes         = 4;
           MTD_VARS->bPageSizeBits         = 9;
           flashPtr->maxEraseCycles        = 100000L;     
           flashPtr->evenPagePPP           = 1 ; 
           flashPtr->oddPagePPP            = 1 ; 
           break ;      
        case 0xDC:  /***  Toshiba 4 GigaBit (512 MByte)  ***/
#ifdef ERASED_FLASH
       if (IsFlashErased(flashPtr)==FALSE)            
#endif
            checkStatus (OREN_readID_2_Seq (flashPtr,&bSubType)) ;  
            flashPtr->subType = (FlashType)(bSubType) ;
#ifndef ERASED_FLASH		
            if (flashPtr->subType==0x25) 
#endif
			{ /*** 0.13u MLC device ***/
              MTD_VARS->bFlashType            = OREN_MLC_TYPE  ; 
              MTD_VARS->wPagesPerBlockBits    = 6 ; /* 64 pages */
              MTD_VARS->wUnitsInChip          = 16384 ;
              MTD_VARS->bPlaneArraysInChip    = 1 ; 
              flashPtr->averageWrite          = 1200 ;
              flashPtr->averageErase          = 2000 ;                                     
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia : Recongnized an MLC Toshiba 512MB (erase Unit of 32KB).\r\n");                         
			}
#ifndef ERASED_FLASH		
			else
			{
              DBG_PRINT_ERR(FLZONE_MTD,"initMedia:ERROR: Flash returned invalid value in READ_ID_2 sequence \r\n");                           
              return flUnknownMedia ;				 
			}
#endif
           flashPtr->type                  = TC58020FT;
           MTD_VARS->bNoOfPlanesBits       = 2;
           MTD_VARS->bAddressBytes         = 4;
           MTD_VARS->bPageSizeBits         = 9;
           flashPtr->maxEraseCycles        = 100000L;     
           flashPtr->evenPagePPP           = 1 ; 
           flashPtr->oddPagePPP            = 1 ; 
           break ;        		   
       default : return flUnknownMedia ;     /* Undefined Flash     */                                                      
       }
       break ;
     }  
     case 0xC1:/*** Infineon chips ***/ 
     {
       switch (bDeviceCode)
       {
        case 0x76:  /***  Infineon 128 MegaBit (16 MB)  ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 5 ; 
            MTD_VARS->wUnitsInChip       = 4096 ;
            MTD_VARS->bPlaneArraysInChip = 1 ; 
            flashPtr->type               = TC58256_FLASH ;
            MTD_VARS->bNoOfPlanesBits    = 0 ;
            MTD_VARS->bAddressBytes      = 4;
            MTD_VARS->bPageSizeBits      = 9;
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 5 ; 
            flashPtr->oddPagePPP         = 5 ; 
            flashPtr->subType            = 0x00 ;
            flashPtr->averageWrite       = 200 ;
            flashPtr->averageErase       = 4000 ;                          
            DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Infineon 64MB (UnitSize=16KB) detected.\r\n");                           
            break ; 
       }
       break ;
     }
     case 0xEC:/*** Samsung chips  ***/
     {
       switch (bDeviceCode)
       {
         case 0x73:  /***  Samsung 128 MegaBit (16 MB) 8 bit interface  ***/
         case 0x53:  /***  Samsung 128 MegaBit (16 MB) 16 bit interface  ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 5 ; 
            MTD_VARS->wUnitsInChip       = 1024 ;
            MTD_VARS->bPlaneArraysInChip = 1 ; 
            flashPtr->type               = KM29V128000_FLASH ;
            MTD_VARS->bNoOfPlanesBits    = 0 ;
            MTD_VARS->bAddressBytes      = 3;
            MTD_VARS->bPageSizeBits      = 9;
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 3; 
            flashPtr->oddPagePPP         = 3; 
            flashPtr->subType            = 0x00 ;
            flashPtr->averageWrite       = 200 ;
            flashPtr->averageErase       = 2000 ;                                      
            if (bDeviceCode==0x73)
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 16MBx8 (UnitSize=16KB) detected.\r\n");                                   
            }
            else
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 16MBx16 (UnitSize=16KB) detected.\r\n");                           
#ifdef ERASED_FLASH
              flashPtr->interleaving       = 2 ; 
#endif         
            }
            break ;     
         case 0x75:  /***  Samsung 256 MegaBit (32 MB) 8 bit interface  ***/    
         case 0x55:  /***  Samsung 256 MegaBit (32 MB) 16 bit interface  ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 5 ; 
            MTD_VARS->wUnitsInChip       = 2048 ;
            MTD_VARS->bPlaneArraysInChip = 1 ; 
            flashPtr->type               = KM29V128000_FLASH ;
            MTD_VARS->bNoOfPlanesBits    = 0 ;
            MTD_VARS->bAddressBytes      = 3;
            MTD_VARS->bPageSizeBits      = 9;
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 3; 
            flashPtr->oddPagePPP         = 3; 
            flashPtr->subType            = 0x00 ;
            flashPtr->averageWrite       = 200 ;
            flashPtr->averageErase       = 2000 ;                                      
            if (bDeviceCode==0x75)            
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 32MBx8 (UnitSize=16KB) detected.\r\n");                           
            }
            else
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 32MBx16 (UnitSize=16KB) detected.\r\n");                           
#ifdef ERASED_FLASH
              flashPtr->interleaving       = 2 ; 
#endif               
            }        
            break ;          
         case 0x76:  /***  Samsung 512 MegaBit (64 MB) 8 bit interface  ***/
         case 0x56:  /***  Samsung 512 MegaBit (64 MB) 16 bit interface ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 5 ; 
            MTD_VARS->wUnitsInChip       = 4096 ;
            MTD_VARS->bPlaneArraysInChip = 1 ; 
            flashPtr->type               = KM29V512000_FLASH ;
            MTD_VARS->bNoOfPlanesBits    = 0 ; /* The new process has only 1 plane */
            MTD_VARS->bAddressBytes      = 4;
            MTD_VARS->bPageSizeBits      = 9;
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 2; 
            flashPtr->oddPagePPP         = 2; 
            flashPtr->subType            = 0x00 ;
            flashPtr->averageWrite       = 200 ;
            flashPtr->averageErase       = 2000 ;                                      
            if (bDeviceCode==0x76)            
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 64MBx8 (UnitSize=16KB) detected.\r\n");                           
            }
            else
            {
              DBG_PRINT_WRN(FLZONE_MTD,"initMedia:Samsung 64MBx16 (UnitSize=16KB) detected.\r\n");                           
#ifdef ERASED_FLASH
              flashPtr->interleaving       = 2 ; 
#endif               
            }        
            break ;                                          
         case 0x79:  /***  Samsung 1 GigaBit (128 MB) 8 bit interface with planes ***/
            MTD_VARS->bFlashType         = OREN_SLC_TYPE  ; 
            MTD_VARS->wPagesPerBlockBits = 5 ; 
            MTD_VARS->wUnitsInChip       = 8192 ;
            MTD_VARS->bPlaneArraysInChip = 2 ; 
            flashPtr->type               = KM29V1024000_FLASH ;
            MTD_VARS->bNoOfPlanesBits    = 2 ;
            MTD_VARS->bAddressBytes      = 4;
            MTD_VARS->bPageSizeBits      = 9;
            flashPtr->maxEraseCycles     = 100000L;     
            flashPtr->evenPagePPP        = 2; 

⌨️ 快捷键说明

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